aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--Makefile.def2
-rw-r--r--Makefile.in69
-rw-r--r--Makefile.tpl1
-rwxr-xr-xconfigure4
-rw-r--r--configure.ac3
-rw-r--r--contrib/ChangeLog5
-rwxr-xr-xcontrib/gen_autofdo_event.py21
-rw-r--r--gcc/ChangeLog518
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/ada/ChangeLog4
-rw-r--r--gcc/auto-profile.cc184
-rw-r--r--gcc/avoid-store-forwarding.cc51
-rw-r--r--gcc/c-family/ChangeLog10
-rw-r--r--gcc/c-family/c-common.cc26
-rw-r--r--gcc/c-family/c-common.def3
-rw-r--r--gcc/c-family/c-common.h2
-rw-r--r--gcc/c/ChangeLog34
-rw-r--r--gcc/c/c-decl.cc24
-rw-r--r--gcc/c/c-parser.cc77
-rw-r--r--gcc/c/c-tree.h4
-rw-r--r--gcc/c/c-typeck.cc115
-rw-r--r--gcc/cgraph.cc9
-rw-r--r--gcc/config/aarch64/aarch64-cores.def2
-rw-r--r--gcc/config/aarch64/gcc-auto-profile53
-rw-r--r--gcc/config/i386/cygming.h5
-rwxr-xr-xgcc/config/i386/gcc-auto-profile29
-rw-r--r--gcc/config/i386/i386-protos.h1
-rw-r--r--gcc/config/i386/i386.cc42
-rw-r--r--gcc/config/i386/i386.h7
-rw-r--r--gcc/config/i386/x86-tune-costs.h2
-rw-r--r--gcc/config/microblaze/microblaze.cc4
-rw-r--r--gcc/config/riscv/autovec.md19
-rw-r--r--gcc/config/riscv/bitmanip.md45
-rw-r--r--gcc/config/riscv/riscv-v.cc4
-rw-r--r--gcc/config/riscv/riscv-vector-builtins-shapes.cc4
-rw-r--r--gcc/config/riscv/riscv-vector-builtins.h40
-rw-r--r--gcc/config/riscv/riscv.cc55
-rw-r--r--gcc/config/riscv/vector-iterators.md2
-rw-r--r--gcc/config/rs6000/rs6000.cc1
-rw-r--r--gcc/config/s390/vector.md137
-rw-r--r--gcc/cp/ChangeLog44
-rw-r--r--gcc/cp/constraint.cc9
-rw-r--r--gcc/cp/coroutines.cc6
-rw-r--r--gcc/cp/cp-objcp-common.cc2
-rw-r--r--gcc/cp/cp-trait.def3
-rw-r--r--gcc/cp/cp-tree.h24
-rw-r--r--gcc/cp/error.cc40
-rw-r--r--gcc/cp/method.cc15
-rw-r--r--gcc/cp/module.cc71
-rw-r--r--gcc/cp/name-lookup.cc24
-rw-r--r--gcc/cp/name-lookup.h1
-rw-r--r--gcc/cp/parser.cc6
-rw-r--r--gcc/cp/pt.cc111
-rw-r--r--gcc/cp/semantics.cc28
-rw-r--r--gcc/diagnostic-format-html.cc674
-rw-r--r--gcc/diagnostic-format-html.h16
-rw-r--r--gcc/diagnostic-path-output.cc2713
-rw-r--r--gcc/diagnostic-path.cc2321
-rw-r--r--gcc/diagnostic-show-locus.cc999
-rw-r--r--gcc/diagnostic.cc20
-rw-r--r--gcc/diagnostic.h89
-rw-r--r--gcc/doc/extend.texi33
-rw-r--r--gcc/doc/invoke.texi83
-rw-r--r--gcc/fold-const.cc5
-rw-r--r--gcc/fortran/ChangeLog69
-rw-r--r--gcc/fortran/check.cc125
-rw-r--r--gcc/fortran/error.cc3
-rw-r--r--gcc/fortran/expr.cc26
-rw-r--r--gcc/fortran/gfortran.h8
-rw-r--r--gcc/fortran/intrinsic.cc93
-rw-r--r--gcc/fortran/intrinsic.h11
-rw-r--r--gcc/fortran/io.cc6
-rw-r--r--gcc/fortran/iresolve.cc8
-rw-r--r--gcc/fortran/mathbuiltins.def63
-rw-r--r--gcc/fortran/misc.cc3
-rw-r--r--gcc/fortran/primary.cc61
-rw-r--r--gcc/fortran/simplify.cc264
-rw-r--r--gcc/gcc.cc108
-rw-r--r--gcc/ginclude/stdcountof.h31
-rw-r--r--gcc/ipa-cp.cc8
-rw-r--r--gcc/ipa-split.cc4
-rw-r--r--gcc/ipa-sra.cc6
-rw-r--r--gcc/match.pd29
-rw-r--r--gcc/opts-diagnostic.cc26
-rw-r--r--gcc/passes.def3
-rw-r--r--gcc/predict.cc8
-rw-r--r--gcc/profile-count.cc30
-rw-r--r--gcc/sbitmap.cc145
-rw-r--r--gcc/sbitmap.h7
-rw-r--r--gcc/selftest-diagnostic.cc4
-rw-r--r--gcc/selftest-diagnostic.h2
-rw-r--r--gcc/selftest-run-tests.cc2
-rw-r--r--gcc/selftest.h2
-rw-r--r--gcc/testsuite/ChangeLog8611
-rw-r--r--gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c7
-rw-r--r--gcc/testsuite/c-c++-common/gomp/metadirective-3.c7
-rw-r--r--gcc/testsuite/g++.dg/ext/is_destructible1.C60
-rw-r--r--gcc/testsuite/g++.dg/gomp/target-4.C22
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-10_a.C11
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-10_b.C9
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-10_c.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-11_a.C11
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-11_b.C9
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-11_c.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-8_a.C12
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-8_b.C8
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-9_a.C11
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-9_b.C6
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr117965-1.C28
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr117965-2.C19
-rw-r--r--gcc/testsuite/gcc.dg/countof-compat.c8
-rw-r--r--gcc/testsuite/gcc.dg/countof-compile.c124
-rw-r--r--gcc/testsuite/gcc.dg/countof-no-compat.c5
-rw-r--r--gcc/testsuite/gcc.dg/countof-pedantic-errors.c8
-rw-r--r--gcc/testsuite/gcc.dg/countof-pedantic.c8
-rw-r--r--gcc/testsuite/gcc.dg/countof-stdcountof.c24
-rw-r--r--gcc/testsuite/gcc.dg/countof-vla.c35
-rw-r--r--gcc/testsuite/gcc.dg/countof-vmt.c20
-rw-r--r--gcc/testsuite/gcc.dg/countof-zero-compile.c38
-rw-r--r--gcc/testsuite/gcc.dg/countof-zero.c31
-rw-r--r--gcc/testsuite/gcc.dg/countof.c120
-rw-r--r--gcc/testsuite/gcc.dg/html-output/missing-semicolon.c2
-rw-r--r--gcc/testsuite/gcc.dg/html-output/missing-semicolon.py6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c4
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py35
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py26
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.c6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.py190
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus.py111
-rw-r--r--gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc3
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr119181.c15
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119884.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/vect-epilogues-5.c3
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h23
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h185
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c12
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h26
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h25
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h240
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c28
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c28
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c28
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c28
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c10
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c5
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h588
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i16.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i32.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i64.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i8.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i16.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i32.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i64.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i8.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u16.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c15
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c16
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c)27
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c)26
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c)22
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c)22
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c)6
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c)6
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c)6
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c)6
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-1.c)0
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3-1.c)0
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c (renamed from gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-1.c)0
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/vec-extract-1.c190
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/vec-set-1.c133
-rw-r--r--gcc/testsuite/gfortran.dg/comma_format_extension_1.f2
-rw-r--r--gcc/testsuite/gfortran.dg/comma_format_extension_3.f2
-rw-r--r--gcc/testsuite/gfortran.dg/continuation_13.f902
-rw-r--r--gcc/testsuite/gfortran.dg/dec_math_3.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/dec_math_5.f9063
-rw-r--r--gcc/testsuite/gfortran.dg/dec_math_6.f9012
-rw-r--r--gcc/testsuite/gfortran.dg/inquiry_type_ref_7.f9062
-rw-r--r--gcc/testsuite/gfortran.dg/pr120049_2.f9062
-rw-r--r--gcc/testsuite/gfortran.dg/pr120049_a.f907
-rw-r--r--gcc/testsuite/gfortran.dg/pr120049_b.f902
-rw-r--r--gcc/testsuite/gnat.dg/sso19.adb13
-rw-r--r--gcc/testsuite/gnat.dg/sso19_pkg.adb13
-rw-r--r--gcc/testsuite/gnat.dg/sso19_pkg.ads24
-rw-r--r--gcc/testsuite/lib/htmltest.py90
-rw-r--r--gcc/tree-ssa-dse.cc2
-rw-r--r--gcc/tree-ssa-math-opts.cc30
-rw-r--r--gcc/tree-ssa-phiprop.cc96
-rw-r--r--gcc/tree-vect-data-refs.cc7
-rw-r--r--gcc/tree-vect-stmts.cc49
-rw-r--r--gcc/tree.h2
-rw-r--r--gcc/xml-printer.h84
-rw-r--r--gcc/xml.h113
-rw-r--r--libgcc/ChangeLog85
-rw-r--r--libgcc/config.host7
-rw-r--r--libgcc/config/avr/libf7/ChangeLog15
-rw-r--r--libgcc/config/avr/libf7/f7-renames.h1
-rw-r--r--libgcc/config/avr/libf7/f7-wraps.h14
-rwxr-xr-xlibgcc/config/avr/libf7/f7renames.sh12
-rw-r--r--libgcc/config/avr/libf7/libf7-common.mk6
-rw-r--r--libgcc/config/avr/libf7/libf7.c19
-rw-r--r--libgcc/config/avr/libf7/libf7.h1
-rw-r--r--libgcc/config/mingw/t-mingw-mcfgthread (renamed from libgcc/config/i386/t-mingw-mcfgthread)0
-rw-r--r--libgcc/config/t-softfp2
-rw-r--r--libgcc/soft-fp/bitint.h6
-rw-r--r--libgcc/soft-fp/bitintpow10.c340
-rw-r--r--libgcc/soft-fp/fixddbitint.c33
-rw-r--r--libgcc/soft-fp/fixddti.c6
-rw-r--r--libgcc/soft-fp/fixsdbitint.c27
-rw-r--r--libgcc/soft-fp/fixsdti.c4
-rw-r--r--libgcc/soft-fp/fixtdbitint.c54
-rw-r--r--libgcc/soft-fp/fixtdti.c6
-rw-r--r--libgcc/soft-fp/fixunsddti.c6
-rw-r--r--libgcc/soft-fp/fixunssdti.c6
-rw-r--r--libgcc/soft-fp/fixunstdti.c6
-rw-r--r--libgcc/soft-fp/floatbitintdd.c45
-rw-r--r--libgcc/soft-fp/floatbitintsd.c39
-rw-r--r--libgcc/soft-fp/floatbitinttd.c68
-rw-r--r--libgcc/soft-fp/floattidd.c6
-rw-r--r--libgcc/soft-fp/floattisd.c6
-rw-r--r--libgcc/soft-fp/floattitd.c6
-rw-r--r--libgcc/soft-fp/floatuntidd.c6
-rw-r--r--libgcc/soft-fp/floatuntisd.c6
-rw-r--r--libgcc/soft-fp/floatuntitd.c6
-rw-r--r--libgomp/ChangeLog6
-rw-r--r--libgomp/testsuite/libgomp.fortran/metadirective-1.f909
-rw-r--r--libstdc++-v3/ChangeLog96
-rw-r--r--libstdc++-v3/doc/doxygen/stdheader.cc2
-rw-r--r--libstdc++-v3/include/Makefile.am2
-rw-r--r--libstdc++-v3/include/Makefile.in2
-rw-r--r--libstdc++-v3/include/bits/funcref_impl.h198
-rw-r--r--libstdc++-v3/include/bits/funcwrap.h188
-rw-r--r--libstdc++-v3/include/bits/indirect.h459
-rw-r--r--libstdc++-v3/include/bits/std_abs.h9
-rw-r--r--libstdc++-v3/include/bits/utility.h17
-rw-r--r--libstdc++-v3/include/bits/version.def17
-rw-r--r--libstdc++-v3/include/bits/version.h20
-rw-r--r--libstdc++-v3/include/std/functional3
-rw-r--r--libstdc++-v3/include/std/mdspan2
-rw-r--r--libstdc++-v3/include/std/memory5
-rw-r--r--libstdc++-v3/src/c++23/std.cc.in7
-rw-r--r--libstdc++-v3/testsuite/17_intro/names.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/assign.cc108
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/call.cc186
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/cons.cc218
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/cons_neg.cc30
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/conv.cc259
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/deduction.cc103
-rw-r--r--libstdc++-v3/testsuite/20_util/function_ref/mutation.cc85
-rw-r--r--libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc41
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/cstdlib/abs128.cc16
-rw-r--r--libstdc++-v3/testsuite/experimental/names.cc6
-rw-r--r--libstdc++-v3/testsuite/std/format/debug.cc1
-rw-r--r--libstdc++-v3/testsuite/std/format/functions/format.cc3
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/copy.cc121
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc228
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/ctor.cc204
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/incomplete.cc38
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/invalid_neg.cc28
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/move.cc144
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc296
-rw-r--r--libstdc++-v3/testsuite/std/memory/indirect/relops.cc82
337 files changed, 23386 insertions, 3514 deletions
diff --git a/ChangeLog b/ChangeLog
index 73c9cda..f14bb47 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2025-05-28 Kugan Vivekanandarajah <kvivekananda@nvidia.com>
+
+ * Makefile.def: Fix typo in cpu_type
+ * Makefile.tpl: Add cpu_type
+
+2025-05-26 Kugan Vivekanandarajah <kvivekananda@nvidia.com>
+
+ * Makefile.def: AUTO_PROFILE based on cpu_type.
+ * Makefile.in: Likewise.
+ * configure: Regenerate.
+ * configure.ac: Set autofdo_target.
+
2025-05-23 Kishan Parmar <kishan@linux.ibm.com>
* MAINTAINERS: Add myself to write after approval.
diff --git a/Makefile.def b/Makefile.def
index 3f980bc..fa60f6e 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -758,7 +758,7 @@ bootstrap_stage = {
bootstrap_target=profiledbootstrap ; };
bootstrap_stage = {
id=autoprofile ; prev=1 ;
- autoprofile="$$s/gcc/config/i386/$(AUTO_PROFILE)" ; };
+ autoprofile="$$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE)" ; };
bootstrap_stage = {
id=autofeedback ; prev=autoprofile ;
bootstrap_target=autoprofiledbootstrap ;
diff --git a/Makefile.in b/Makefile.in
index b1ed67d..931507c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -38,6 +38,7 @@ build_alias=@build_noncanonical@
build_vendor=@build_vendor@
build_os=@build_os@
build=@build@
+cpu_type=@cpu_type@
host_alias=@host_noncanonical@
host_vendor=@host_vendor@
host_os=@host_os@
@@ -4271,7 +4272,7 @@ all-stageautoprofile-bfd: configure-stageautoprofile-bfd
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/bfd && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -5411,7 +5412,7 @@ all-stageautoprofile-opcodes: configure-stageautoprofile-opcodes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/opcodes && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -6551,7 +6552,7 @@ all-stageautoprofile-binutils: configure-stageautoprofile-binutils
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/binutils && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -10037,7 +10038,7 @@ all-stageautoprofile-fixincludes: configure-stageautoprofile-fixincludes
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/fixincludes && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -11617,7 +11618,7 @@ all-stageautoprofile-gas: configure-stageautoprofile-gas
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gas && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -12766,7 +12767,7 @@ all-stageautoprofile-gcc: configure-stageautoprofile-gcc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gcc && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -13915,7 +13916,7 @@ all-stageautoprofile-gmp: configure-stageautoprofile-gmp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gmp && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -15052,7 +15053,7 @@ all-stageautoprofile-mpfr: configure-stageautoprofile-mpfr
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/mpfr && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -16189,7 +16190,7 @@ all-stageautoprofile-mpc: configure-stageautoprofile-mpc
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/mpc && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -17326,7 +17327,7 @@ all-stageautoprofile-isl: configure-stageautoprofile-isl
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/isl && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -18454,7 +18455,7 @@ all-stageautoprofile-gold: configure-stageautoprofile-gold
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gold && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -20539,7 +20540,7 @@ all-stageautoprofile-gettext: configure-stageautoprofile-gettext
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/gettext && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -22449,7 +22450,7 @@ all-stageautoprofile-ld: configure-stageautoprofile-ld
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/ld && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -23589,7 +23590,7 @@ all-stageautoprofile-libbacktrace: configure-stageautoprofile-libbacktrace
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libbacktrace && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -24729,7 +24730,7 @@ all-stageautoprofile-libcpp: configure-stageautoprofile-libcpp
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcpp && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -25869,7 +25870,7 @@ all-stageautoprofile-libcody: configure-stageautoprofile-libcody
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libcody && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -26858,7 +26859,7 @@ all-stageautoprofile-libdecnumber: configure-stageautoprofile-libdecnumber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libdecnumber && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -28460,7 +28461,7 @@ all-stageautoprofile-libiberty: configure-stageautoprofile-libiberty
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -29609,7 +29610,7 @@ all-stageautoprofile-libiberty-linker-plugin: configure-stageautoprofile-libiber
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiberty-linker-plugin && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -30758,7 +30759,7 @@ all-stageautoprofile-libiconv: configure-stageautoprofile-libiconv
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libiconv && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -34130,7 +34131,7 @@ all-stageautoprofile-zlib: configure-stageautoprofile-zlib
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/zlib && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -40321,7 +40322,7 @@ all-stageautoprofile-lto-plugin: configure-stageautoprofile-lto-plugin
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/lto-plugin && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -42397,7 +42398,7 @@ all-stageautoprofile-libctf: configure-stageautoprofile-libctf
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libctf && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -43537,7 +43538,7 @@ all-stageautoprofile-libsframe: configure-stageautoprofile-libsframe
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libsframe && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -44677,7 +44678,7 @@ all-stageautoprofile-libgrust: configure-stageautoprofile-libgrust
$(HOST_EXPORTS) \
$(POSTSTAGE1_HOST_EXPORTS) \
cd $(HOST_SUBDIR)/libgrust && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(STAGEautoprofile_CFLAGS)" \
GENERATOR_CFLAGS="$(STAGEautoprofile_GENERATOR_CFLAGS)" \
@@ -45939,7 +45940,7 @@ all-stageautoprofile-target-libstdc++-v3: configure-stageautoprofile-target-libs
$(RAW_CXX_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libstdc++-v3 && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -47209,7 +47210,7 @@ all-stageautoprofile-target-libsanitizer: configure-stageautoprofile-target-libs
$(RAW_CXX_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libsanitizer && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -48479,7 +48480,7 @@ all-stageautoprofile-target-libvtv: configure-stageautoprofile-target-libvtv
$(RAW_CXX_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libvtv && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -50719,7 +50720,7 @@ all-stageautoprofile-target-libgcc: configure-stageautoprofile-target-libgcc
$(NORMAL_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libgcc && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -51951,7 +51952,7 @@ all-stageautoprofile-target-libbacktrace: configure-stageautoprofile-target-libb
$(NORMAL_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libbacktrace && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -55128,7 +55129,7 @@ all-stageautoprofile-target-libphobos: configure-stageautoprofile-target-libphob
$(NORMAL_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libphobos && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -58258,7 +58259,7 @@ all-stageautoprofile-target-zlib: configure-stageautoprofile-target-zlib
$(NORMAL_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/zlib && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -60983,7 +60984,7 @@ all-stageautoprofile-target-libgomp: configure-stageautoprofile-target-libgomp
$(NORMAL_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libgomp && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
@@ -62738,7 +62739,7 @@ all-stageautoprofile-target-libatomic: configure-stageautoprofile-target-libatom
$(NORMAL_TARGET_EXPORTS) \
\
cd $(TARGET_SUBDIR)/libatomic && \
- $$s/gcc/config/i386/$(AUTO_PROFILE) \
+ $$s/gcc/config/$(cpu_type)/$(AUTO_PROFILE) \
$(MAKE) $(BASE_FLAGS_TO_PASS) \
CFLAGS="$(CFLAGS_FOR_TARGET)" \
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
diff --git a/Makefile.tpl b/Makefile.tpl
index 7dccf91..b164a17 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -41,6 +41,7 @@ build_alias=@build_noncanonical@
build_vendor=@build_vendor@
build_os=@build_os@
build=@build@
+cpu_type=@cpu_type@
host_alias=@host_noncanonical@
host_vendor=@host_vendor@
host_os=@host_os@
diff --git a/configure b/configure
index 3f85b6c..ed1e5a4 100755
--- a/configure
+++ b/configure
@@ -730,6 +730,7 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
+cpu_type
target_subdir
host_subdir
build_subdir
@@ -3395,6 +3396,9 @@ case "${target}" in
;;
esac
+cpu_type=`echo ${host} | sed 's/-.*$//'`
+
+
# Disable libssp for some systems.
case "${target}" in
avr-*-*)
diff --git a/configure.ac b/configure.ac
index d6c3fb5..33c130f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -621,6 +621,9 @@ case "${target}" in
;;
esac
+cpu_type=`echo ${host} | sed 's/-.*$//'`
+AC_SUBST(cpu_type)
+
# Disable libssp for some systems.
case "${target}" in
avr-*-*)
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 331b99f..276ce74 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,8 @@
+2025-05-27 Jan Hubicka <hubicka@ucw.cz>
+
+ * gen_autofdo_event.py: Add support for AMD Zen 3 and
+ later CPUs.
+
2025-05-23 Andi Kleen <ak@gcc.gnu.org>
* diffsummary.py: New file.
diff --git a/contrib/gen_autofdo_event.py b/contrib/gen_autofdo_event.py
index 4364e5c..b1d373f 100755
--- a/contrib/gen_autofdo_event.py
+++ b/contrib/gen_autofdo_event.py
@@ -138,8 +138,16 @@ if [ "$1" = "--all" ] ; then
shift
fi
-if ! grep -q Intel /proc/cpuinfo ; then
- echo >&2 "Only Intel CPUs supported"
+if grep -q AuthenticAMD /proc/cpuinfo ; then
+ vendor=AMD
+ if ! grep -q " brs" /proc/cpuinfo && ! grep -q amd_lbr_v2 /proc/cpuinfo ; then
+ echo >&2 "AMD CPU with brs (Zen 3) or amd_lbr_v2 (Zen 4+) feature is required"
+ exit 1
+ fi
+elif grep -q Intel /proc/cpuinfo ; then
+ vendor=Intel
+else
+ echo >&2 "Only AMD and Intel CPUs supported"
exit 1
fi
@@ -147,7 +155,7 @@ if grep -q hypervisor /proc/cpuinfo ; then
echo >&2 "Warning: branch profiling may not be functional in VMs"
fi
-case `grep -E -q "^cpu family\s*: 6" /proc/cpuinfo &&
+case `test $vendor = Intel && grep -E -q "^cpu family\s*: 6" /proc/cpuinfo &&
grep -E "^model\s*:" /proc/cpuinfo | head -n1` in''')
for event, mod in eventmap.items():
for m in mod[:-1]:
@@ -156,8 +164,13 @@ case `grep -E -q "^cpu family\s*: 6" /proc/cpuinfo &&
print(r'''*)
if perf list br_inst_retired | grep -q br_inst_retired.near_taken ; then
E=br_inst_retired.near_taken:p
+ elif perf list ex_ret_brn_tkn | grep -q ex_ret_brn_tkn ; then
+ E=ex_ret_brn_tkn:P$FLAGS
+ elif $vendor = Intel ; then
+echo >&2 "Unknown Intel CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
+ exit 1
else
-echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
+echo >&2 "AMD CPU without support for ex_ret_brn_tkn event"
exit 1
fi ;;''')
print(r"esac")
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9ee26b8..ca53504 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,521 @@
+2025-05-28 Jan Hubicka <hubicka@ucw.cz>
+
+ PR target/119298
+ * config/i386/x86-tune-costs.h (struct processor_costs): Set addss cost
+ back to 2.
+
+2025-05-28 Robin Dapp <rdapp.gcc@gmail.com>
+
+ * tree-vect-stmts.cc (vectorizable_load): Remove non-SLP paths.
+
+2025-05-28 Robin Dapp <rdapp@ventanamicro.com>
+
+ PR target/120436
+ * config/riscv/riscv-vector-builtins-shapes.cc (struct vset_def):
+ Avoid division by zero.
+ (struct vget_def): Ditto.
+ * config/riscv/riscv-vector-builtins.h (struct function_group_info):
+ Use required_extensions_specified instead of duplicating code.
+
+2025-05-28 Pan Li <pan2.li@intel.com>
+
+ * config/riscv/autovec.md (avg<v_double_trunc>3_floor): Add insn
+ expand to leverage vaadd directly.
+
+2025-05-28 Jan Hubicka <hubicka@ucw.cz>
+
+ * cgraph.cc (cgraph_edge::maybe_hot_p): For auto-fdo turn 0
+ to non-zero.
+ * ipa-cp.cc (cs_interesting_for_ipcp_p): Do not trust
+ auto-fdo 0.
+ * profile-count.cc (profile_count::adjust_for_ipa_scaling): Likewise.
+ (profile_count::from_gcov_type): Fix formating.
+
+2025-05-28 Jan Hubicka <hubicka@ucw.cz>
+
+ * predict.cc (rebuild_frequencies): look harder for presence
+ of profile feedback.
+
+2025-05-28 Yuta Mukai <mukai.yuta@fujitsu.com>
+
+ * config/aarch64/aarch64-cores.def (fujitsu-monaka): Update ISA
+ features.
+
+2025-05-28 Jan Hubicka <hubicka@ucw.cz>
+
+ * predict.cc (set_even_probabilities): Set quality to guessed.
+
+2025-05-28 Jan Hubicka <hubicka@ucw.cz>
+
+ * auto-profile.cc (update_count_by_afdo_count): New function.
+ (afdo_set_bb_count): Add debug output; only set count if it is
+ non-zero.
+ (afdo_find_equiv_class): Add debug output.
+ (afdo_calculate_branch_prob): Fix formating.
+ (afdo_annotate_cfg): Add debug output; do not erase static
+ profile if autofdo profile is all 0.
+
+2025-05-28 Haochen Jiang <haochen.jiang@intel.com>
+
+ * doc/extend.texi (C Extensions): Add missing menu items.
+
+2025-05-28 liuhongt <hongtao.liu@intel.com>
+
+ PR tree-optimization/119181
+ * tree-vect-data-refs.cc (vect_analyze_data_ref_accesses):
+ Split datarefs when there's a gap bigger than
+ MAX_BITSIZE_MODE_ANY_MODE.
+
+2025-05-27 Jason Merrill <jason@redhat.com>
+
+ PR c++/120400
+ * fold-const.cc (simple_operand_p): False for vars with
+ DECL_VALUE_EXPR.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+
+ PR c/117025
+ * Makefile.in (USER_H): Add <stdcountof.h>.
+ * ginclude/stdcountof.h: New file.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+ Martin Uecker <uecker@tugraz.at>
+
+ PR c/117025
+ * doc/extend.texi: Document _Countof operator.
+
+2025-05-27 Jan Hubicka <hubicka@ucw.cz>
+
+ * config/i386/gcc-auto-profile: regenerate.
+
+2025-05-27 Jan Hubicka <hubicka@ucw.cz>
+
+ * auto-profile.cc (function_instance::mark_annotated): Remove.
+ (function_instance::total_annotated_count): Remove.
+ (autofdo_source_profile::mark_annotated): Remove.
+ (afdo_set_bb_count): Do not mark annotated locations.
+ (afdo_annotate_cfg): Likewise.
+
+2025-05-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ipa-sra.cc (scan_expr_access): Also disqualify storage order
+ barriers from splitting.
+ * tree.h (storage_order_barrier_p): Also return false if the
+ operand of the VIEW_CONVERT_EXPR has reverse storage order.
+
+2025-05-27 David Malcolm <dmalcolm@redhat.com>
+
+ PR other/116792
+ * diagnostic-format-html.cc: Define INCLUDE_STRING.
+ Include "xml.h", "xml-printer.h", and "json.h".
+ (html_generation_options::html_generation_options): New.
+ (namespace xml): Move decls to xml.h and convert from using
+ label_text to std::string.
+ (xml::text::write_as_xml): Reimplement indentation so it is done
+ by this node, rather than the parent.
+ (xml::node_with_children::add_text): Convert from label_text to
+ std::string. Consolidate runs of text into a single node.
+ (xml::document::write_as_xml): Reimplement indentation.
+ (xml::element::write_as_xml): Reimplement indentation so it is
+ done by this node, rather than the parent. Convert from
+ label_text to std::string. Update attribute-printing to new
+ representation to preserve insertion order.
+ (xml::element::set_attr): Convert from label_text to std::string.
+ Record insertion order.
+ (xml::raw::write_as_xml): New.
+ (xml::printer::printer): New.
+ (xml::printer::push_tag): New.
+ (xml::printer::push_tag_with_class): New.
+ (xml::printer::pop_tag): New.
+ (xml::printer::set_attr): New.
+ (xml::printer::add_text): New.
+ (xml::printer::add_raw): New.
+ (xml::printer::push_element): New.
+ (xml::printer::append): New.
+ (xml::printer::get_insertion_point): New.
+ (html_builder::add_focus_id): New.
+ (html_builder::m_html_gen_opts): New field.
+ (html_builder::m_head_element): New field.
+ (html_builder::m_next_diag_id): New field.
+ (html_builder::m_ui_focus_ids): New field.
+ (make_div): Convert from label_text to std::string.
+ (make_span): Likewise.
+ (HTML_STYLE): New.
+ (HTML_SCRIPT): New.
+ (html_builder::html_builder): Fix indentation. Add
+ "html_gen_opts" param. Initialize new fields. Reimplement
+ using xml::printer. Optionally add style and script tags.
+ (class html_path_label_writer): New.
+ (html_builder::make_element_for_diagnostic): Convert from
+ label_text to std::string. Set "id" on "gcc-diagnostic" and
+ "gcc-message" <div> elements; add the latter to the focus ids.
+ Use diagnostic_context::maybe_show_locus_as_html rather than
+ html_builder::make_element_for_source. Use print_path_as_html
+ rather than html_builder::make_element_for_path.
+ (html_builder::make_element_for_source): Drop.
+ (html_builder::make_element_for_path): Drop.
+ (html_builder::make_element_for_patch): Convert from label_text to
+ std::string.
+ (html_builder::make_metadata_element): Likewise. Use
+ xml::printer.
+ (html_builder::make_element_for_metadata): Convert from label_text
+ to std::string.
+ (html_builder::emit_diagram): Expand comment.
+ (html_builder::flush_to_file): Write out initializer for
+ "focus_ids" into javascript.
+ (html_output_format::html_output_format): Add param
+ "html_gen_opts" and use it to initialize m_builder.
+ (html_file_output_format::html_file_output_format): Likewise, to
+ initialize base class.
+ (make_html_sink): Likewise, to pass to ctor.
+ (selftest::test_html_diagnostic_context::test_html_diagnostic_context):
+ Set up html_generation_options.
+ (selftest::html_buffered_output_format::html_buffered_output_format):
+ Add html_gen_opts param.
+ (selftest::test_simple_log): Add id attributes to expected text
+ for "gcc-diagnostic" and "gcc-message" elements. Update
+ whitespace for indentation fixes.
+ (selftest::test_metadata): Update whitespace for indentation
+ fixes.
+ (selftest::test_printer): New selftest.
+ (selftest::test_attribute_ordering): New selftest.
+ (selftest::diagnostic_format_html_cc_tests): Call the new
+ selftests.
+ * diagnostic-format-html.h (struct html_generation_options): New.
+ (make_html_sink): Add "html_gen_opts" param.
+ (print_path_as_html): New decl.
+ * diagnostic-path-output.cc: Define INCLUDE_MAP. Add includes of
+ "diagnostic-format-html.h", "xml.h", and "xml-printer.h".
+ (path_print_policy::path_print_policy): Add ctor.
+ (path_print_policy::get_diagram_theme): Fix whitespace.
+ (struct stack_frame): New.
+ (begin_html_stack_frame): New function.
+ (end_html_stack_frame): New function.
+ (emit_svg_arrow): New function.
+ (event_range::print): Rename to...
+ (event_range::print_as_text): ...this. Update call to
+ diagnostic_start_span.
+ (event_range::print_as_html): New, based on the above, but ported
+ from pretty_printer to xml::printer.
+ (thread_event_printer::print_swimlane_for_event_range): Rename
+ to...
+ (thread_event_printer::print_swimlane_for_event_range_as_text):
+ ...this. Update for renaming of event_range::print to
+ event_range::print_as_text.
+ (thread_event_printer::print_swimlane_for_event_range_as_html):
+ New.
+ (print_path_summary_as_text): Update for "_as_text" renaming.
+ (print_path_summary_as_html): New.
+ (print_path_as_html): New.
+ * diagnostic-show-locus.cc: Add defines of INCLUDE_MAP and
+ INCLUDE_STRING. Add includes of "xml.h" and "xml-printer.h".
+ (struct char_display_policy): Replace "m_print_cb" with
+ "m_print_text_cb" and "m_print_html_cb".
+ (struct to_text): New.
+ (struct to_html): New.
+ (get_printer): New.
+ (default_diagnostic_start_span_fn<to_text>): New.
+ (default_diagnostic_start_span_fn<to_html>): New.
+ (class layout): Update "friend class layout_printer;" for
+ template.
+ (enum class margin_kind): New.
+ (class layout_printer): Convert into a template.
+ (layout_printer::m_pp): Replace field with...
+ (layout_printer::m_sink): ...this.
+ (layout_printer::m_colorizer): Drop field in favor of a pointer
+ in the "to_text" sink.
+ (default_print_decoded_ch): Convert into a template.
+ (escape_as_bytes_print): Likewise.
+ (escape_as_unicode_print): Likewise.
+ (make_char_policy): Update to use both text and html callbacks.
+ (layout_printer::print_gap_in_line_numbering): Replace with...
+ (layout_printer<to_text>::print_gap_in_line_numbering): ...this
+ (layout_printer<to_html>::print_gap_in_line_numbering): ...and
+ this.
+ (layout_printer::print_source_line): Convert to template, using
+ m_sink.
+ (layout_printer::print_leftmost_column): Likewise.
+ (layout_printer::start_annotation_line): Likewise.
+ (layout_printer<to_text>::end_line): New.
+ (layout_printer<to_html>::end_line): New.
+ (layout_printer::print_annotation_line): Convert to template,
+ using m_sink.
+ (class line_label): Add field m_original_range_idx.
+ (layout_printer<to_text>::begin_label): New.
+ (layout_printer<to_html>::begin_label): New.
+ (layout_printer<to_text>::end_label): New.
+ (layout_printer<to_html>::end_label): New.
+ (layout_printer::print_any_labels): Convert to template, using
+ m_sink.
+ (layout_printer::print_leading_fixits): Likewise.
+ (layout_printer::print_trailing_fixits): Likewise.
+ (layout_printer::print_newline): Drop.
+ (layout_printer::move_to_column): Convert to template, using
+ m_sink.
+ (layout_printer::show_ruler): Likewise.
+ (layout_printer::print_line): Likewise.
+ (layout_printer::print_any_right_to_left_edge_lines): Likewise.
+ (layout_printer::layout_printer): Likewise.
+ (diagnostic_context::maybe_show_locus_as_html): New.
+ (diagnostic_source_print_policy::diagnostic_source_print_policy):
+ Update for split of start_span_cb into text vs html variants.
+ (diagnostic_source_print_policy::print): Update for use of
+ templates; use to_text.
+ (diagnostic_source_print_policy::print_as_html): New.
+ (layout_printer::print): Convert to template, using m_sink.
+ (selftest::make_element_for_locus): New.
+ (selftest::make_raw_html_for_locus): New.
+ (selftest::test_layout_x_offset_display_utf8): Update for use of
+ templates.
+ (selftest::test_layout_x_offset_display_tab): Likewise.
+ (selftest::test_one_liner_caret_and_range): Add test coverage of
+ HTML output.
+ (selftest::test_one_liner_labels): Likewise.
+ * diagnostic.cc (diagnostic_context::initialize): Update for split
+ of start_span_cb into text vs html variants.
+ (default_diagnostic_start_span_fn): Move to
+ diagnostic-show-locus.cc, converting to template.
+ * diagnostic.h (class xml::printer): New forward decl.
+ (diagnostic_start_span_fn): Replace typedef with "using",
+ converting to a template.
+ (struct to_text): New forward decl.
+ (struct to_html): New forward decl.
+ (get_printer): New decl.
+ (diagnostic_location_print_policy::print_text_span_start): New
+ decl.
+ (diagnostic_location_print_policy::print_html_span_start): New
+ decl.
+ (class html_label_writer): New.
+ (diagnostic_source_print_policy::print_as_html): New decl.
+ (diagnostic_source_print_policy::get_start_span_fn): Replace
+ with...
+ (diagnostic_source_print_policy::get_text_start_span_fn): ...this
+ (diagnostic_source_print_policy::get_html_start_span_fn): ...and
+ this
+ (diagnostic_source_print_policy::m_start_span_cb): Replace with...
+ (diagnostic_source_print_policy::m_text_start_span_cb): ...this
+ (diagnostic_source_print_policy::m_html_start_span_cb): ...and
+ this.
+ (diagnostic_context::maybe_show_locus_as_html): New decl.
+ (diagnostic_context::m_text_callbacks::m_start_span): Replace
+ with...
+ (diagnostic_context::m_text_callbacks::m_text_start_span): ...this
+ (diagnostic_context::m_text_callbacks::m_html_start_span): ...and
+ this.
+ (diagnostic_start_span): Update for template change.
+ (diagnostic_show_locus_as_html): New inline function.
+ (default_diagnostic_start_span_fn): Convert to template.
+ * doc/invoke.texi (experimental-html): Add "css" and "javascript"
+ keys.
+ * opts-diagnostic.cc (html_scheme_handler::make_sink): Likewise.
+ * selftest-diagnostic.cc
+ (selftest::test_diagnostic_context::start_span_cb): Update for
+ template changes.
+ * selftest-diagnostic.h
+ (selftest::test_diagnostic_context::start_span_cb): Likewise.
+ * xml-printer.h: New file.
+ * xml.h: New file, based on material in diagnostic-format-html.cc,
+ but using std::string rather than label_text.
+ (xml::element::m_key_insertion_order): New field.
+ (struct xml::raw): New.
+
+2025-05-27 David Malcolm <dmalcolm@redhat.com>
+
+ * Makefile.in (OBJS-libcommon): Add diagnostic-path-output.o.
+ * diagnostic-path-output.cc: New file, taken from material in
+ diagnostic-path.cc.
+ * diagnostic-path.cc: Drop includes of
+ "diagnostic-macro-unwinding.h", "intl.h", "gcc-rich-location.h",
+ "diagnostic-color.h", "diagnostic-event-id.h",
+ "diagnostic-label-effects.h", "pretty-print-markup.h",
+ "selftest.h", "selftest-diagnostic.h",
+ "selftest-diagnostic-path.h", "text-art/theme.h", and
+ "diagnostic-format-text.h".
+ (class path_print_policy): Move to diagnostic-path-output.cc.
+ (class path_label): Likewise.
+ (can_consolidate_events): Likewise.
+ (class per_thread_summary): Likewise.
+ (struct event_range): Likewise.
+ (struct path_summary): Likewise.
+ (per_thread_summary::interprocedural_p): Likewise.
+ (path_summary::path_summary): Likewise.
+ (write_indent): Likewise.
+ (base_indent): Likewise.
+ (per_frame_indent): Likewise.
+ (class thread_event_printer): Likewise.
+ (print_path_summary_as_text): Likewise.
+ (class element_event_desc): Likewise.
+ (diagnostic_text_output_format::print_path): Likewise.
+ (selftest::path_events_have_column_data_p): Likewise.
+ (selftest::test_empty_path): Likewise.
+ (selftest::test_intraprocedural_path): Likewise.
+ (selftest::test_interprocedural_path_1): Likewise.
+ (selftest::test_interprocedural_path_2): Likewise.
+ (selftest::test_recursion): Likewise.
+ (class selftest::control_flow_test): Likewise.
+ (selftest::test_control_flow_1): Likewise.
+ (selftest::test_control_flow_2): Likewise.
+ (selftest::test_control_flow_3): Likewise.
+ (selftest::assert_cfg_edge_path_streq): Likewise.
+ (ASSERT_CFG_EDGE_PATH_STREQ): Likewise.
+ (selftest::test_control_flow_4): Likewise.
+ (selftest::test_control_flow_5): Likewise.
+ (selftest::test_control_flow_6): Likewise.
+ (selftest::control_flow_tests): Likewise.
+ (selftest::diagnostic_path_cc_tests): Likewise, renaming
+ accordingly.
+ * selftest-run-tests.cc (selftest::run_tests): Update for
+ move of path-printing selftests.
+ * selftest.h (selftest::diagnostic_path_cc_tests): Replace decl
+ with...
+ (selftest::diagnostic_path_output_cc_tests): ...this.
+
+2025-05-27 Juergen Christ <jchrist@linux.ibm.com>
+
+ * config/s390/vector.md(*vec_extract<mode>): Fix mnemonic.
+
+2025-05-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/117965
+ * tree-ssa-phiprop.cc (phivn_valid_p): Remove.
+ (propagate_with_phi): Pass in virtual PHI node from BB,
+ rewrite load motion validity check to require the same
+ virtual use along all paths.
+
+2025-05-27 Konstantinos Eleftheriou <konstantinos.eleftheriou@vrull.eu>
+
+ PR rtl-optimization/119884
+ * avoid-store-forwarding.cc (process_store_forwarding):
+ Use `lowpart_subreg` for the base register initialization
+ and remove redundant stores from the store/load sequence.
+
+2025-05-27 Konstantinos Eleftheriou <konstantinos.eleftheriou@vrull.eu>
+
+ * sbitmap.cc (bitmap_any_bit_in_range_p):
+ Call and return the result of `bitmap_bit_in_range_p` with the
+ `any_inverted` parameter set to false.
+ (bitmap_bit_in_range_p): New function.
+ (bitmap_all_bits_in_range_p): New function.
+ * sbitmap.h (bitmap_all_bits_in_range_p): New function.
+
+2025-05-27 Konstantinos Eleftheriou <konstantinos.eleftheriou@vrull.eu>
+
+ * sbitmap.cc (bitmap_bit_in_range_p): Renamed the function.
+ (bitmap_any_bit_in_range_p): New function name.
+ (bitmap_bit_in_range_p_checking): Renamed the function.
+ (bitmap_any_bit_in_range_p_checking): New function name.
+ (test_set_range): Updated function calls to use the new name.
+ (test_bit_in_range): Likewise.
+ * sbitmap.h (bitmap_bit_in_range_p): Renamed the function.
+ (bitmap_any_bit_in_range_p): New function name.
+ * tree-ssa-dse.cc (live_bytes_read):
+ Updated function call to use the new name.
+
+2025-05-27 Co-authored-by: Jeff Law <jlaw@ventanamicro.com>
+
+ * config/riscv/bitmanip.md (andi+bclr splits): Simplified from
+ prior define_insn_and_splits.
+ * config/riscv/riscv.cc (synthesize_and): Add support for andi+bclr
+ sequences.
+
+2025-05-27 Pan Li <pan2.li@intel.com>
+
+ * config/riscv/riscv-v.cc (expand_vx_binary_vec_dup_vec): Add
+ new case for XOR op.
+ (expand_vx_binary_vec_vec_dup): Diito.
+ * config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ * config/riscv/vector-iterators.md: Add new op or to no_shift_vx_ops.
+
+2025-05-27 Juergen Christ <jchrist@linux.ibm.com>
+
+ * config/s390/vector.md (VF): New mode iterator.
+ (VEC_SET_NONFLOAT): New mode iterator.
+ (VEC_SET_SINGLEFLOAT): New mode iterator.
+ (*vec_set<mode>): Split pattern in two.
+ (*vec_setv2df): Extract special handling for V2DF mode.
+ (*vec_extract<mode>): Split pattern in two.
+
+2025-05-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/extend.texi (Common Variable Attributes): Fix typo in
+ description of nonstring.
+
+2025-05-27 Kito Cheng <kito.cheng@sifive.com>
+
+ * gcc.cc (find_multilib_os_dir_by_multilib_dir): New.
+ (set_multilib_dir): Fix multilib_os_dir and multiarch_dir
+ if multilib_os_dir is not set.
+
+2025-05-27 xuli <xuli1@eswincomputing.com>
+
+ * match.pd: add singned vector SAT_ADD IMM form1 matching.
+
+2025-05-27 xuli <xuli1@eswincomputing.com>
+
+ * match.pd: Add signed scalar SAT_ADD IMM form1 with IMM=-1 matching.
+ * tree-ssa-math-opts.cc (match_unsigned_saturation_add): Adapt function name.
+ (match_saturation_add_with_assign): Match signed and unsigned SAT_ADD with assign.
+ (math_opts_dom_walker::after_dom_children): Match imm=-1 signed SAT_ADD with NOP_EXPR case.
+
+2025-05-26 Jason Merrill <jason@redhat.com>
+
+ * doc/invoke.texi: Move C++ -fdump-lang to C++ section.
+ Add -fdump-lang-tinst.
+
+2025-05-26 Kugan Vivekanandarajah <kvivekananda@nvidia.com>
+
+ * config/aarch64/gcc-auto-profile: New file.
+
+2025-05-26 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/rs6000.cc: Remove include of reload.h .
+
+2025-05-26 Kugan Vivekanandarajah <kvivekananda@nvidia.com>
+
+ * ipa-split.cc (pass_feedback_split_functions::clone): New.
+ * passes.def: Enable pass_feedback_split_functions for
+ pass_ipa_auto_profile.
+
+2025-05-25 Michael J. Eager <eager@eagercon.com>
+
+ PR target/86772
+ Tracking CVE-2017-5753
+ * config/microblaze/microblaze.cc (TARGET_HAVE_SPECULATION_SAFE_VALUE):
+ Define to speculation_save_value_not_needed
+
+2025-05-25 Jan Hubicka <hubicka@ucw.cz>
+
+ * config/i386/i386.cc (ix86_builtin_vectorization_cost):
+ use sse_op instead of addss to cost vinsertti128 and vinsertti64x4;
+ compute correct mode of vinsertti128.
+ (ix86_vector_costs::add_stmt_cost): For integer 256bit and 512bit
+ vector constructions account more integer_to_sse moves.
+
+2025-05-25 LIU Hao <lh_mouse@126.com>
+
+ PR target/53929
+ PR target/80881
+ * config/i386/i386-protos.h (ix86_asm_output_labelref): Declare new
+ function for quoting user-defined symbols in Intel syntax.
+ * config/i386/i386.cc (ix86_asm_output_labelref): Implement it.
+ * config/i386/i386.h (ASM_OUTPUT_LABELREF): Use it.
+ * config/i386/cygming.h (ASM_OUTPUT_LABELREF): Use it.
+
+2025-05-24 Shreya Munnangi <smunnangi1@ventanamicro.com>
+
+ * config/riscv/riscv.cc (synthesize_and): Use a srl+andi+sll
+ sequence when the mask fits in a simm12 after shifting by the
+ number of trailing zeros.
+ Co-authored-by: Jeff Law <jlaw@ventanamicro.com>
+
+2025-05-24 Pan Li <pan2.li@intel.com>
+
+ * config/riscv/riscv-v.cc (expand_vx_binary_vec_dup_vec): Add new
+ case for IOR op.
+ (expand_vx_binary_vec_vec_dup): Ditto.
+ * config/riscv/riscv.cc (riscv_rtx_costs): Ditto.
+ * config/riscv/vector-iterators.md: Add new op or to no_shift_vx_ops.
+
2025-05-23 Andi Kleen <ak@gcc.gnu.org>
* doc/install.texi: Document bootstrap-native.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index cc6fc26..9398513 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250524
+20250529
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 366364a..49869531 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -480,6 +480,7 @@ USER_H = $(srcdir)/ginclude/float.h \
$(srcdir)/ginclude/stdalign.h \
$(srcdir)/ginclude/stdatomic.h \
$(srcdir)/ginclude/stdckdint.h \
+ $(srcdir)/ginclude/stdcountof.h \
$(EXTRA_HEADERS)
USER_H_INC_NEXT_PRE = @user_headers_inc_next_pre@
@@ -1856,6 +1857,7 @@ OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
diagnostic-global-context.o \
diagnostic-macro-unwinding.o \
diagnostic-path.o \
+ diagnostic-path-output.o \
diagnostic-show-locus.o \
edit-context.o \
pretty-print.o intl.o \
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index f0046a0..55c8f74 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,7 @@
+2025-05-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/Make-lang.in (ACATSDIR): Use acats-2 directory.
+
2025-05-13 Nicolas Boulenguez <nicolas@debian.org>
PR ada/87778
diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc
index 9966d93..3eefb97 100644
--- a/gcc/auto-profile.cc
+++ b/gcc/auto-profile.cc
@@ -151,7 +151,6 @@ public:
Each inline stack should only be used to annotate IR once.
This will be enforced when instruction-level discriminator
is supported. */
- bool annotated;
};
/* operator< for "const char *". */
@@ -242,9 +241,6 @@ public:
MAP, return the total count for all inlined indirect calls. */
gcov_type find_icall_target_map (gcall *stmt, icall_target_map *map) const;
- /* Sum of counts that is used during annotation. */
- gcov_type total_annotated_count () const;
-
/* Mark LOC as annotated. */
void mark_annotated (location_t loc);
@@ -314,9 +310,6 @@ public:
Return true if INFO is updated. */
bool update_inlined_ind_target (gcall *stmt, count_info *info);
- /* Mark LOC as annotated. */
- void mark_annotated (location_t loc);
-
private:
/* Map from function_instance name index (in string_table) to
function_instance. */
@@ -578,17 +571,6 @@ function_instance::get_count_info (location_t loc, count_info *info) const
return true;
}
-/* Mark LOC as annotated. */
-
-void
-function_instance::mark_annotated (location_t loc)
-{
- position_count_map::iterator iter = pos_counts.find (loc);
- if (iter == pos_counts.end ())
- return;
- iter->second.annotated = true;
-}
-
/* Read the inlined indirect call target profile for STMT and store it in
MAP, return the total count for all inlined indirect calls. */
@@ -685,22 +667,6 @@ function_instance::read_function_instance (function_instance_stack *stack,
return s;
}
-/* Sum of counts that is used during annotation. */
-
-gcov_type
-function_instance::total_annotated_count () const
-{
- gcov_type ret = 0;
- for (callsite_map::const_iterator iter = callsites.begin ();
- iter != callsites.end (); ++iter)
- ret += iter->second->total_annotated_count ();
- for (position_count_map::const_iterator iter = pos_counts.begin ();
- iter != pos_counts.end (); ++iter)
- if (iter->second.annotated)
- ret += iter->second.count;
- return ret;
-}
-
/* Member functions for autofdo_source_profile. */
autofdo_source_profile::~autofdo_source_profile ()
@@ -748,21 +714,6 @@ autofdo_source_profile::get_count_info (location_t gimple_loc,
return s->get_count_info (stack[0].second, info);
}
-/* Mark LOC as annotated. */
-
-void
-autofdo_source_profile::mark_annotated (location_t loc)
-{
- inline_stack stack;
- get_inline_stack (loc, &stack);
- if (stack.length () == 0)
- return;
- function_instance *s = get_function_instance_by_inline_stack (stack);
- if (s == NULL)
- return;
- s->mark_annotated (stack[0].second);
-}
-
/* Update value profile INFO for STMT from the inlined indirect callsite.
Return true if INFO is updated. */
@@ -1110,6 +1061,19 @@ set_bb_annotated (basic_block bb, bb_set *annotated)
annotated->insert (bb);
}
+/* Update profile_count by known autofdo count. */
+void
+update_count_by_afdo_count (profile_count *count, gcov_type c)
+{
+ if (c)
+ *count = profile_count::from_gcov_type (c).afdo ();
+ /* In case we have guessed profile which is already zero, preserve
+ quality info. */
+ else if (count->nonzero_p ()
+ || count->quality () == GUESSED)
+ *count = profile_count::zero ().afdo ();
+}
+
/* For a given BB, set its execution count. Attach value profile if a stmt
is not in PROMOTED, because we only want to promote an indirect call once.
Return TRUE if BB is annotated. */
@@ -1118,10 +1082,10 @@ static bool
afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
{
gimple_stmt_iterator gsi;
- edge e;
- edge_iterator ei;
gcov_type max_count = 0;
bool has_annotated = false;
+ if (dump_file)
+ fprintf (dump_file, " Looking up AFDO count of bb %i\n", bb->index);
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
@@ -1133,6 +1097,12 @@ afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
{
if (info.count > max_count)
max_count = info.count;
+ if (dump_file && info.count)
+ {
+ fprintf (dump_file, " count %" PRIu64 " in stmt: ",
+ (int64_t)info.count);
+ print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
+ }
has_annotated = true;
if (info.targets.size () > 0
&& promoted.find (stmt) == promoted.end ())
@@ -1163,6 +1133,13 @@ afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
{
if (info.count > max_count)
max_count = info.count;
+ if (dump_file && info.count)
+ {
+ fprintf (dump_file,
+ " phi op in BB %i with count %" PRIu64": ",
+ bb_succ->index, (int64_t)info.count);
+ print_gimple_stmt (dump_file, phi, 0, TDF_SLIM);
+ }
has_annotated = true;
}
}
@@ -1172,21 +1149,14 @@ afdo_set_bb_count (basic_block bb, const stmt_set &promoted)
return false;
}
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- afdo_source_profile->mark_annotated (gimple_location (gsi_stmt (gsi)));
- for (gphi_iterator gpi = gsi_start_phis (bb);
- !gsi_end_p (gpi);
- gsi_next (&gpi))
+ if (max_count)
{
- gphi *phi = gpi.phi ();
- size_t i;
- for (i = 0; i < gimple_phi_num_args (phi); i++)
- afdo_source_profile->mark_annotated (gimple_phi_arg_location (phi, i));
+ update_count_by_afdo_count (&bb->count, max_count);
+ if (dump_file)
+ fprintf (dump_file,
+ " Annotated bb %i with count %" PRId64 "\n",
+ bb->index, (int64_t)max_count);
}
- FOR_EACH_EDGE (e, ei, bb->succs)
- afdo_source_profile->mark_annotated (e->goto_locus);
-
- bb->count = profile_count::from_gcov_type (max_count).afdo ();
return true;
}
@@ -1219,6 +1189,14 @@ afdo_find_equiv_class (bb_set *annotated_bb)
bb1->aux = bb;
if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
{
+ if (dump_file)
+ {
+ fprintf (dump_file,
+ " Copying count of bb %i to bb %i; count is:",
+ bb1->index,
+ bb->index);
+ bb1->count.dump (dump_file);
+ }
bb->count = bb1->count;
set_bb_annotated (bb, annotated_bb);
}
@@ -1231,6 +1209,14 @@ afdo_find_equiv_class (bb_set *annotated_bb)
bb1->aux = bb;
if (bb1->count > bb->count && is_bb_annotated (bb1, *annotated_bb))
{
+ if (dump_file)
+ {
+ fprintf (dump_file,
+ " Copying count of bb %i to bb %i; count is:",
+ bb1->index,
+ bb->index);
+ bb1->count.dump (dump_file);
+ }
bb->count = bb1->count;
set_bb_annotated (bb, annotated_bb);
}
@@ -1476,7 +1462,7 @@ afdo_calculate_branch_prob (bb_set *annotated_bb)
else
total_count += AFDO_EINFO (e)->get_count ();
}
- if (num_unknown_succ == 0 && total_count.nonzero_p())
+ if (num_unknown_succ == 0 && total_count.nonzero_p ())
{
FOR_EACH_EDGE (e, ei, bb->succs)
e->probability
@@ -1577,22 +1563,55 @@ afdo_annotate_cfg (const stmt_set &promoted_stmts)
current_function_decl);
if (s == NULL)
- return;
- 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 ();
- profile_count max_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
+ {
+ if (dump_file)
+ fprintf (dump_file, "No afdo profile for %s",
+ cgraph_node::get (current_function_decl)->dump_name ());
+ return;
+ }
+ if (dump_file)
+ fprintf (dump_file, "\n\nAnnotating BB profile of %s\n",
+ cgraph_node::get (current_function_decl)->dump_name ());
+
+ /* In the first pass only store non-zero counts. */
+ gcov_type head_count = s->head_count ();
+ bool profile_found = head_count > 0;
FOR_EACH_BB_FN (bb, cfun)
{
- /* As autoFDO uses sampling approach, we have to assume that all
- counters are zero when not seen by autoFDO. */
- bb->count = profile_count::zero ().afdo ();
if (afdo_set_bb_count (bb, promoted_stmts))
- set_bb_annotated (bb, &annotated_bb);
- if (bb->count > max_count)
- max_count = bb->count;
+ {
+ if (bb->count.quality () == AFDO)
+ {
+ gcc_assert (bb->count.nonzero_p ());
+ profile_found = true;
+ }
+ set_bb_annotated (bb, &annotated_bb);
+ }
+ }
+ /* Exit without clobbering static profile if there was no
+ non-zero count.
+ ??? Instead of keeping guessed profile we can introduce
+ GUESSED_GLOBAL0_AFDO. */
+ if (!profile_found)
+ {
+ if (dump_file)
+ fprintf (dump_file, "No afdo samples found; keeping original profile");
+ return;
}
+
+ /* Update profile. */
+ update_count_by_afdo_count (&ENTRY_BLOCK_PTR_FOR_FN (cfun)->count,
+ head_count);
+ update_count_by_afdo_count (&EXIT_BLOCK_PTR_FOR_FN (cfun)->count, 0);
+ profile_count max_count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
+
+ FOR_EACH_BB_FN (bb, cfun)
+ if (bb->count.quality () != AFDO)
+ update_count_by_afdo_count (&bb->count, 0);
+ else
+ max_count = max_count.max (bb->count);
+
if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count
> ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb->count)
{
@@ -1607,15 +1626,10 @@ afdo_annotate_cfg (const stmt_set &promoted_stmts)
= ENTRY_BLOCK_PTR_FOR_FN (cfun)->count;
set_bb_annotated (EXIT_BLOCK_PTR_FOR_FN (cfun)->prev_bb, &annotated_bb);
}
- afdo_source_profile->mark_annotated (
- DECL_SOURCE_LOCATION (current_function_decl));
- afdo_source_profile->mark_annotated (cfun->function_start_locus);
- afdo_source_profile->mark_annotated (cfun->function_end_locus);
- if (max_count.nonzero_p())
- {
- /* Calculate, propagate count and probability information on CFG. */
- afdo_calculate_branch_prob (&annotated_bb);
- }
+ gcc_assert (max_count.nonzero_p ());
+ /* 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 ();
diff --git a/gcc/avoid-store-forwarding.cc b/gcc/avoid-store-forwarding.cc
index 5d960ade..6825d04 100644
--- a/gcc/avoid-store-forwarding.cc
+++ b/gcc/avoid-store-forwarding.cc
@@ -176,20 +176,28 @@ process_store_forwarding (vec<store_fwd_info> &stores, rtx_insn *load_insn,
/* Memory sizes should be constants at this stage. */
HOST_WIDE_INT load_size = MEM_SIZE (load_mem).to_constant ();
- /* If the stores cover all the bytes of the load without overlap then we can
- eliminate the load entirely and use the computed value instead. */
+ /* If the stores cover all the bytes of the load, then we can eliminate
+ the load entirely and use the computed value instead.
+ We can also eliminate stores on addresses that are overwritten
+ by later stores. */
sbitmap forwarded_bytes = sbitmap_alloc (load_size);
bitmap_clear (forwarded_bytes);
unsigned int i;
store_fwd_info* it;
+ auto_vec<store_fwd_info> redundant_stores;
+ auto_vec<int> store_ind_to_remove;
FOR_EACH_VEC_ELT (stores, i, it)
{
HOST_WIDE_INT store_size = MEM_SIZE (it->store_mem).to_constant ();
- if (bitmap_bit_in_range_p (forwarded_bytes, it->offset,
- it->offset + store_size - 1))
- break;
+ if (bitmap_all_bits_in_range_p (forwarded_bytes, it->offset,
+ it->offset + store_size - 1))
+ {
+ redundant_stores.safe_push (*it);
+ store_ind_to_remove.safe_push (i);
+ continue;
+ }
bitmap_set_range (forwarded_bytes, it->offset, store_size);
}
@@ -215,6 +223,15 @@ process_store_forwarding (vec<store_fwd_info> &stores, rtx_insn *load_insn,
fprintf (dump_file, "(Load elimination candidate)\n");
}
+ /* Remove redundant stores from the vector. Although this is quadratic,
+ there doesn't seem to be much point optimizing it. The number of
+ redundant stores is expected to be low and the length of the list is
+ limited by a --param. The dependence checking that we did earlier is
+ also quadratic in the size of this list. */
+ store_ind_to_remove.reverse ();
+ for (int i : store_ind_to_remove)
+ stores.ordered_remove (i);
+
rtx load = single_set (load_insn);
rtx dest;
@@ -231,18 +248,16 @@ process_store_forwarding (vec<store_fwd_info> &stores, rtx_insn *load_insn,
{
it->mov_reg = gen_reg_rtx (GET_MODE (it->store_mem));
rtx_insn *insns = NULL;
+ const bool has_zero_offset = it->offset == 0;
/* If we're eliminating the load then find the store with zero offset
and use it as the base register to avoid a bit insert if possible. */
- if (load_elim && it->offset == 0)
+ if (load_elim && has_zero_offset)
{
start_sequence ();
- machine_mode dest_mode = GET_MODE (dest);
- rtx base_reg = it->mov_reg;
- if (known_gt (GET_MODE_BITSIZE (dest_mode),
- GET_MODE_BITSIZE (GET_MODE (it->mov_reg))))
- base_reg = gen_rtx_ZERO_EXTEND (dest_mode, it->mov_reg);
+ rtx base_reg = lowpart_subreg (GET_MODE (dest), it->mov_reg,
+ GET_MODE (it->mov_reg));
if (base_reg)
{
@@ -380,6 +395,16 @@ process_store_forwarding (vec<store_fwd_info> &stores, rtx_insn *load_insn,
print_rtl_single (dump_file, insn);
}
}
+
+ if (redundant_stores.length () > 0)
+ {
+ fprintf (dump_file, "\nRedundant stores that have been removed:\n");
+ FOR_EACH_VEC_ELT (redundant_stores, i, it)
+ {
+ fprintf (dump_file, " ");
+ print_rtl_single (dump_file, it->store_insn);
+ }
+ }
}
stats_sf_avoided++;
@@ -399,6 +424,10 @@ process_store_forwarding (vec<store_fwd_info> &stores, rtx_insn *load_insn,
delete_insn (it->store_insn);
}
+ /* Delete redundant stores. */
+ FOR_EACH_VEC_ELT (redundant_stores, i, it)
+ delete_insn (it->store_insn);
+
df_insn_rescan (load_insn);
if (load_elim)
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 4136d54..8de6ae5 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,13 @@
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+ Martin Uecker <uecker@tugraz.at>
+
+ PR c/117025
+ * c-common.h (enum rid): Add RID_COUNTOF.
+ (c_countof_type): New function prototype.
+ * c-common.def (COUNTOF_EXPR): New tree.
+ * c-common.cc (c_common_reswords): Add RID_COUNTOF entry.
+ (c_countof_type): New function.
+
2025-05-23 Jason Merrill <jason@redhat.com>
* c-format.cc (flag_chars_t::validate): Control quoting warnings
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
index 587d764..f71cb26 100644
--- a/gcc/c-family/c-common.cc
+++ b/gcc/c-family/c-common.cc
@@ -394,6 +394,7 @@ const struct c_common_resword c_common_reswords[] =
{
{ "_Alignas", RID_ALIGNAS, D_CONLY },
{ "_Alignof", RID_ALIGNOF, D_CONLY },
+ { "_Countof", RID_COUNTOF, D_CONLY },
{ "_Atomic", RID_ATOMIC, D_CONLY },
{ "_BitInt", RID_BITINT, D_CONLY },
{ "_Bool", RID_BOOL, D_CONLY },
@@ -4080,6 +4081,31 @@ c_alignof_expr (location_t loc, tree expr)
return fold_convert_loc (loc, size_type_node, t);
}
+
+/* Implement the _Countof keyword:
+ Return the number of elements of an array. */
+
+tree
+c_countof_type (location_t loc, tree type)
+{
+ enum tree_code type_code;
+
+ type_code = TREE_CODE (type);
+ if (type_code != ARRAY_TYPE)
+ {
+ error_at (loc, "invalid application of %<_Countof%> to type %qT", type);
+ return error_mark_node;
+ }
+ if (!COMPLETE_TYPE_P (type))
+ {
+ error_at (loc,
+ "invalid application of %<_Countof%> to incomplete type %qT",
+ type);
+ return error_mark_node;
+ }
+
+ return array_type_nelts_top (type);
+}
/* Handle C and C++ default attributes. */
diff --git a/gcc/c-family/c-common.def b/gcc/c-family/c-common.def
index cf22282..0bcc499 100644
--- a/gcc/c-family/c-common.def
+++ b/gcc/c-family/c-common.def
@@ -50,6 +50,9 @@ DEFTREECODE (EXCESS_PRECISION_EXPR, "excess_precision_expr", tcc_expression, 1)
number. */
DEFTREECODE (USERDEF_LITERAL, "userdef_literal", tcc_exceptional, 3)
+/* Represents a 'countof' expression. */
+DEFTREECODE (COUNTOF_EXPR, "countof_expr", tcc_expression, 1)
+
/* Represents a 'sizeof' expression during C++ template expansion,
or for the purpose of -Wsizeof-pointer-memaccess warning. */
DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", tcc_expression, 1)
diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h
index ea6c297..91fd120 100644
--- a/gcc/c-family/c-common.h
+++ b/gcc/c-family/c-common.h
@@ -105,6 +105,7 @@ enum rid
/* C extensions */
RID_ASM, RID_TYPEOF, RID_TYPEOF_UNQUAL, RID_ALIGNOF, RID_ATTRIBUTE,
+ RID_COUNTOF,
RID_C23_VA_START, RID_VA_ARG,
RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL, RID_CHOOSE_EXPR,
RID_TYPES_COMPATIBLE_P, RID_BUILTIN_COMPLEX, RID_BUILTIN_SHUFFLE,
@@ -890,6 +891,7 @@ extern tree c_common_truthvalue_conversion (location_t, tree);
extern void c_apply_type_quals_to_decl (int, tree);
extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
extern tree c_alignof_expr (location_t, tree);
+extern tree c_countof_type (location_t, tree);
/* Print an error message for invalid operands to arith operation CODE.
NOP_EXPR is used as a special case (see truthvalue_conversion). */
extern void binary_op_error (rich_location *, enum tree_code, tree, tree);
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index b7cdd11..c8587b4 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,37 @@
+2025-05-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/117025
+ * c-parser.cc (c_parser_sizeof_or_countof_expression): Use
+ C2Y rather than C23 in pedwarn_c23.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+
+ PR c/117025
+ * c-parser.cc (c_parser_sizeof_or_countof_expression):
+ Add -Wpedantic diagnostic for _Countof in <= C23 mode.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+ Martin Uecker <uecker@tugraz.at>
+
+ PR c/117025
+ * c-tree.h (in_countof): Add global variable declaration.
+ (c_expr_countof_expr): Add function prototype.
+ (c_expr_countof_type): Add function prototype.
+ * c-decl.cc (start_struct, finish_struct): Add support for
+ _Countof.
+ (start_enum, finish_enum): Add support for _Countof.
+ * c-parser.cc (c_parser_sizeof_expression): New macro.
+ (c_parser_countof_expression): New macro.
+ (c_parser_sizeof_or_countof_expression): Rename function and add
+ support for _Countof.
+ (c_parser_unary_expression): Add RID_COUNTOF entry.
+ * c-typeck.cc (in_countof): Add global variable.
+ (build_external_ref): Add support for _Countof.
+ (record_maybe_used_decl): Add support for _Countof.
+ (pop_maybe_used): Add support for _Countof.
+ (is_top_array_vla): New function.
+ (c_expr_countof_expr, c_expr_countof_type): New functions.
+
2025-05-02 Jakub Jelinek <jakub@redhat.com>
PR c/120057
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index ad66d7d..33d0ec1 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -8943,12 +8943,14 @@ start_struct (location_t loc, enum tree_code code, tree name,
within a statement expr used within sizeof, et. al. This is not
terribly serious as C++ doesn't permit statement exprs within
sizeof anyhow. */
- if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
+ if (warn_cxx_compat
+ && (in_sizeof || in_typeof || in_alignof || in_countof))
warning_at (loc, OPT_Wc___compat,
"defining type in %qs expression is invalid in C++",
- (in_sizeof
- ? "sizeof"
- : (in_typeof ? "typeof" : "alignof")));
+ (in_sizeof ? "sizeof"
+ : in_typeof ? "typeof"
+ : in_alignof ? "alignof"
+ : "_Countof"));
if (in_underspecified_init)
error_at (loc, "%qT defined in underspecified object initializer", ref);
@@ -9923,7 +9925,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
struct_types. */
if (warn_cxx_compat
&& struct_parse_info != NULL
- && !in_sizeof && !in_typeof && !in_alignof)
+ && !in_sizeof && !in_typeof && !in_alignof && !in_countof)
struct_parse_info->struct_types.safe_push (t);
}
@@ -10097,12 +10099,14 @@ start_enum (location_t loc, struct c_enum_contents *the_enum, tree name,
/* FIXME: This will issue a warning for a use of a type defined
within sizeof in a statement expr. This is not terribly serious
as C++ doesn't permit statement exprs within sizeof anyhow. */
- if (warn_cxx_compat && (in_sizeof || in_typeof || in_alignof))
+ if (warn_cxx_compat
+ && (in_sizeof || in_typeof || in_alignof || in_countof))
warning_at (loc, OPT_Wc___compat,
"defining type in %qs expression is invalid in C++",
- (in_sizeof
- ? "sizeof"
- : (in_typeof ? "typeof" : "alignof")));
+ (in_sizeof ? "sizeof"
+ : in_typeof ? "typeof"
+ : in_alignof ? "alignof"
+ : "_Countof"));
if (in_underspecified_init)
error_at (loc, "%qT defined in underspecified object initializer",
@@ -10296,7 +10300,7 @@ finish_enum (tree enumtype, tree values, tree attributes)
struct_types. */
if (warn_cxx_compat
&& struct_parse_info != NULL
- && !in_sizeof && !in_typeof && !in_alignof)
+ && !in_sizeof && !in_typeof && !in_alignof && !in_countof)
struct_parse_info->struct_types.safe_push (enumtype);
/* Check for consistency with previous definition */
diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index 8a63dc5..0d79f58 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -77,7 +77,7 @@ along with GCC; see the file COPYING3. If not see
#include "asan.h"
#include "c-family/c-ubsan.h"
#include "gcc-urlifier.h"
-
+
/* We need to walk over decls with incomplete struct/union/enum types
after parsing the whole translation unit.
In finish_decl(), if the decl is static, has incomplete
@@ -1737,7 +1737,10 @@ static struct c_expr c_parser_binary_expression (c_parser *, struct c_expr *,
tree);
static struct c_expr c_parser_cast_expression (c_parser *, struct c_expr *);
static struct c_expr c_parser_unary_expression (c_parser *);
-static struct c_expr c_parser_sizeof_expression (c_parser *);
+static inline struct c_expr c_parser_sizeof_expression (c_parser *);
+static inline struct c_expr c_parser_countof_expression (c_parser *);
+static struct c_expr c_parser_sizeof_or_countof_expression (c_parser *,
+ enum rid);
static struct c_expr c_parser_alignof_expression (c_parser *);
static struct c_expr c_parser_postfix_expression (c_parser *);
static struct c_expr c_parser_postfix_expression_after_paren_type (c_parser *,
@@ -10452,9 +10455,13 @@ c_parser_cast_expression (c_parser *parser, struct c_expr *after)
++ unary-expression
-- unary-expression
unary-operator cast-expression
+ _Countof unary-expression
+ _Countof ( type-name )
sizeof unary-expression
sizeof ( type-name )
+ (_Countof is new in C2y.)
+
unary-operator: one of
& * + - ~ !
@@ -10572,6 +10579,8 @@ c_parser_unary_expression (c_parser *parser)
case CPP_KEYWORD:
switch (c_parser_peek_token (parser)->keyword)
{
+ case RID_COUNTOF:
+ return c_parser_countof_expression (parser);
case RID_SIZEOF:
return c_parser_sizeof_expression (parser);
case RID_ALIGNOF:
@@ -10610,22 +10619,46 @@ c_parser_unary_expression (c_parser *parser)
/* Parse a sizeof expression. */
-static struct c_expr
+static inline struct c_expr
c_parser_sizeof_expression (c_parser *parser)
{
+ return c_parser_sizeof_or_countof_expression (parser, RID_SIZEOF);
+}
+
+/* Parse a _Countof expression. */
+
+static inline struct c_expr
+c_parser_countof_expression (c_parser *parser)
+{
+ return c_parser_sizeof_or_countof_expression (parser, RID_COUNTOF);
+}
+
+/* Parse a sizeof or _Countof expression. */
+
+static struct c_expr
+c_parser_sizeof_or_countof_expression (c_parser *parser, enum rid rid)
+{
+ const char *op_name = (rid == RID_COUNTOF) ? "_Countof" : "sizeof";
struct c_expr expr;
struct c_expr result;
location_t expr_loc;
- gcc_assert (c_parser_next_token_is_keyword (parser, RID_SIZEOF));
+ gcc_assert (c_parser_next_token_is_keyword (parser, rid));
location_t start;
location_t finish = UNKNOWN_LOCATION;
start = c_parser_peek_token (parser)->location;
+ if (rid == RID_COUNTOF)
+ pedwarn_c23 (start, OPT_Wpedantic,
+ "ISO C does not support %qs before C2Y", op_name);
+
c_parser_consume_token (parser);
c_inhibit_evaluation_warnings++;
- in_sizeof++;
+ if (rid == RID_COUNTOF)
+ in_countof++;
+ else
+ in_sizeof++;
if (c_parser_next_token_is (parser, CPP_OPEN_PAREN)
&& c_token_starts_compound_literal (c_parser_peek_2nd_token (parser)))
{
@@ -10646,7 +10679,7 @@ c_parser_sizeof_expression (c_parser *parser)
for parsing error; the parsing of the expression could have
called record_maybe_used_decl. */
expr.set_error ();
- goto sizeof_expr;
+ goto Xof_expr;
}
if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
{
@@ -10654,31 +10687,45 @@ c_parser_sizeof_expression (c_parser *parser)
type_name,
expr_loc);
finish = expr.get_finish ();
- goto sizeof_expr;
+ goto Xof_expr;
}
/* sizeof ( type-name ). */
if (scspecs)
- error_at (expr_loc, "storage class specifier in %<sizeof%>");
+ error_at (expr_loc, "storage class specifier in %qs", op_name);
if (type_name->specs->alignas_p)
error_at (type_name->specs->locations[cdw_alignas],
- "alignment specified for type name in %<sizeof%>");
+ "alignment specified for type name in %qs", op_name);
c_inhibit_evaluation_warnings--;
- in_sizeof--;
- result = c_expr_sizeof_type (expr_loc, type_name);
+ if (rid == RID_COUNTOF)
+ {
+ in_countof--;
+ result = c_expr_countof_type (expr_loc, type_name);
+ }
+ else
+ {
+ in_sizeof--;
+ result = c_expr_sizeof_type (expr_loc, type_name);
+ }
}
else
{
expr_loc = c_parser_peek_token (parser)->location;
expr = c_parser_unary_expression (parser);
finish = expr.get_finish ();
- sizeof_expr:
+ Xof_expr:
c_inhibit_evaluation_warnings--;
- in_sizeof--;
+ if (rid == RID_COUNTOF)
+ in_countof--;
+ else
+ in_sizeof--;
mark_exp_read (expr.value);
if (TREE_CODE (expr.value) == COMPONENT_REF
&& DECL_C_BIT_FIELD (TREE_OPERAND (expr.value, 1)))
- error_at (expr_loc, "%<sizeof%> applied to a bit-field");
- result = c_expr_sizeof_expr (expr_loc, expr);
+ error_at (expr_loc, "%qs applied to a bit-field", op_name);
+ if (rid == RID_COUNTOF)
+ result = c_expr_countof_expr (expr_loc, expr);
+ else
+ result = c_expr_sizeof_expr (expr_loc, expr);
}
if (finish == UNKNOWN_LOCATION)
finish = start;
diff --git a/gcc/c/c-tree.h b/gcc/c/c-tree.h
index 2098120..723a28b 100644
--- a/gcc/c/c-tree.h
+++ b/gcc/c/c-tree.h
@@ -765,6 +765,7 @@ extern int c_type_dwarf_attribute (const_tree, int);
/* in c-typeck.cc */
extern int in_alignof;
extern int in_sizeof;
+extern int in_countof;
extern int in_typeof;
extern bool c_in_omp_for;
extern bool c_omp_array_section_p;
@@ -827,6 +828,9 @@ extern tree build_external_ref (location_t, tree, bool, tree *);
extern void pop_maybe_used (bool);
extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr);
extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *);
+extern struct c_expr c_expr_countof_expr (location_t, struct c_expr);
+extern struct c_expr c_expr_countof_type (location_t loc,
+ struct c_type_name *);
extern struct c_expr parser_build_unary_op (location_t, enum tree_code,
struct c_expr);
extern struct c_expr parser_build_binary_op (location_t,
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 0e1f842..360216b 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -72,6 +72,9 @@ int in_alignof;
/* The level of nesting inside "sizeof". */
int in_sizeof;
+/* The level of nesting inside "countof". */
+int in_countof;
+
/* The level of nesting inside "typeof". */
int in_typeof;
@@ -3540,7 +3543,7 @@ build_external_ref (location_t loc, tree id, bool fun, tree *type)
if (TREE_CODE (ref) == FUNCTION_DECL && !in_alignof)
{
- if (!in_sizeof && !in_typeof)
+ if (!in_sizeof && !in_typeof && !in_countof)
C_DECL_USED (ref) = 1;
else if (DECL_INITIAL (ref) == NULL_TREE
&& DECL_EXTERNAL (ref)
@@ -3596,7 +3599,7 @@ struct maybe_used_decl
{
/* The decl. */
tree decl;
- /* The level seen at (in_sizeof + in_typeof). */
+ /* The level seen at (in_sizeof + in_typeof + in_countof). */
int level;
/* The next one at this level or above, or NULL. */
struct maybe_used_decl *next;
@@ -3614,7 +3617,7 @@ record_maybe_used_decl (tree decl)
{
struct maybe_used_decl *t = XOBNEW (&parser_obstack, struct maybe_used_decl);
t->decl = decl;
- t->level = in_sizeof + in_typeof;
+ t->level = in_sizeof + in_typeof + in_countof;
t->next = maybe_used_decls;
maybe_used_decls = t;
}
@@ -3628,7 +3631,7 @@ void
pop_maybe_used (bool used)
{
struct maybe_used_decl *p = maybe_used_decls;
- int cur_level = in_sizeof + in_typeof;
+ int cur_level = in_sizeof + in_typeof + in_countof;
while (p && p->level > cur_level)
{
if (used)
@@ -3738,6 +3741,110 @@ c_expr_sizeof_type (location_t loc, struct c_type_name *t)
return ret;
}
+static bool
+is_top_array_vla (tree type)
+{
+ bool zero, var;
+ tree d;
+
+ if (TREE_CODE (type) != ARRAY_TYPE)
+ return false;
+ if (!COMPLETE_TYPE_P (type))
+ return false;
+
+ d = TYPE_DOMAIN (type);
+ zero = !TYPE_MAX_VALUE (d);
+ if (zero)
+ return false;
+
+ var = (TREE_CODE (TYPE_MIN_VALUE (d)) != INTEGER_CST
+ || TREE_CODE (TYPE_MAX_VALUE (d)) != INTEGER_CST);
+ return var;
+}
+
+/* Return the result of countof applied to EXPR. */
+
+struct c_expr
+c_expr_countof_expr (location_t loc, struct c_expr expr)
+{
+ struct c_expr ret;
+ if (expr.value == error_mark_node)
+ {
+ ret.value = error_mark_node;
+ ret.original_code = ERROR_MARK;
+ ret.original_type = NULL;
+ ret.m_decimal = 0;
+ pop_maybe_used (false);
+ }
+ else
+ {
+ bool expr_const_operands = true;
+
+ tree folded_expr = c_fully_fold (expr.value, require_constant_value,
+ &expr_const_operands);
+ ret.value = c_countof_type (loc, TREE_TYPE (folded_expr));
+ c_last_sizeof_arg = expr.value;
+ c_last_sizeof_loc = loc;
+ ret.original_code = COUNTOF_EXPR;
+ ret.original_type = NULL;
+ ret.m_decimal = 0;
+ if (is_top_array_vla (TREE_TYPE (folded_expr)))
+ {
+ /* countof is evaluated when given a vla. */
+ ret.value = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret.value),
+ folded_expr, ret.value);
+ C_MAYBE_CONST_EXPR_NON_CONST (ret.value) = !expr_const_operands;
+ SET_EXPR_LOCATION (ret.value, loc);
+ }
+ pop_maybe_used (is_top_array_vla (TREE_TYPE (folded_expr)));
+ }
+ return ret;
+}
+
+/* Return the result of countof applied to T, a structure for the type
+ name passed to countof (rather than the type itself). LOC is the
+ location of the original expression. */
+
+struct c_expr
+c_expr_countof_type (location_t loc, struct c_type_name *t)
+{
+ tree type;
+ struct c_expr ret;
+ tree type_expr = NULL_TREE;
+ bool type_expr_const = true;
+ type = groktypename (t, &type_expr, &type_expr_const);
+ ret.value = c_countof_type (loc, type);
+ c_last_sizeof_arg = type;
+ c_last_sizeof_loc = loc;
+ ret.original_code = COUNTOF_EXPR;
+ ret.original_type = NULL;
+ ret.m_decimal = 0;
+ if (type == error_mark_node)
+ {
+ ret.value = error_mark_node;
+ ret.original_code = ERROR_MARK;
+ }
+ else
+ if ((type_expr || TREE_CODE (ret.value) == INTEGER_CST)
+ && is_top_array_vla (type))
+ {
+ /* If the type is a [*] array, it is a VLA but is represented as
+ having a size of zero. In such a case we must ensure that
+ the result of countof does not get folded to a constant by
+ c_fully_fold, because if the number of elements is evaluated
+ the result is not constant and so
+ constraints on zero or negative size arrays must not be applied
+ when this countof call is inside another array declarator. */
+ if (!type_expr)
+ type_expr = integer_zero_node;
+ ret.value = build2 (C_MAYBE_CONST_EXPR, TREE_TYPE (ret.value),
+ type_expr, ret.value);
+ C_MAYBE_CONST_EXPR_NON_CONST (ret.value) = !type_expr_const;
+ }
+ pop_maybe_used (type != error_mark_node ? is_top_array_vla (type) : false);
+ return ret;
+}
+
/* Build a function call to function FUNCTION with parameters PARAMS.
The function call is at LOC.
PARAMS is a list--a chain of TREE_LIST nodes--in which the
diff --git a/gcc/cgraph.cc b/gcc/cgraph.cc
index ac0f251..3f95ca1 100644
--- a/gcc/cgraph.cc
+++ b/gcc/cgraph.cc
@@ -3019,7 +3019,14 @@ cgraph_edge::maybe_hot_p (sreal scale)
/* Use IPA count and if it s not available appy local heuristics. */
if (c.initialized_p ())
- return maybe_hot_count_p (NULL, c * scale);
+ {
+ /* A special case; AFDO zero means that function may quite possibly
+ be executed few times per execution. If scale is large, we still
+ want to consider the call hot. */
+ if (c.quality () == AFDO)
+ c = c.force_nonzero ();
+ return maybe_hot_count_p (NULL, c * scale);
+ }
if (!count.initialized_p ())
return true;
cgraph_node *where = caller->inlined_to ? caller->inlined_to : caller;
diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def
index 1209630..24b7cd3 100644
--- a/gcc/config/aarch64/aarch64-cores.def
+++ b/gcc/config/aarch64/aarch64-cores.def
@@ -132,7 +132,7 @@ AARCH64_CORE("octeontx2f95mm", octeontx2f95mm, cortexa57, V8_2A, (CRYPTO, PROFI
/* Fujitsu ('F') cores. */
AARCH64_CORE("a64fx", a64fx, a64fx, V8_2A, (F16, SVE), a64fx, 0x46, 0x001, -1)
-AARCH64_CORE("fujitsu-monaka", fujitsu_monaka, cortexa57, V9_3A, (F16, FP8, LS64, RNG, CRYPTO, SVE2_AES, SVE2_BITPERM, SVE2_SHA3, SVE2_SM4), fujitsu_monaka, 0x46, 0x003, -1)
+AARCH64_CORE("fujitsu-monaka", fujitsu_monaka, cortexa57, V9_3A, (F16, FAMINMAX, FP8FMA, FP8DOT2, FP8DOT4, LS64, LUT, RNG, CRYPTO, SVE2_AES, SVE2_BITPERM, SVE2_SHA3, SVE2_SM4), fujitsu_monaka, 0x46, 0x003, -1)
/* HiSilicon ('H') cores. */
AARCH64_CORE("tsv110", tsv110, tsv110, V8_2A, (CRYPTO, F16), tsv110, 0x48, 0xd01, -1)
diff --git a/gcc/config/aarch64/gcc-auto-profile b/gcc/config/aarch64/gcc-auto-profile
new file mode 100644
index 0000000..4d5c2e3
--- /dev/null
+++ b/gcc/config/aarch64/gcc-auto-profile
@@ -0,0 +1,53 @@
+#!/bin/sh
+# Profile workload for gcc profile feedback (autofdo) using Linux perf.
+# Copyright The GNU Toolchain Authors.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>. */
+
+# Run perf record with branch stack sampling and check for
+# specific error message to see if it is supported.
+use_brbe=true
+output=$(perf record -j any,u /bin/true 2>&1)
+case "$output" in
+ *"PMU Hardware or event type doesn't support branch stack sampling."*)
+ use_brbe=false;;
+ *)
+ use_brbe=true;;
+esac
+
+FLAGS=u
+if [ "$1" = "--kernel" ] ; then
+ FLAGS=k
+ shift
+elif [ "$1" = "--all" ] ; then
+ FLAGS=u,k
+ shift
+fi
+
+if [ "$use_brbe" = true ] ; then
+ if grep -q hypervisor /proc/cpuinfo ; then
+ echo >&2 "Warning: branch profiling may not be functional in VMs"
+ fi
+ set -x
+ perf record -j any,$FLAGS "$@"
+ set +x
+else
+ echo >&2 "Warning: branch profiling may not be functional without BRBE"
+ set -x
+ perf record "$@"
+ set +x
+fi
diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h
index 743cc38..0a3173c 100644
--- a/gcc/config/i386/cygming.h
+++ b/gcc/config/i386/cygming.h
@@ -246,9 +246,10 @@ do { \
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(STREAM, NAME) \
do { \
+ const char *prefix = ""; \
if ((NAME)[0] != FASTCALL_PREFIX) \
- fputs (user_label_prefix, (STREAM)); \
- fputs ((NAME), (STREAM)); \
+ prefix = user_label_prefix; \
+ ix86_asm_output_labelref ((STREAM), prefix, (NAME)); \
} while (0)
/* This does much the same in memory rather than to a stream. */
diff --git a/gcc/config/i386/gcc-auto-profile b/gcc/config/i386/gcc-auto-profile
index 528b34e..0e9e5fe 100755
--- a/gcc/config/i386/gcc-auto-profile
+++ b/gcc/config/i386/gcc-auto-profile
@@ -24,8 +24,16 @@ if [ "$1" = "--all" ] ; then
shift
fi
-if ! grep -q Intel /proc/cpuinfo ; then
- echo >&2 "Only Intel CPUs supported"
+if grep -q AuthenticAMD /proc/cpuinfo ; then
+ vendor=AMD
+ if ! grep -q " brs" /proc/cpuinfo && ! grep -q amd_lbr_v2 /proc/cpuinfo ; then
+ echo >&2 "AMD CPU with brs (Zen 3) or amd_lbr_v2 (Zen 4+) feature is required"
+ exit 1
+ fi
+elif grep -q Intel /proc/cpuinfo ; then
+ vendor=Intel
+else
+ echo >&2 "Only AMD and Intel CPUs supported"
exit 1
fi
@@ -33,7 +41,7 @@ if grep -q hypervisor /proc/cpuinfo ; then
echo >&2 "Warning: branch profiling may not be functional in VMs"
fi
-case `grep -E -q "^cpu family\s*: 6" /proc/cpuinfo &&
+case `test $vendor = Intel && grep -E -q "^cpu family\s*: 6" /proc/cpuinfo &&
grep -E "^model\s*:" /proc/cpuinfo | head -n1` in
model*:\ 46|\
model*:\ 30|\
@@ -82,6 +90,8 @@ model*:\ 126|\
model*:\ 167|\
model*:\ 140|\
model*:\ 141|\
+model*:\ 143|\
+model*:\ 207|\
model*:\ 106|\
model*:\ 108|\
model*:\ 173|\
@@ -89,15 +99,20 @@ model*:\ 174) E="cpu/event=0xc4,umask=0x20/$FLAGS" ;;
model*:\ 134|\
model*:\ 150|\
model*:\ 156) E="cpu/event=0xc4,umask=0xfe/p$FLAGS" ;;
-model*:\ 143|\
-model*:\ 207) E="cpu/event=0xc4,umask=0x20/p$FLAGS" ;;
-model*:\ 190) E="cpu/event=0xc4,umask=0xc0/$FLAGS" ;;
+model*:\ 190|\
+model*:\ 175|\
+model*:\ 182) E="cpu/event=0xc4,umask=0xc0/$FLAGS" ;;
model*:\ 190) E="cpu/event=0xc4,umask=0xfe/$FLAGS" ;;
*)
if perf list br_inst_retired | grep -q br_inst_retired.near_taken ; then
E=br_inst_retired.near_taken:p
+ elif perf list ex_ret_brn_tkn | grep -q ex_ret_brn_tkn ; then
+ E=ex_ret_brn_tkn:P$FLAGS
+ elif $vendor = Intel ; then
+echo >&2 "Unknown Intel CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
+ exit 1
else
-echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
+echo >&2 "AMD CPU without support for ex_ret_brn_tkn event"
exit 1
fi ;;
esac
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index e85b925..10863ab 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -199,6 +199,7 @@ extern int ix86_attr_length_vex_default (rtx_insn *, bool, bool);
extern rtx ix86_libcall_value (machine_mode);
extern bool ix86_function_arg_regno_p (int);
extern void ix86_asm_output_function_label (FILE *, const char *, tree);
+extern void ix86_asm_output_labelref (FILE *, const char *, const char *);
extern void ix86_call_abi_override (const_tree);
extern int ix86_reg_parm_stack_space (const_tree);
diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index 5cb66da..d48654a 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -1716,6 +1716,19 @@ ix86_asm_output_function_label (FILE *out_file, const char *fname,
}
}
+/* Output a user-defined label. In AT&T syntax, registers are prefixed
+ with %, so labels require no punctuation. In Intel syntax, registers
+ are unprefixed, so labels may clash with registers or other operators,
+ and require quoting. */
+void
+ix86_asm_output_labelref (FILE *file, const char *prefix, const char *label)
+{
+ if (ASSEMBLER_DIALECT == ASM_ATT)
+ fprintf (file, "%s%s", prefix, label);
+ else
+ fprintf (file, "\"%s%s\"", prefix, label);
+}
+
/* Implementation of call abi switching target hook. Specific to FNDECL
the specific call register sets are set. See also
ix86_conditional_register_usage for more details. */
@@ -25172,12 +25185,18 @@ ix86_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
/* One vinserti128 for combining two SSE vectors for AVX256. */
else if (GET_MODE_BITSIZE (mode) == 256)
return ((n - 2) * ix86_cost->sse_op
- + ix86_vec_cost (mode, ix86_cost->addss));
+ + ix86_vec_cost (mode, ix86_cost->sse_op));
/* One vinserti64x4 and two vinserti128 for combining SSE
and AVX256 vectors to AVX512. */
else if (GET_MODE_BITSIZE (mode) == 512)
- return ((n - 4) * ix86_cost->sse_op
- + 3 * ix86_vec_cost (mode, ix86_cost->addss));
+ {
+ machine_mode half_mode
+ = mode_for_vector (GET_MODE_INNER (mode),
+ GET_MODE_NUNITS (mode) / 2).require ();
+ return ((n - 4) * ix86_cost->sse_op
+ + 2 * ix86_vec_cost (half_mode, ix86_cost->sse_op)
+ + ix86_vec_cost (mode, ix86_cost->sse_op));
+ }
gcc_unreachable ();
}
@@ -26035,7 +26054,22 @@ ix86_vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind,
else
{
m_num_gpr_needed[where]++;
- stmt_cost += COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
+
+ int cost = COSTS_N_INSNS (ix86_cost->integer_to_sse) / 2;
+
+ /* For integer construction, the number of actual GPR -> XMM
+ moves will be somewhere between 0 and n.
+ We do not have very good idea about actual number, since
+ the source may be a constant, memory or a chain of
+ instructions that will be later converted by
+ scalar-to-vector pass. */
+ if (kind == vec_construct
+ && GET_MODE_BITSIZE (mode) == 256)
+ cost *= 2;
+ else if (kind == vec_construct
+ && GET_MODE_BITSIZE (mode) == 512)
+ cost *= 3;
+ stmt_cost += cost;
}
}
}
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 5aa056f..ccc62fc 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2267,6 +2267,13 @@ extern unsigned int const svr4_debugger_register_map[FIRST_PSEUDO_REGISTER];
} while (0)
#endif
+/* In Intel syntax, we have to quote user-defined labels that would
+ match (unprefixed) registers or operators. */
+
+#undef ASM_OUTPUT_LABELREF
+#define ASM_OUTPUT_LABELREF(STREAM, NAME) \
+ ix86_asm_output_labelref ((STREAM), user_label_prefix, (NAME))
+
/* Under some conditions we need jump tables in the text section,
because the assembler cannot handle label differences between
sections. */
diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h
index e509129..b08081e 100644
--- a/gcc/config/i386/x86-tune-costs.h
+++ b/gcc/config/i386/x86-tune-costs.h
@@ -2252,7 +2252,7 @@ struct processor_costs znver5_cost = {
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 (3), /* cost of ADDSS/SD SUBSS/SD insns. */
+ 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. */
diff --git a/gcc/config/microblaze/microblaze.cc b/gcc/config/microblaze/microblaze.cc
index db8e334..2ab5ada 100644
--- a/gcc/config/microblaze/microblaze.cc
+++ b/gcc/config/microblaze/microblaze.cc
@@ -239,6 +239,10 @@ section *sdata2_section;
#define TARGET_HAVE_TLS true
#endif
+/* MicroBlaze does not do speculative execution. */
+#undef TARGET_HAVE_SPECULATION_SAFE_VALUE
+#define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
+
/* Return truth value if a CONST_DOUBLE is ok to be a legitimate constant. */
static bool
microblaze_const_double_ok (rtx op, machine_mode mode)
diff --git a/gcc/config/riscv/autovec.md b/gcc/config/riscv/autovec.md
index 9e51e3c..a54f552 100644
--- a/gcc/config/riscv/autovec.md
+++ b/gcc/config/riscv/autovec.md
@@ -2491,19 +2491,12 @@
(sign_extend:VWEXTI
(match_operand:<V_DOUBLE_TRUNC> 2 "register_operand"))))))]
"TARGET_VECTOR"
-{
- /* First emit a widening addition. */
- rtx tmp1 = gen_reg_rtx (<MODE>mode);
- rtx ops1[] = {tmp1, operands[1], operands[2]};
- insn_code icode = code_for_pred_dual_widen (PLUS, SIGN_EXTEND, <MODE>mode);
- riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, ops1);
-
- /* Then a narrowing shift. */
- rtx ops2[] = {operands[0], tmp1, const1_rtx};
- icode = code_for_pred_narrow_scalar (ASHIFTRT, <MODE>mode);
- riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, ops2);
- DONE;
-})
+ {
+ insn_code icode = code_for_pred (UNSPEC_VAADD, <V_DOUBLE_TRUNC>mode);
+ riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP_VXRM_RDN, operands);
+ DONE;
+ }
+)
(define_expand "avg<v_double_trunc>3_ceil"
[(set (match_operand:<V_DOUBLE_TRUNC> 0 "register_operand")
diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md
index 85ace28..21426f4 100644
--- a/gcc/config/riscv/bitmanip.md
+++ b/gcc/config/riscv/bitmanip.md
@@ -846,14 +846,12 @@
[(set_attr "type" "bitmanip")])
;; In case we have "val & ~IMM" where ~IMM has 2 bits set.
-(define_insn_and_split "*bclri<mode>_nottwobits"
- [(set (match_operand:X 0 "register_operand" "=r")
- (and:X (match_operand:X 1 "register_operand" "r")
- (match_operand:X 2 "const_nottwobits_not_arith_operand" "i")))
- (clobber (match_scratch:X 3 "=&r"))]
+(define_split
+ [(set (match_operand:X 0 "register_operand")
+ (and:X (match_operand:X 1 "register_operand")
+ (match_operand:X 2 "const_nottwobits_not_arith_operand")))
+ (clobber (match_operand:X 3 "register_operand"))]
"TARGET_ZBS && !paradoxical_subreg_p (operands[1])"
- "#"
- "&& reload_completed"
[(set (match_dup 3) (and:X (match_dup 1) (match_dup 4)))
(set (match_dup 0) (and:X (match_dup 3) (match_dup 5)))]
{
@@ -862,20 +860,17 @@
operands[4] = GEN_INT (~bits | topbit);
operands[5] = GEN_INT (~topbit);
-}
-[(set_attr "type" "bitmanip")])
+})
;; In case of a paradoxical subreg, the sign bit and the high bits are
;; not allowed to be changed
-(define_insn_and_split "*bclridisi_nottwobits"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (and:DI (match_operand:DI 1 "register_operand" "r")
- (match_operand:DI 2 "const_nottwobits_not_arith_operand" "i")))
- (clobber (match_scratch:DI 3 "=&r"))]
+(define_split
+ [(set (match_operand:DI 0 "register_operand")
+ (and:DI (match_operand:DI 1 "register_operand")
+ (match_operand:DI 2 "const_nottwobits_not_arith_operand")))
+ (clobber (match_operand:DI 3 "register_operand"))]
"TARGET_64BIT && TARGET_ZBS
&& clz_hwi (~UINTVAL (operands[2])) > 33"
- "#"
- "&& reload_completed"
[(set (match_dup 3) (and:DI (match_dup 1) (match_dup 4)))
(set (match_dup 0) (and:DI (match_dup 3) (match_dup 5)))]
{
@@ -884,8 +879,7 @@
operands[4] = GEN_INT (~bits | topbit);
operands[5] = GEN_INT (~topbit);
-}
-[(set_attr "type" "bitmanip")])
+})
;; An outer AND with a constant where bits 31..63 are 0 can be seen as
;; a virtual zero extension from 31 to 64 bits.
@@ -1061,14 +1055,12 @@
[(set_attr "type" "bitmanip")])
;; Same to use blcri + andi and blcri + bclri
-(define_insn_and_split "*andi<mode>_extrabit"
- [(set (match_operand:X 0 "register_operand" "=r")
- (and:X (match_operand:X 1 "register_operand" "r")
- (match_operand:X 2 "not_uimm_extra_bit_or_nottwobits" "i")))
- (clobber (match_scratch:X 3 "=&r"))]
+(define_split
+ [(set (match_operand:X 0 "register_operand")
+ (and:X (match_operand:X 1 "register_operand")
+ (match_operand:X 2 "not_uimm_extra_bit_or_nottwobits")))
+ (clobber (match_operand:X 3 "register_operand"))]
"TARGET_ZBS && !not_single_bit_mask_operand (operands[2], VOIDmode)"
- "#"
- "&& reload_completed"
[(set (match_dup 3) (and:X (match_dup 1) (match_dup 4)))
(set (match_dup 0) (and:X (match_dup 3) (match_dup 5)))]
{
@@ -1077,8 +1069,7 @@
operands[4] = GEN_INT (bits | topbit);
operands[5] = GEN_INT (~topbit);
-}
-[(set_attr "type" "bitmanip")])
+})
;; If we have the ZBA extension, then we can clear the upper half of a 64
;; bit object with a zext.w. So if we have AND where the constant would
diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc
index a6ee582..6162797 100644
--- a/gcc/config/riscv/riscv-v.cc
+++ b/gcc/config/riscv/riscv-v.cc
@@ -5535,6 +5535,8 @@ expand_vx_binary_vec_dup_vec (rtx op_0, rtx op_1, rtx op_2,
case PLUS:
case AND:
case IOR:
+ case XOR:
+ case MULT:
icode = code_for_pred_scalar (code, mode);
break;
case MINUS:
@@ -5563,6 +5565,8 @@ expand_vx_binary_vec_vec_dup (rtx op_0, rtx op_1, rtx op_2,
case MINUS:
case AND:
case IOR:
+ case XOR:
+ case MULT:
icode = code_for_pred_scalar (code, mode);
break;
default:
diff --git a/gcc/config/riscv/riscv-vector-builtins-shapes.cc b/gcc/config/riscv/riscv-vector-builtins-shapes.cc
index b855d4c..9832eb9 100644
--- a/gcc/config/riscv/riscv-vector-builtins-shapes.cc
+++ b/gcc/config/riscv/riscv-vector-builtins-shapes.cc
@@ -908,6 +908,8 @@ struct vset_def : public build_base
{
poly_int64 outer_size = GET_MODE_SIZE (c.arg_mode (0));
poly_int64 inner_size = GET_MODE_SIZE (c.arg_mode (2));
+ if (maybe_eq (inner_size, 0))
+ return false;
unsigned int nvecs = exact_div (outer_size, inner_size).to_constant ();
return c.require_immediate (1, 0, nvecs - 1);
}
@@ -920,6 +922,8 @@ struct vget_def : public misc_def
{
poly_int64 outer_size = GET_MODE_SIZE (c.arg_mode (0));
poly_int64 inner_size = GET_MODE_SIZE (c.ret_mode ());
+ if (maybe_eq (inner_size, 0))
+ return false;
unsigned int nvecs = exact_div (outer_size, inner_size).to_constant ();
return c.require_immediate (1, 0, nvecs - 1);
}
diff --git a/gcc/config/riscv/riscv-vector-builtins.h b/gcc/config/riscv/riscv-vector-builtins.h
index ffc2893..1f2587a 100644
--- a/gcc/config/riscv/riscv-vector-builtins.h
+++ b/gcc/config/riscv/riscv-vector-builtins.h
@@ -331,45 +331,7 @@ struct function_group_info
/* Return true if required extension is enabled */
bool match (required_ext ext_value) const
{
- switch (ext_value)
- {
- case VECTOR_EXT:
- return TARGET_VECTOR;
- case ZVBB_EXT:
- return TARGET_ZVBB;
- case ZVBB_OR_ZVKB_EXT:
- return (TARGET_ZVBB || TARGET_ZVKB);
- case ZVBC_EXT:
- return TARGET_ZVBC;
- case ZVKG_EXT:
- return TARGET_ZVKG;
- case ZVKNED_EXT:
- return TARGET_ZVKNED;
- case ZVKNHA_OR_ZVKNHB_EXT:
- return (TARGET_ZVKNHA || TARGET_ZVKNHB);
- case ZVKNHB_EXT:
- return TARGET_ZVKNHB;
- case ZVKSED_EXT:
- return TARGET_ZVKSED;
- case ZVKSH_EXT:
- return TARGET_ZVKSH;
- case XTHEADVECTOR_EXT:
- return TARGET_XTHEADVECTOR;
- case ZVFBFMIN_EXT:
- return TARGET_ZVFBFMIN;
- case ZVFBFWMA_EXT:
- return TARGET_ZVFBFWMA;
- case XSFVQMACCQOQ_EXT:
- return TARGET_XSFVQMACCQOQ;
- case XSFVQMACCDOD_EXT:
- return TARGET_XSFVQMACCDOD;
- case XSFVFNRCLIPXFQF_EXT:
- return TARGET_XSFVFNRCLIPXFQF;
- case XSFVCP_EXT:
- return TARGET_XSFVCP;
- default:
- gcc_unreachable ();
- }
+ return required_extensions_specified (ext_value);
}
/* The base name, as a string. */
const char *base_name;
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index eaaca36..d3cee96 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -3918,6 +3918,8 @@ riscv_rtx_costs (rtx x, machine_mode mode, int outer_code, int opno ATTRIBUTE_UN
case MINUS:
case AND:
case IOR:
+ case XOR:
+ case MULT:
{
rtx op_0 = XEXP (x, 0);
rtx op_1 = XEXP (x, 1);
@@ -14621,19 +14623,70 @@ synthesize_and (rtx operands[3])
return true;
}
+ /* The special cases didn't apply. It's entirely possible we may
+ want to combine some of the ideas above with bclr, but for now
+ those are deferred until we see them popping up in practice. */
+
+ unsigned HOST_WIDE_INT ival = ~INTVAL (operands[2]);
+
+ /* Clear as many bits using andi as we can. */
+ if ((ival & HOST_WIDE_INT_UC (0x7ff)) != 0x0)
+ {
+ ival &= ~HOST_WIDE_INT_UC (0x7ff);
+ budget--;
+ }
+
+ /* And handle remaining bits via bclr. */
+ while (TARGET_ZBS && ival)
+ {
+ unsigned HOST_WIDE_INT tmpval = HOST_WIDE_INT_UC (1) << ctz_hwi (ival);
+ ival &= ~tmpval;
+ budget--;
+ }
+
/* If the remaining budget has gone to less than zero, it
forces the value into a register and performs the AND
operation. It returns TRUE to the caller so the caller
knows code generation is complete.
FIXME: This is hacked to always be enabled until the last
patch in the series is enabled. */
- if (1)
+ if (ival || budget < 0)
{
rtx x = force_reg (word_mode, operands[2]);
x = gen_rtx_AND (word_mode, operands[1], x);
emit_insn (gen_rtx_SET (operands[0], x));
return true;
}
+
+ /* Synthesis is better than loading the constant. */
+ ival = ~INTVAL (operands[2]);
+ input = operands[1];
+
+ /* Clear any of the lower 11 bits we need. */
+ if ((ival & HOST_WIDE_INT_UC (0x7ff)) != 0)
+ {
+ rtx x = GEN_INT (~(ival & HOST_WIDE_INT_UC (0x7ff)));
+ x = gen_rtx_AND (word_mode, input, x);
+ output = gen_reg_rtx (word_mode);
+ emit_insn (gen_rtx_SET (output, x));
+ input = output;
+ ival &= ~HOST_WIDE_INT_UC (0x7ff);
+ }
+
+ /* Clear the rest with bclr. */
+ while (ival)
+ {
+ unsigned HOST_WIDE_INT tmpval = HOST_WIDE_INT_UC (1) << ctz_hwi (ival);
+ rtx x = GEN_INT (~tmpval);
+ x = gen_rtx_AND (word_mode, input, x);
+ output = gen_reg_rtx (word_mode);
+ emit_insn (gen_rtx_SET (output, x));
+ input = output;
+ ival &= ~tmpval;
+ }
+
+ emit_move_insn (operands[0], input);
+ return true;
}
diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md
index a50b7fd..2bd99ee 100644
--- a/gcc/config/riscv/vector-iterators.md
+++ b/gcc/config/riscv/vector-iterators.md
@@ -4042,7 +4042,7 @@
])
(define_code_iterator any_int_binop_no_shift_vx [
- plus minus and ior
+ plus minus and ior xor mult
])
(define_code_iterator any_int_unop [neg not])
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 7ea3777..7375c36 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -55,7 +55,6 @@
#include "output.h"
#include "common/common-target.h"
#include "langhooks.h"
-#include "reload.h"
#include "sched-int.h"
#include "gimplify.h"
#include "gimple-iterator.h"
diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md
index cdd55b6..6f4e192 100644
--- a/gcc/config/s390/vector.md
+++ b/gcc/config/s390/vector.md
@@ -75,6 +75,8 @@
V1DF V2DF
(V1TF "TARGET_VXE") (TF "TARGET_VXE")])
+(define_mode_iterator VF [(V2SF "TARGET_VXE") (V4SF "TARGET_VXE") V2DF])
+
; All modes present in V_HW1 and VFT.
(define_mode_iterator V_HW1_FT [V16QI V8HI V4SI V2DI V1TI V1DF
V2DF (V1SF "TARGET_VXE") (V2SF "TARGET_VXE")
@@ -506,26 +508,89 @@
UNSPEC_VEC_SET))]
"TARGET_VX")
+; Iterator for vec_set that does not use special float/vect overlay tricks
+(define_mode_iterator VEC_SET_NONFLOAT
+ [V1QI V2QI V4QI V8QI V16QI V1HI V2HI V4HI V8HI V1SI V2SI V4SI V1DI V2DI V2SF V4SF])
+; Iterator for single element float vectors
+(define_mode_iterator VEC_SET_SINGLEFLOAT [(V1SF "TARGET_VXE") V1DF (V1TF "TARGET_VXE")])
+
; FIXME: Support also vector mode operands for 1
; FIXME: A target memory operand seems to be useful otherwise we end
; up with vl vlvgg vst. Shouldn't the middle-end be able to handle
; that itself?
; vlvgb, vlvgh, vlvgf, vlvgg, vleb, vleh, vlef, vleg, vleib, vleih, vleif, vleig
(define_insn "*vec_set<mode>"
- [(set (match_operand:V 0 "register_operand" "=v,v,v")
- (unspec:V [(match_operand:<non_vec> 1 "general_operand" "d,R,K")
- (match_operand:SI 2 "nonmemory_operand" "an,I,I")
- (match_operand:V 3 "register_operand" "0,0,0")]
- UNSPEC_VEC_SET))]
+ [(set (match_operand:VEC_SET_NONFLOAT 0 "register_operand" "=v,v,v")
+ (unspec:VEC_SET_NONFLOAT
+ [(match_operand:<non_vec> 1 "general_operand" "d,R,K")
+ (match_operand:SI 2 "nonmemory_operand" "an,I,I")
+ (match_operand:VEC_SET_NONFLOAT 3 "register_operand" "0,0,0")]
+ UNSPEC_VEC_SET))]
"TARGET_VX
&& (!CONST_INT_P (operands[2])
- || UINTVAL (operands[2]) < GET_MODE_NUNITS (<V:MODE>mode))"
+ || UINTVAL (operands[2]) < GET_MODE_NUNITS (<VEC_SET_NONFLOAT:MODE>mode))"
"@
vlvg<bhfgq>\t%v0,%1,%Y2
vle<bhfgq>\t%v0,%1,%2
vlei<bhfgq>\t%v0,%1,%2"
[(set_attr "op_type" "VRS,VRX,VRI")])
+(define_insn "*vec_set<mode>"
+ [(set (match_operand:VEC_SET_SINGLEFLOAT 0 "register_operand" "=v,v")
+ (unspec:VEC_SET_SINGLEFLOAT
+ [(match_operand:<non_vec> 1 "general_operand" "v,R")
+ (match_operand:SI 2 "nonmemory_operand" "an,I")
+ (match_operand:VEC_SET_SINGLEFLOAT 3 "register_operand" "0,0")]
+ UNSPEC_VEC_SET))]
+ "TARGET_VX"
+ "@
+ vlr\t%v0,%v1
+ vle<bhfgq>\t%v0,%1,0"
+ [(set_attr "op_type" "VRR,VRX")])
+
+(define_insn "*vec_setv2df"
+ [(set (match_operand:V2DF 0 "register_operand" "=v,v,v,v")
+ (unspec:V2DF [(match_operand:DF 1 "general_operand" "d,R,K,v")
+ (match_operand:SI 2 "nonmemory_operand" "an,I,I,n")
+ (match_operand:V2DF 3 "register_operand" "0,0,0,0")]
+ UNSPEC_VEC_SET))]
+ "TARGET_VX
+ && (!CONST_INT_P (operands[2])
+ || UINTVAL (operands[2]) < GET_MODE_NUNITS (V2DFmode))"
+ "@
+ vlvgg\t%v0,%1,%Y2
+ vleg\t%v0,%1,%2
+ vleig\t%v0,%1,%2
+ #"
+ [(set_attr "op_type" "VRS,VRX,VRI,*")])
+
+(define_split
+ [(set (match_operand:V2DF 0 "register_operand" "")
+ (unspec:V2DF [(match_operand:DF 1 "register_operand" "")
+ (match_operand:SI 2 "const_int_operand" "")
+ (match_operand:V2DF 3 "register_operand" "")]
+ UNSPEC_VEC_SET))]
+ "TARGET_VX
+ && (UINTVAL (operands[2]) < GET_MODE_NUNITS (V2DFmode))
+ && reload_completed
+ && VECTOR_REGNO_P (REGNO (operands[1]))"
+ [(set (match_dup 0)
+ (vec_select:V2DF
+ (vec_concat:V4DF
+ (match_dup 1)
+ (match_dup 3))
+ (parallel [(const_int 0) (match_dup 4)])))]
+{
+ operands[1] = gen_rtx_REG (V2DFmode, REGNO (operands[1]));
+ if (UINTVAL (operands[2]) == 0)
+ operands[4] = GEN_INT (3);
+ else
+ {
+ std::swap (operands[1], operands[3]);
+ operands[4] = GEN_INT (2);
+ }
+})
+
; vlvgb, vlvgh, vlvgf, vlvgg
(define_insn "*vec_set<mode>_plus"
[(set (match_operand:V 0 "register_operand" "=v")
@@ -562,18 +627,66 @@
(define_insn "*vec_extract<mode>"
[(set (match_operand:<non_vec> 0 "nonimmediate_operand" "=d,R")
(vec_select:<non_vec>
- (match_operand:V 1 "nonmemory_operand" "v,v")
+ (match_operand:VI 1 "nonmemory_operand" "v,v")
(parallel
[(match_operand:SI 2 "nonmemory_operand" "an,I")])))]
"TARGET_VX"
{
if (CONST_INT_P (operands[2]))
- operands[2] = GEN_INT (UINTVAL (operands[2]) & (GET_MODE_NUNITS (<V:MODE>mode) - 1));
+ operands[2] = GEN_INT (UINTVAL (operands[2]) & (GET_MODE_NUNITS (<VI:MODE>mode) - 1));
if (which_alternative == 0)
return "vlgv<bhfgq>\t%0,%v1,%Y2";
return "vste<bhfgq>\t%v1,%0,%2";
}
- [(set_attr "op_type" "VRS,VRX")])
+ [(set_attr "op_type" "VRS,VRX")
+ (set_attr "mnemonic" "vlgv<bhfgq>,vste<bhfgq>")])
+
+(define_insn "*vec_extract<mode>"
+ [(set (match_operand:<non_vec> 0 "nonimmediate_operand" "=d,R,v")
+ (vec_select:<non_vec>
+ (match_operand:VF 1 "nonmemory_operand" "v,v,v")
+ (parallel
+ [(match_operand:SI 2 "nonmemory_operand" "an,I,n")])))]
+ "TARGET_VX"
+ {
+ if (CONST_INT_P (operands[2]))
+ operands[2] = GEN_INT (UINTVAL (operands[2]) & (GET_MODE_NUNITS (<VF:MODE>mode) - 1));
+ if (which_alternative == 0)
+ return "vlgv<bhfgq>\t%0,%v1,%Y2";
+ else if (which_alternative == 1)
+ return "vste<bhfgq>\t%v1,%0,%2";
+ else
+ return "#";
+ }
+ [(set_attr "op_type" "VRS,VRX,*")
+ (set_attr "mnemonic" "vlgv<bhfgq>,vste<bhfgq>,*")])
+
+(define_split
+ [(set (match_operand:<non_vec> 0 "register_operand" "")
+ (vec_select:<non_vec>
+ (match_operand:VF 1 "register_operand" "")
+ (parallel
+ [(match_operand:SI 2 "const_int_operand" "")])))]
+ "TARGET_VX && reload_completed && VECTOR_REGNO_P (REGNO (operands[0]))"
+ [(set (match_dup 0)
+ (vec_duplicate:VF
+ (vec_select:<non_vec>
+ (match_dup 1)
+ (parallel [(match_dup 2)]))))]
+{
+ unsigned HOST_WIDE_INT idx = UINTVAL (operands[2]) & (GET_MODE_NUNITS (<VF:MODE>mode) - 1);
+ if (idx == 0)
+ {
+ rtx dest = gen_rtx_REG (<VF:MODE>mode, REGNO (operands[0]));
+ emit_insn (gen_mov<VF:mode> (dest, operands[1]));
+ DONE;
+ }
+ else
+ {
+ operands[0] = gen_rtx_REG (<VF:MODE>mode, REGNO (operands[0]));
+ operands[2] = GEN_INT (idx);
+ }
+})
; vlgvb, vlgvh, vlgvf, vlgvg
(define_insn "*vec_extract<mode>_plus"
@@ -611,10 +724,10 @@
; Replicate from vector element
; vrepb, vreph, vrepf, vrepg
(define_insn "*vec_splat<mode>"
- [(set (match_operand:V_128_NOSINGLE 0 "register_operand" "=v")
- (vec_duplicate:V_128_NOSINGLE
+ [(set (match_operand:V 0 "register_operand" "=v")
+ (vec_duplicate:V
(vec_select:<non_vec>
- (match_operand:V_128_NOSINGLE 1 "register_operand" "v")
+ (match_operand:V 1 "register_operand" "v")
(parallel
[(match_operand:QI 2 "const_mask_operand" "C")]))))]
"TARGET_VX && UINTVAL (operands[2]) < GET_MODE_NUNITS (<MODE>mode)"
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 278f75f..db79783 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,47 @@
+2025-05-28 Jason Merrill <jason@redhat.com>
+
+ * module.cc (module_state::write_namespaces): Write
+ using-directives.
+ (module_state::read_namespaces): And read them.
+ * name-lookup.cc (add_using_namespace): Add overload. Build a
+ USING_DECL for modules.
+ (name_lookup::search_usings, name_lookup::queue_usings)
+ (using_directives_contain_std_p): Strip the USING_DECL.
+ * name-lookup.h: Declare it.
+ * parser.cc (cp_parser_import_declaration): Set MK_EXPORTING
+ for export import.
+
+2025-05-27 Iain Sandoe <iain@sandoe.co.uk>
+
+ * coroutines.cc (cp_coroutine_transform::build_ramp_function):
+ Replace TRUTH_AND_EXPR with TRUTH_ANDIF_EXPR in three places.
+
+2025-05-26 Tobias Burnus <tburnus@baylibre.com>
+
+ PR c++/120413
+ * semantics.cc (finish_omp_target_clauses_r): Handle
+ BIND_EXPR with empty BIND_EXPR_BLOCK.
+
+2025-05-26 Jason Merrill <jason@redhat.com>
+
+ * cp-tree.h: Declare tinst_dump_id.
+ * cp-objcp-common.cc (cp_register_dumps): Set it.
+ * pt.cc (push_tinst_level_loc): Dump it.
+ (reopen_tinst_level): Here too.
+ (tinst_complete_p): New.
+ (instantiate_pending_templates): Don't reopen_tinst_level for
+ already-complete instantiations.
+
+2025-05-26 Jason Merrill <jason@redhat.com>
+
+ * cp-tree.h (class cxx_dump_pretty_printer): New.
+ * error.cc (cxx_dump_pretty_printer): Ctor/dtor definitions.
+
+2025-05-25 Jason Merrill <jason@redhat.com>
+
+ * error.cc (dump_template_bindings): Correct skipping of
+ redundant bindings.
+
2025-05-23 Nathaniel Shead <nathanieloshead@gmail.com>
PR c++/120363
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc
index 44fb086..9062570 100644
--- a/gcc/cp/constraint.cc
+++ b/gcc/cp/constraint.cc
@@ -3100,6 +3100,9 @@ diagnose_trait_expr (tree expr, tree args)
case CPTK_IS_CONVERTIBLE:
inform (loc, " %qT is not convertible from %qE", t2, t1);
break;
+ case CPTK_IS_DESTRUCTIBLE:
+ inform (loc, " %qT is not destructible", t1);
+ break;
case CPTK_IS_EMPTY:
inform (loc, " %qT is not an empty class", t1);
break;
@@ -3145,6 +3148,9 @@ diagnose_trait_expr (tree expr, tree args)
case CPTK_IS_NOTHROW_CONVERTIBLE:
inform (loc, " %qT is not nothrow convertible from %qE", t2, t1);
break;
+ case CPTK_IS_NOTHROW_DESTRUCTIBLE:
+ inform (loc, " %qT is not nothrow destructible", t1);
+ break;
case CPTK_IS_NOTHROW_INVOCABLE:
if (!t2)
inform (loc, " %qT is not nothrow invocable", t1);
@@ -3194,6 +3200,9 @@ diagnose_trait_expr (tree expr, tree args)
case CPTK_IS_TRIVIALLY_COPYABLE:
inform (loc, " %qT is not trivially copyable", t1);
break;
+ case CPTK_IS_TRIVIALLY_DESTRUCTIBLE:
+ inform (loc, " %qT is not trivially destructible", t1);
+ break;
case CPTK_IS_UNBOUNDED_ARRAY:
inform (loc, " %qT is not an unbounded array", t1);
break;
diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc
index a620996..b1e555c 100644
--- a/gcc/cp/coroutines.cc
+++ b/gcc/cp/coroutines.cc
@@ -4944,7 +4944,7 @@ cp_coroutine_transform::build_ramp_function ()
tree frame_cleanup = push_stmt_list ();
tree do_fr_cleanup
= build1_loc (loc, TRUTH_NOT_EXPR, boolean_type_node, iarc_x);
- do_fr_cleanup = build2_loc (loc, TRUTH_AND_EXPR, boolean_type_node,
+ do_fr_cleanup = build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node,
coro_before_return, do_fr_cleanup);
r = build3 (COND_EXPR, void_type_node, do_fr_cleanup,
delete_frame_call, void_node);
@@ -5036,7 +5036,7 @@ cp_coroutine_transform::build_ramp_function ()
tree do_cleanup
= build1_loc (loc, TRUTH_NOT_EXPR, boolean_type_node, iarc_x);
do_cleanup
- = build2_loc (loc, TRUTH_AND_EXPR, boolean_type_node,
+ = build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node,
coro_before_return, do_cleanup);
r = build3_loc (loc, COND_EXPR, void_type_node, do_cleanup,
parm.fr_copy_dtor, void_node);
@@ -5096,7 +5096,7 @@ cp_coroutine_transform::build_ramp_function ()
tree promise_cleanup = push_stmt_list ();
tree do_cleanup
= build1_loc (loc, TRUTH_NOT_EXPR, boolean_type_node, iarc_x);
- do_cleanup = build2_loc (loc, TRUTH_AND_EXPR, boolean_type_node,
+ do_cleanup = build2_loc (loc, TRUTH_ANDIF_EXPR, boolean_type_node,
coro_before_return, do_cleanup);
r = build3 (COND_EXPR, void_type_node, do_cleanup,
promise_dtor, void_node);
diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc
index 8336d0b..7665b94 100644
--- a/gcc/cp/cp-objcp-common.cc
+++ b/gcc/cp/cp-objcp-common.cc
@@ -614,6 +614,8 @@ cp_register_dumps (gcc::dump_manager *dumps)
(".raw", "lang-raw", "lang-raw", DK_lang, OPTGROUP_NONE, false);
coro_dump_id = dumps->dump_register
(".coro", "lang-coro", "lang-coro", DK_lang, OPTGROUP_NONE, false);
+ tinst_dump_id = dumps->dump_register
+ (".tinst", "lang-tinst", "lang-tinst", DK_lang, OPTGROUP_NONE, false);
}
void
diff --git a/gcc/cp/cp-trait.def b/gcc/cp/cp-trait.def
index 6aaca13..9c7380d 100644
--- a/gcc/cp/cp-trait.def
+++ b/gcc/cp/cp-trait.def
@@ -71,6 +71,7 @@ DEFTRAIT_EXPR (IS_CLASS, "__is_class", 1)
DEFTRAIT_EXPR (IS_CONST, "__is_const", 1)
DEFTRAIT_EXPR (IS_CONSTRUCTIBLE, "__is_constructible", -1)
DEFTRAIT_EXPR (IS_CONVERTIBLE, "__is_convertible", 2)
+DEFTRAIT_EXPR (IS_DESTRUCTIBLE, "__is_destructible", 1)
DEFTRAIT_EXPR (IS_EMPTY, "__is_empty", 1)
DEFTRAIT_EXPR (IS_ENUM, "__is_enum", 1)
DEFTRAIT_EXPR (IS_FINAL, "__is_final", 1)
@@ -84,6 +85,7 @@ DEFTRAIT_EXPR (IS_MEMBER_POINTER, "__is_member_pointer", 1)
DEFTRAIT_EXPR (IS_NOTHROW_ASSIGNABLE, "__is_nothrow_assignable", 2)
DEFTRAIT_EXPR (IS_NOTHROW_CONSTRUCTIBLE, "__is_nothrow_constructible", -1)
DEFTRAIT_EXPR (IS_NOTHROW_CONVERTIBLE, "__is_nothrow_convertible", 2)
+DEFTRAIT_EXPR (IS_NOTHROW_DESTRUCTIBLE, "__is_nothrow_destructible", 1)
DEFTRAIT_EXPR (IS_NOTHROW_INVOCABLE, "__is_nothrow_invocable", -1)
DEFTRAIT_EXPR (IS_OBJECT, "__is_object", 1)
DEFTRAIT_EXPR (IS_POINTER_INTERCONVERTIBLE_BASE_OF, "__is_pointer_interconvertible_base_of", 2)
@@ -98,6 +100,7 @@ DEFTRAIT_EXPR (IS_TRIVIAL, "__is_trivial", 1)
DEFTRAIT_EXPR (IS_TRIVIALLY_ASSIGNABLE, "__is_trivially_assignable", 2)
DEFTRAIT_EXPR (IS_TRIVIALLY_CONSTRUCTIBLE, "__is_trivially_constructible", -1)
DEFTRAIT_EXPR (IS_TRIVIALLY_COPYABLE, "__is_trivially_copyable", 1)
+DEFTRAIT_EXPR (IS_TRIVIALLY_DESTRUCTIBLE, "__is_trivially_destructible", -1)
DEFTRAIT_EXPR (IS_UNBOUNDED_ARRAY, "__is_unbounded_array", 1)
DEFTRAIT_EXPR (IS_UNION, "__is_union", 1)
DEFTRAIT_EXPR (IS_VIRTUAL_BASE_OF, "__builtin_is_virtual_base_of", 2)
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 175ab28..19c0b45 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -6822,6 +6822,7 @@ extern int class_dump_id;
extern int module_dump_id;
extern int raw_dump_id;
extern int coro_dump_id;
+extern int tinst_dump_id;
/* Whether the current context is manifestly constant-evaluated.
Used by the constexpr machinery to control folding of
@@ -7322,6 +7323,29 @@ extern void cp_check_const_attributes (tree);
extern void maybe_propagate_warmth_attributes (tree, tree);
/* in error.cc */
+/* A class for pretty-printing to -flang-dump-XXX files. Used like
+
+ if (cxx_dump_pretty_printer pp {foo_dump_id})
+ {
+ pp_printf (&pp, ...);
+ }
+
+ If the dump is enabled, the pretty printer will open the dump file and
+ attach to it, and flush and close the file on destruction. */
+
+class cxx_dump_pretty_printer: public pretty_printer
+{
+ int phase;
+ FILE *outf;
+ dump_flags_t flags;
+
+public:
+ cxx_dump_pretty_printer (int phase);
+ operator bool() { return outf != nullptr; }
+ bool has_flag (dump_flags_t f) { return (flags & f); }
+ ~cxx_dump_pretty_printer ();
+};
+
extern const char *type_as_string (tree, int);
extern const char *type_as_string_translate (tree, int);
extern const char *decl_as_string (tree, int);
diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc
index 75bf7dc..d52dad3 100644
--- a/gcc/cp/error.cc
+++ b/gcc/cp/error.cc
@@ -193,6 +193,33 @@ class cxx_format_postprocessor : public format_postprocessor
deferred_printed_type m_type_b;
};
+/* Constructor and destructor for cxx_dump_pretty_printer, defined here to
+ avoid needing to move cxx_format_postprocessor into the header as well. */
+
+cxx_dump_pretty_printer::
+cxx_dump_pretty_printer (int phase)
+ : phase (phase)
+{
+ outf = dump_begin (phase, &flags);
+ if (outf)
+ {
+ pp_format_decoder (this) = cp_printer;
+ /* This gets deleted in ~pretty_printer. */
+ pp_format_postprocessor (this) = new cxx_format_postprocessor ();
+ set_output_stream (outf);
+ }
+}
+
+cxx_dump_pretty_printer::
+~cxx_dump_pretty_printer ()
+{
+ if (outf)
+ {
+ pp_flush (this);
+ dump_end (phase, outf);
+ }
+}
+
/* Return the in-scope template that's currently being parsed, or
NULL_TREE otherwise. */
@@ -541,12 +568,13 @@ dump_template_bindings (cxx_pretty_printer *pp, tree parms, tree args,
/* If the template argument repeats the template parameter (T = T),
skip the parameter.*/
if (arg && TREE_CODE (arg) == TEMPLATE_TYPE_PARM
- && TREE_CODE (parm_i) == TREE_LIST
- && TREE_CODE (TREE_VALUE (parm_i)) == TYPE_DECL
- && TREE_CODE (TREE_TYPE (TREE_VALUE (parm_i)))
- == TEMPLATE_TYPE_PARM
- && DECL_NAME (TREE_VALUE (parm_i))
- == DECL_NAME (TREE_CHAIN (arg)))
+ && arg == TYPE_MAIN_VARIANT (arg)
+ && TREE_CODE (parm_i) == TREE_LIST
+ && TREE_CODE (TREE_VALUE (parm_i)) == TYPE_DECL
+ && (TREE_CODE (TREE_TYPE (TREE_VALUE (parm_i)))
+ == TEMPLATE_TYPE_PARM)
+ && (DECL_NAME (TREE_VALUE (parm_i))
+ == DECL_NAME (TYPE_STUB_DECL (arg))))
continue;
semicolon_or_introducer ();
diff --git a/gcc/cp/method.cc b/gcc/cp/method.cc
index 092bae2..3a675d9 100644
--- a/gcc/cp/method.cc
+++ b/gcc/cp/method.cc
@@ -2330,6 +2330,19 @@ constructible_expr (tree to, tree from)
return expr;
}
+/* Return declval<T>().~T() treated as an unevaluated operand. */
+
+static tree
+destructible_expr (tree to)
+{
+ cp_unevaluated cp_uneval_guard;
+ int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
+ to = build_trait_object (to);
+ tree r = build_delete (input_location, TREE_TYPE (to), to,
+ sfk_complete_destructor, flags, 0, tf_none);
+ return r;
+}
+
/* Returns a tree iff TO is assignable (if CODE is MODIFY_EXPR) or
constructible (otherwise) from FROM, which is a single type for
assignment or a list of types for construction. */
@@ -2346,6 +2359,8 @@ is_xible_helper (enum tree_code code, tree to, tree from, bool trivial)
tree expr;
if (code == MODIFY_EXPR)
expr = assignable_expr (to, from);
+ else if (code == BIT_NOT_EXPR)
+ expr = destructible_expr (to);
else if (trivial && TREE_VEC_LENGTH (from) > 1
&& cxx_dialect < cxx20)
return error_mark_node; // only 0- and 1-argument ctors can be trivial
diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc
index 17c040d..ad2acaf 100644
--- a/gcc/cp/module.cc
+++ b/gcc/cp/module.cc
@@ -16865,11 +16865,15 @@ module_state::write_namespaces (elf_out *to, vec<depset *> spaces,
bytes_out sec (to);
sec.begin ();
+ hash_map<tree, unsigned> ns_map;
+
for (unsigned ix = 0; ix != num; ix++)
{
depset *b = spaces[ix];
tree ns = b->get_entity ();
+ ns_map.put (ns, ix);
+
/* This could be an anonymous namespace even for a named module,
since we can still emit no-linkage decls. */
gcc_checking_assert (TREE_CODE (ns) == NAMESPACE_DECL);
@@ -16911,6 +16915,31 @@ module_state::write_namespaces (elf_out *to, vec<depset *> spaces,
}
}
+ /* Now write exported using-directives, as a sequence of 1-origin indices in
+ the spaces array (not entity indices): First the using namespace, then the
+ used namespaces. And then a zero terminating the list. :: is
+ represented as index -1. */
+ auto emit_one_ns = [&](unsigned ix, tree ns) {
+ for (auto udir: NAMESPACE_LEVEL (ns)->using_directives)
+ {
+ if (TREE_CODE (udir) != USING_DECL || !DECL_MODULE_EXPORT_P (udir))
+ continue;
+ tree ns2 = USING_DECL_DECLS (udir);
+ dump() && dump ("Writing using-directive in %N for %N",
+ ns, ns2);
+ sec.u (ix);
+ sec.u (*ns_map.get (ns2) + 1);
+ }
+ };
+ emit_one_ns (-1, global_namespace);
+ for (unsigned ix = 0; ix != num; ix++)
+ {
+ depset *b = spaces[ix];
+ tree ns = b->get_entity ();
+ emit_one_ns (ix + 1, ns);
+ }
+ sec.u (0);
+
sec.end (to, to->name (MOD_SNAME_PFX ".nms"), crc_p);
dump.outdent ();
}
@@ -16929,6 +16958,8 @@ module_state::read_namespaces (unsigned num)
dump () && dump ("Reading namespaces");
dump.indent ();
+ tree *ns_map = XALLOCAVEC (tree, num);
+
for (unsigned ix = 0; ix != num; ix++)
{
unsigned entity_index = sec.u ();
@@ -16990,6 +17021,8 @@ module_state::read_namespaces (unsigned num)
DECL_ATTRIBUTES (inner)
= tree_cons (get_identifier ("abi_tag"), tags, DECL_ATTRIBUTES (inner));
+ ns_map[ix] = inner;
+
/* Install the namespace. */
(*entity_ary)[entity_lwm + entity_index] = inner;
if (DECL_MODULE_IMPORT_P (inner))
@@ -17004,6 +17037,44 @@ module_state::read_namespaces (unsigned num)
*slot = entity_lwm + entity_index;
}
}
+
+ /* Read the exported using-directives. */
+ while (unsigned ix = sec.u ())
+ {
+ tree ns;
+ if (ix == (unsigned)-1)
+ ns = global_namespace;
+ else
+ {
+ if (--ix >= num)
+ {
+ sec.set_overrun ();
+ break;
+ }
+ ns = ns_map [ix];
+ }
+ unsigned ix2 = sec.u ();
+ if (--ix2 >= num)
+ {
+ sec.set_overrun ();
+ break;
+ }
+ tree ns2 = ns_map [ix2];
+ if (directness)
+ {
+ dump() && dump ("Reading using-directive in %N for %N",
+ ns, ns2);
+ /* In an export import this will mark the using-directive as
+ exported, so it will be emitted again. */
+ add_using_namespace (ns, ns2);
+ }
+ else
+ /* Ignore using-directives from indirect imports, we only want them
+ from our own imports. */
+ dump() && dump ("Ignoring using-directive in %N for %N",
+ ns, ns2);
+ }
+
dump.outdent ();
if (!sec.end (from ()))
return false;
diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc
index 84b5e67..9aa7c16 100644
--- a/gcc/cp/name-lookup.cc
+++ b/gcc/cp/name-lookup.cc
@@ -1049,7 +1049,7 @@ name_lookup::search_usings (tree scope)
bool found = false;
if (vec<tree, va_gc> *usings = NAMESPACE_LEVEL (scope)->using_directives)
for (unsigned ix = usings->length (); ix--;)
- found |= search_qualified ((*usings)[ix], true);
+ found |= search_qualified (strip_using_decl ((*usings)[ix]), true);
/* Look in its inline children. */
if (vec<tree, va_gc> *inlinees = DECL_NAMESPACE_INLINEES (scope))
@@ -1121,7 +1121,7 @@ name_lookup::queue_usings (using_queue& queue, int depth, vec<tree, va_gc> *usin
{
if (usings)
for (unsigned ix = usings->length (); ix--;)
- queue_namespace (queue, depth, (*usings)[ix]);
+ queue_namespace (queue, depth, strip_using_decl ((*usings)[ix]));
}
/* Unqualified namespace lookup in SCOPE.
@@ -6868,7 +6868,7 @@ using_directives_contain_std_p (vec<tree, va_gc> *usings)
return false;
for (unsigned ix = usings->length (); ix--;)
- if ((*usings)[ix] == std_node)
+ if (strip_using_decl ((*usings)[ix]) == std_node)
return true;
return false;
@@ -8943,9 +8943,27 @@ add_using_namespace (vec<tree, va_gc> *&usings, tree target)
if ((*usings)[ix] == target)
return;
+ if (modules_p ())
+ {
+ tree u = build_lang_decl (USING_DECL, NULL_TREE, NULL_TREE);
+ USING_DECL_DECLS (u) = target;
+ DECL_MODULE_EXPORT_P (u) = module_exporting_p ();
+ DECL_MODULE_PURVIEW_P (u) = module_purview_p ();
+ target = u;
+ }
vec_safe_push (usings, target);
}
+/* Convenience overload for the above, taking the user as its first
+ parameter. */
+
+void
+add_using_namespace (tree ns, tree target)
+{
+ add_using_namespace (NAMESPACE_LEVEL (ns)->using_directives,
+ ORIGINAL_NAMESPACE (target));
+}
+
/* Tell the debug system of a using directive. */
static void
diff --git a/gcc/cp/name-lookup.h b/gcc/cp/name-lookup.h
index f1596c6..4216a51 100644
--- a/gcc/cp/name-lookup.h
+++ b/gcc/cp/name-lookup.h
@@ -462,6 +462,7 @@ extern cxx_binding *outer_binding (tree, cxx_binding *, bool);
extern void cp_emit_debug_info_for_using (tree, tree);
extern void finish_nonmember_using_decl (tree scope, tree name);
+extern void add_using_namespace (tree, tree);
extern void finish_using_directive (tree target, tree attribs);
void push_local_extern_decl_alias (tree decl);
extern tree pushdecl (tree, bool hiding = false);
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index 1fb9e7f..d9fc5f7 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -15827,7 +15827,13 @@ cp_parser_import_declaration (cp_parser *parser, module_parse mp_state,
" must not be from header inclusion");
}
+ auto mk = module_kind;
+ if (exporting)
+ module_kind |= MK_EXPORTING;
+
import_module (mod, token->location, exporting, attrs, parse_in);
+
+ module_kind = mk;
}
}
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 1973d25..c687fdc 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -11378,6 +11378,7 @@ limit_bad_template_recursion (tree decl)
static int tinst_depth;
extern int max_tinst_depth;
int depth_reached;
+int tinst_dump_id;
static GTY(()) struct tinst_level *last_error_tinst_level;
@@ -11430,6 +11431,40 @@ push_tinst_level_loc (tree tldcl, tree targs, location_t loc)
set_refcount_ptr (new_level->next, current_tinst_level);
set_refcount_ptr (current_tinst_level, new_level);
+ if (cxx_dump_pretty_printer pp {tinst_dump_id})
+ {
+#if __GNUC__ >= 10
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-diag"
+#endif
+ bool list_p = new_level->list_p ();
+ if (list_p && !pp.has_flag (TDF_DETAILS))
+ /* Skip non-instantiations unless -details. */;
+ else
+ {
+ if (tinst_depth == 0)
+ pp_newline (&pp);
+ if (loc && pp.has_flag (TDF_LINENO))
+ {
+ for (int i = 0; i < tinst_depth; ++i)
+ pp_space (&pp);
+ const expanded_location el = expand_location (loc);
+ pp_printf (&pp, "%s:%d:%d", el.file, el.line, el.column);
+ pp_newline (&pp);
+ }
+ for (int i = 0; i < tinst_depth; ++i)
+ pp_space (&pp);
+ if (list_p)
+ pp_printf (&pp, "S %S", new_level->get_node ());
+ else
+ pp_printf (&pp, "I %D", tldcl);
+ pp_newline (&pp);
+ }
+#if __GNUC__ >= 10
+#pragma GCC diagnostic pop
+#endif
+ }
+
++tinst_depth;
if (GATHER_STATISTICS && (tinst_depth > depth_reached))
depth_reached = tinst_depth;
@@ -11481,6 +11516,20 @@ pop_tinst_level (void)
--tinst_depth;
}
+/* True if the instantiation represented by LEVEL is complete. */
+
+static bool
+tinst_complete_p (struct tinst_level *level)
+{
+ gcc_assert (!level->list_p ());
+ tree node = level->get_node ();
+ if (TYPE_P (node))
+ return COMPLETE_TYPE_P (node);
+ else
+ return (DECL_TEMPLATE_INSTANTIATED (node)
+ || DECL_TEMPLATE_SPECIALIZATION (node));
+}
+
/* We're instantiating a deferred template; restore the template
instantiation context in which the instantiation was requested, which
is one step out from LEVEL. Return the corresponding DECL or TYPE. */
@@ -11499,6 +11548,38 @@ reopen_tinst_level (struct tinst_level *level)
if (current_tinst_level && !current_tinst_level->had_errors)
current_tinst_level->errors = errorcount+sorrycount;
+ if (cxx_dump_pretty_printer pp {tinst_dump_id})
+ {
+#if __GNUC__ >= 10
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-diag"
+#endif
+ /* Dump the reopened instantiation context. */
+ t = current_tinst_level;
+ if (!pp.has_flag (TDF_DETAILS))
+ /* Skip non-instantiations unless -details. */
+ while (t && t->list_p ())
+ t = t->next;
+ if (t)
+ {
+ static tree last_ctx = NULL_TREE;
+ tree ctx = t->get_node ();
+ if (ctx != last_ctx)
+ {
+ last_ctx = ctx;
+ pp_newline (&pp);
+ if (t->list_p ())
+ pp_printf (&pp, "RS %S", ctx);
+ else
+ pp_printf (&pp, "RI %D", ctx);
+ pp_newline (&pp);
+ }
+ }
+#if __GNUC__ >= 10
+#pragma GCC diagnostic pop
+#endif
+ }
+
tree decl = level->maybe_get_node ();
if (decl && modules_p ())
{
@@ -28068,14 +28149,16 @@ instantiate_pending_templates (int retries)
reconsider = 0;
while (*t)
{
- tree instantiation = reopen_tinst_level ((*t)->tinst);
- bool complete = false;
+ struct tinst_level *tinst = (*t)->tinst;
+ bool complete = tinst_complete_p (tinst);
- if (limit_bad_template_recursion (instantiation))
- /* Do nothing. */;
- else if (TYPE_P (instantiation))
+ if (!complete)
{
- if (!COMPLETE_TYPE_P (instantiation))
+ tree instantiation = reopen_tinst_level (tinst);
+
+ if (limit_bad_template_recursion (instantiation))
+ /* Do nothing. */;
+ else if (TYPE_P (instantiation))
{
instantiate_class_template (instantiation);
if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
@@ -28092,13 +28175,7 @@ instantiate_pending_templates (int retries)
if (COMPLETE_TYPE_P (instantiation))
reconsider = 1;
}
-
- complete = COMPLETE_TYPE_P (instantiation);
- }
- else
- {
- if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
- && !DECL_TEMPLATE_INSTANTIATED (instantiation))
+ else
{
instantiation
= instantiate_decl (instantiation,
@@ -28108,8 +28185,10 @@ instantiate_pending_templates (int retries)
reconsider = 1;
}
- complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
- || DECL_TEMPLATE_INSTANTIATED (instantiation));
+ complete = tinst_complete_p (tinst);
+
+ tinst_depth = 0;
+ set_refcount_ptr (current_tinst_level);
}
if (complete)
@@ -28126,8 +28205,6 @@ instantiate_pending_templates (int retries)
last = *t;
t = &(*t)->next;
}
- tinst_depth = 0;
- set_refcount_ptr (current_tinst_level);
}
last_pending_template = last;
}
diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc
index 43a0eab..241f273 100644
--- a/gcc/cp/semantics.cc
+++ b/gcc/cp/semantics.cc
@@ -10565,10 +10565,10 @@ finish_omp_target_clauses_r (tree *tp, int *walk_subtrees, void *ptr)
if (TREE_CODE (t) == BIND_EXPR)
{
- tree block = BIND_EXPR_BLOCK (t);
- for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var))
- if (!data->local_decls.contains (var))
- data->local_decls.add (var);
+ if (tree block = BIND_EXPR_BLOCK (t))
+ for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var))
+ if (!data->local_decls.contains (var))
+ data->local_decls.add (var);
return NULL_TREE;
}
@@ -13235,6 +13235,14 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
case CPTK_HAS_TRIVIAL_DESTRUCTOR:
type1 = strip_array_types (type1);
+ if (CLASS_TYPE_P (type1) && type_build_dtor_call (type1))
+ {
+ deferring_access_check_sentinel dacs (dk_no_check);
+ tree fn = get_dtor (type1, tf_none);
+ if (!fn && !seen_error ())
+ warning (0, "checking %qs for type %qT with a destructor that "
+ "cannot be called", "__has_trivial_destructor", type1);
+ }
return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
|| (CLASS_TYPE_P (type1)
&& TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
@@ -13290,6 +13298,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
case CPTK_IS_CONVERTIBLE:
return is_convertible (type1, type2);
+ case CPTK_IS_DESTRUCTIBLE:
+ return is_xible (BIT_NOT_EXPR, type1, NULL_TREE);
+
case CPTK_IS_EMPTY:
return NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1);
@@ -13329,6 +13340,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
case CPTK_IS_NOTHROW_CONVERTIBLE:
return is_nothrow_convertible (type1, type2);
+ case CPTK_IS_NOTHROW_DESTRUCTIBLE:
+ return is_nothrow_xible (BIT_NOT_EXPR, type1, NULL_TREE);
+
case CPTK_IS_NOTHROW_INVOCABLE:
return expr_noexcept_p (build_invoke (type1, type2, tf_none), tf_none);
@@ -13371,6 +13385,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
case CPTK_IS_TRIVIALLY_COPYABLE:
return trivially_copyable_p (type1);
+ case CPTK_IS_TRIVIALLY_DESTRUCTIBLE:
+ return is_trivially_xible (BIT_NOT_EXPR, type1, NULL_TREE);
+
case CPTK_IS_UNBOUNDED_ARRAY:
return array_of_unknown_bound_p (type1);
@@ -13543,6 +13560,9 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2)
case CPTK_HAS_NOTHROW_COPY:
case CPTK_HAS_TRIVIAL_COPY:
case CPTK_HAS_TRIVIAL_DESTRUCTOR:
+ case CPTK_IS_DESTRUCTIBLE:
+ case CPTK_IS_NOTHROW_DESTRUCTIBLE:
+ case CPTK_IS_TRIVIALLY_DESTRUCTIBLE:
if (!check_trait_type (type1))
return error_mark_node;
break;
diff --git a/gcc/diagnostic-format-html.cc b/gcc/diagnostic-format-html.cc
index 6bb1caf..f2b255b 100644
--- a/gcc/diagnostic-format-html.cc
+++ b/gcc/diagnostic-format-html.cc
@@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see
#include "config.h"
#define INCLUDE_MAP
+#define INCLUDE_STRING
#define INCLUDE_VECTOR
#include "system.h"
#include "coretypes.h"
@@ -36,6 +37,17 @@ along with GCC; see the file COPYING3. If not see
#include "pretty-print-urlifier.h"
#include "edit-context.h"
#include "intl.h"
+#include "xml.h"
+#include "xml-printer.h"
+#include "json.h"
+
+// struct html_generation_options
+
+html_generation_options::html_generation_options ()
+: m_css (true),
+ m_javascript (true)
+{
+}
namespace xml {
@@ -46,57 +58,6 @@ namespace xml {
# pragma GCC diagnostic ignored "-Wformat-diag"
#endif
-struct node
-{
- virtual ~node () {}
- virtual void write_as_xml (pretty_printer *pp,
- int depth, bool indent) const = 0;
- void dump (FILE *out) const;
- void DEBUG_FUNCTION dump () const { dump (stderr); }
-};
-
-struct text : public node
-{
- text (label_text str)
- : m_str (std::move (str))
- {}
-
- void write_as_xml (pretty_printer *pp,
- int depth, bool indent) const final override;
-
- label_text m_str;
-};
-
-struct node_with_children : public node
-{
- void add_child (std::unique_ptr<node> node);
- void add_text (label_text str);
-
- std::vector<std::unique_ptr<node>> m_children;
-};
-
-struct document : public node_with_children
-{
- void write_as_xml (pretty_printer *pp,
- int depth, bool indent) const final override;
-};
-
-struct element : public node_with_children
-{
- element (const char *kind, bool preserve_whitespace)
- : m_kind (kind),
- m_preserve_whitespace (preserve_whitespace)
- {}
-
- void write_as_xml (pretty_printer *pp,
- int depth, bool indent) const final override;
-
- void set_attr (const char *name, label_text value);
-
- const char *m_kind;
- bool m_preserve_whitespace;
- std::map<const char *, label_text> m_attributes;
-};
/* Implementation. */
@@ -146,9 +107,16 @@ node::dump (FILE *out) const
/* struct text : public node. */
void
-text::write_as_xml (pretty_printer *pp, int /*depth*/, bool /*indent*/) const
+text::write_as_xml (pretty_printer *pp, int depth, bool indent) const
{
- write_escaped_text (pp, m_str.get ());
+ if (indent)
+ {
+ for (int i = 0; i < depth; ++i)
+ pp_string (pp, " ");
+ }
+ write_escaped_text (pp, m_str.c_str ());
+ if (indent)
+ pp_newline (pp);
}
/* struct node_with_children : public node. */
@@ -161,9 +129,15 @@ node_with_children::add_child (std::unique_ptr<node> node)
}
void
-node_with_children::add_text (label_text str)
+node_with_children::add_text (std::string str)
{
- gcc_assert (str.get ());
+ // Consolidate runs of text
+ if (!m_children.empty ())
+ if (text *t = m_children.back ()->dyn_cast_text ())
+ {
+ t->m_str += std::move (str);
+ return;
+ }
add_child (std::make_unique <text> (std::move (str)));
}
@@ -177,6 +151,8 @@ document::write_as_xml (pretty_printer *pp, int depth, bool indent) const
pp_string (pp, "<!DOCTYPE html\n"
" PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
+ if (indent)
+ pp_newline (pp);
for (auto &iter : m_children)
iter->write_as_xml (pp, depth, indent);
}
@@ -188,48 +164,139 @@ element::write_as_xml (pretty_printer *pp, int depth, bool indent) const
{
if (indent)
{
- pp_newline (pp);
for (int i = 0; i < depth; ++i)
pp_string (pp, " ");
}
- if (m_preserve_whitespace)
- indent = false;
-
- pp_printf (pp, "<%s", m_kind);
- for (auto &attr : m_attributes)
+ pp_printf (pp, "<%s", m_kind.c_str ());
+ for (auto &key : m_key_insertion_order)
{
- pp_printf (pp, " %s=\"", attr.first);
- write_escaped_text (pp, attr.second.get ());
- pp_string (pp, "\"");
+ auto iter = m_attributes.find (key);
+ if (iter != m_attributes.end ())
+ {
+ pp_printf (pp, " %s=\"", key.c_str ());
+ write_escaped_text (pp, iter->second.c_str ());
+ pp_string (pp, "\"");
+ }
}
if (m_children.empty ())
- pp_string (pp, " />");
+ pp_string (pp, "/>");
else
{
+ const bool indent_children = m_preserve_whitespace ? false : indent;
pp_string (pp, ">");
+ if (indent_children)
+ pp_newline (pp);
for (auto &child : m_children)
- child->write_as_xml (pp, depth + 1, indent);
- if (indent)
+ child->write_as_xml (pp, depth + 1, indent_children);
+ if (indent_children)
{
- pp_newline (pp);
for (int i = 0; i < depth; ++i)
pp_string (pp, " ");
}
- pp_printf (pp, "</%s>", m_kind);
+ pp_printf (pp, "</%s>", m_kind.c_str ());
}
+
+ if (indent)
+ pp_newline (pp);
}
void
-element::set_attr (const char *name, label_text value)
+element::set_attr (const char *name, std::string value)
{
+ auto iter = m_attributes.find (name);
+ if (iter == m_attributes.end ())
+ m_key_insertion_order.push_back (name);
m_attributes[name] = std::move (value);
}
+// struct raw : public node
+
+void
+raw::write_as_xml (pretty_printer *pp,
+ int /*depth*/, bool /*indent*/) const
+{
+ pp_string (pp, m_xml_src.c_str ());
+}
+
#if __GNUC__ >= 10
# pragma GCC diagnostic pop
#endif
+// class printer
+
+printer::printer (element &insertion_point)
+{
+ m_open_tags.push_back (&insertion_point);
+}
+
+void
+printer::push_tag (std::string name,
+ bool preserve_whitespace)
+{
+ push_element
+ (std::make_unique<element> (std::move (name),
+ preserve_whitespace));
+}
+
+void
+printer::push_tag_with_class (std::string name, std::string class_,
+ bool preserve_whitespace)
+{
+ auto new_element
+ = std::make_unique<element> (std::move (name),
+ preserve_whitespace);
+ new_element->set_attr ("class", class_);
+ push_element (std::move (new_element));
+}
+
+void
+printer::pop_tag ()
+{
+ m_open_tags.pop_back ();
+}
+
+void
+printer::set_attr (const char *name, std::string value)
+{
+ m_open_tags.back ()->set_attr (name, value);
+}
+
+void
+printer::add_text (std::string text)
+{
+ element *parent = m_open_tags.back ();
+ parent->add_text (std::move (text));
+}
+
+void
+printer::add_raw (std::string text)
+{
+ element *parent = m_open_tags.back ();
+ parent->add_child (std::make_unique<xml::raw> (std::move (text)));
+}
+
+void
+printer::push_element (std::unique_ptr<element> new_element)
+{
+ element *parent = m_open_tags.back ();
+ m_open_tags.push_back (new_element.get ());
+ parent->add_child (std::move (new_element));
+}
+
+void
+printer::append (std::unique_ptr<node> new_node)
+{
+ element *parent = m_open_tags.back ();
+ parent->add_child (std::move (new_node));
+}
+
+element *
+printer::get_insertion_point () const
+{
+ return m_open_tags.back ();
+}
+
} // namespace xml
class html_builder;
@@ -284,7 +351,8 @@ public:
html_builder (diagnostic_context &context,
pretty_printer &pp,
- const line_maps *line_maps);
+ const line_maps *line_maps,
+ const html_generation_options &html_gen_opts);
void on_report_diagnostic (const diagnostic_info &diagnostic,
diagnostic_t orig_diag_kind,
@@ -310,14 +378,13 @@ public:
make_element_for_metadata (const diagnostic_metadata &metadata);
std::unique_ptr<xml::element>
- make_element_for_source (const diagnostic_info &diagnostic);
-
- std::unique_ptr<xml::element>
- make_element_for_path (const diagnostic_path &path);
-
- std::unique_ptr<xml::element>
make_element_for_patch (const diagnostic_info &diagnostic);
+ void add_focus_id (std::string focus_id)
+ {
+ m_ui_focus_ids.append_string (focus_id.c_str ());
+ }
+
private:
std::unique_ptr<xml::element>
make_element_for_diagnostic (const diagnostic_info &diagnostic,
@@ -330,14 +397,18 @@ private:
diagnostic_context &m_context;
pretty_printer *m_printer;
const line_maps *m_line_maps;
+ html_generation_options m_html_gen_opts;
std::unique_ptr<xml::document> m_document;
+ xml::element *m_head_element;
xml::element *m_diagnostics_element;
std::unique_ptr<xml::element> m_cur_diagnostic_element;
+ int m_next_diag_id; // for handing out unique IDs
+ json::array m_ui_focus_ids;
};
static std::unique_ptr<xml::element>
-make_div (label_text class_)
+make_div (std::string class_)
{
auto div = std::make_unique<xml::element> ("div", false);
div->set_attr ("class", std::move (class_));
@@ -345,7 +416,7 @@ make_div (label_text class_)
}
static std::unique_ptr<xml::element>
-make_span (label_text class_)
+make_span (std::string class_)
{
auto span = std::make_unique<xml::element> ("span", true);
span->set_attr ("class", std::move (class_));
@@ -400,45 +471,151 @@ diagnostic_html_format_buffer::flush ()
/* class html_builder. */
+/* Style information for writing out HTML paths.
+ Colors taken from https://www.patternfly.org/v3/styles/color-palette/ */
+
+static const char * const HTML_STYLE
+ = (" <style>\n"
+ " .linenum { color: white;\n"
+ " background-color: #0088ce;\n"
+ " white-space: pre;\n"
+ " border-right: 1px solid black; }\n"
+ " .ruler { color: red;\n"
+ " white-space: pre; }\n"
+ " .source { color: blue;\n"
+ " white-space: pre; }\n"
+ " .annotation { color: green;\n"
+ " white-space: pre; }\n"
+ " .linenum-gap { text-align: center;\n"
+ " border-top: 1px solid black;\n"
+ " border-right: 1px solid black;\n"
+ " background-color: #ededed; }\n"
+ " .source-gap { border-bottom: 1px dashed black;\n"
+ " border-top: 1px dashed black;\n"
+ " background-color: #ededed; }\n"
+ " .no-locus-event { font-family: monospace;\n"
+ " color: green;\n"
+ " white-space: pre; }\n"
+ " .funcname { font-weight: bold; }\n"
+ " .events-hdr { color: white;\n"
+ " background-color: #030303; }\n"
+ " .event-range { border: 1px solid black;\n"
+ " padding: 0px; }\n"
+ " .event-range-with-margin { border-spacing: 0; }\n"
+ " .locus { font-family: monospace;\n"
+ " border-spacing: 0px; }\n"
+ " .selected { color: white;\n"
+ " background-color: #0088ce; }\n"
+ " .stack-frame-with-margin { border-spacing: 0; }\n"
+ " .stack-frame { padding: 5px;\n"
+ " box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.5); }\n"
+ " .frame-funcname { text-align: right;\n"
+ " font-style: italic; } \n"
+ " </style>\n");
+
+/* A little JavaScript for ease of navigation.
+ Keys j/k move forward and backward cyclically through a list
+ of focus ids (written out in another <script> tag as the HTML
+ is flushed). */
+
+const char * const HTML_SCRIPT
+ = (" var current_focus_idx = 0;\n"
+ "\n"
+ " function get_focus_span (focus_idx)\n"
+ " {\n"
+ " const element_id = focus_ids[focus_idx];\n"
+ " return document.getElementById(element_id);\n"
+ " }\n"
+ " function unhighlight_current_focus_idx ()\n"
+ " {\n"
+ " get_focus_span (current_focus_idx).classList.remove ('selected');\n"
+ " }\n"
+ " function highlight_current_focus_idx ()\n"
+ " {\n"
+ " const el = get_focus_span (current_focus_idx);\n"
+ " el.classList.add ('selected');\n"
+ " // Center the element on the screen\n"
+ " const top_y = el.getBoundingClientRect ().top + window.pageYOffset;\n"
+ " const middle = top_y - (window.innerHeight / 2);\n"
+ " window.scrollTo (0, middle);\n"
+ " }\n"
+ " function select_prev_focus_idx ()\n"
+ " {\n"
+ " unhighlight_current_focus_idx ();\n"
+ " if (current_focus_idx > 0)\n"
+ " current_focus_idx -= 1;\n"
+ " else\n"
+ " current_focus_idx = focus_ids.length - 1;\n"
+ " highlight_current_focus_idx ();\n"
+ " }\n"
+ " function select_next_focus_idx ()\n"
+ " {\n"
+ " unhighlight_current_focus_idx ();\n"
+ " if (current_focus_idx < focus_ids.length - 1)\n"
+ " current_focus_idx += 1;\n"
+ " else\n"
+ " current_focus_idx = 0;\n"
+ " highlight_current_focus_idx ();\n"
+ " }\n"
+ " document.addEventListener('keydown', function (ev) {\n"
+ " if (ev.key == 'j')\n"
+ " select_next_focus_idx ();\n"
+ " else if (ev.key == 'k')\n"
+ " select_prev_focus_idx ();\n"
+ " });\n"
+ " highlight_current_focus_idx ();\n");
+
/* html_builder's ctor. */
html_builder::html_builder (diagnostic_context &context,
- pretty_printer &pp,
- const line_maps *line_maps)
+ pretty_printer &pp,
+ const line_maps *line_maps,
+ const html_generation_options &html_gen_opts)
: m_context (context),
m_printer (&pp),
- m_line_maps (line_maps)
+ m_line_maps (line_maps),
+ m_html_gen_opts (html_gen_opts),
+ m_head_element (nullptr),
+ m_diagnostics_element (nullptr),
+ m_next_diag_id (0)
{
gcc_assert (m_line_maps);
m_document = std::make_unique<xml::document> ();
{
auto html_element = std::make_unique<xml::element> ("html", false);
- html_element->set_attr
- ("xmlns",
- label_text::borrow ("http://www.w3.org/1999/xhtml"));
+ html_element->set_attr ("xmlns",
+ "http://www.w3.org/1999/xhtml");
+ xml::printer xp (*html_element.get ());
+ m_document->add_child (std::move (html_element));
+
{
+ xml::auto_print_element head (xp, "head");
+ m_head_element = xp.get_insertion_point ();
{
- auto head_element = std::make_unique<xml::element> ("head", false);
+ xml::auto_print_element title (xp, "title", true);
+ xp.add_text ("Title goes here");
+ }
+ if (m_html_gen_opts.m_css)
+ xp.add_raw (HTML_STYLE);
+ if (m_html_gen_opts.m_javascript)
{
- auto title_element = std::make_unique<xml::element> ("title", true);
- label_text title (label_text::borrow ("Title goes here")); // TODO
- title_element->add_text (std::move (title));
- head_element->add_child (std::move (title_element));
+ xp.push_tag ("script");
+ /* Escaping rules are different for HTML <script> elements,
+ so add the script "raw" for now. */
+ xp.add_raw (HTML_SCRIPT);
+ xp.pop_tag (); // script
}
- html_element->add_child (std::move (head_element));
+ }
- auto body_element = std::make_unique<xml::element> ("body", false);
- {
- auto diagnostics_element
- = make_div (label_text::borrow ("gcc-diagnostic-list"));
- m_diagnostics_element = diagnostics_element.get ();
- body_element->add_child (std::move (diagnostics_element));
- }
- html_element->add_child (std::move (body_element));
+ {
+ xml::auto_print_element body (xp, "body");
+ {
+ auto diagnostics_element = make_div ("gcc-diagnostic-list");
+ m_diagnostics_element = diagnostics_element.get ();
+ xp.append (std::move (diagnostics_element));
}
}
- m_document->add_child (std::move (html_element));
}
}
@@ -477,6 +654,45 @@ html_builder::on_report_diagnostic (const diagnostic_info &diagnostic,
}
}
+/* Custom subclass of html_label_writer.
+ Wrap labels within a <span> element, supplying them with event IDs.
+ Add the IDs to the list of focus IDs. */
+
+class html_path_label_writer : public html_label_writer
+{
+public:
+ html_path_label_writer (xml::printer &xp,
+ html_builder &builder,
+ const std::string &event_id_prefix)
+ : m_xp (xp),
+ m_html_builder (builder),
+ m_event_id_prefix (event_id_prefix),
+ m_next_event_idx (0)
+ {
+ }
+
+ void begin_label () final override
+ {
+ m_xp.push_tag_with_class ("span", "event", true);
+ pretty_printer pp;
+ pp_printf (&pp, "%s%i",
+ m_event_id_prefix.c_str (), m_next_event_idx++);
+ m_xp.set_attr ("id", pp_formatted_text (&pp));
+ m_html_builder.add_focus_id (pp_formatted_text (&pp));
+ }
+
+ void end_label () final override
+ {
+ m_xp.pop_tag (); // span
+ }
+
+private:
+ xml::printer &m_xp;
+ html_builder &m_html_builder;
+ const std::string &m_event_id_prefix;
+ int m_next_event_idx;
+};
+
std::unique_ptr<xml::element>
html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
diagnostic_t orig_diag_kind)
@@ -506,8 +722,7 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
pp_token_text *sub = as_a <pp_token_text *> (iter);
/* The value might be in the obstack, so we may need to
copy it. */
- insertion_element ().add_text
- (label_text::take (xstrdup (sub->m_value.get ())));
+ insertion_element ().add_text (sub->m_value.get ());
}
break;
@@ -518,14 +733,14 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
case pp_token::kind::begin_quote:
{
- insertion_element ().add_text (label_text::borrow (open_quote));
- push_element (make_span (label_text::borrow ("gcc-quoted-text")));
+ insertion_element ().add_text (open_quote);
+ push_element (make_span ("gcc-quoted-text"));
}
break;
case pp_token::kind::end_quote:
{
pop_element ();
- insertion_element ().add_text (label_text::borrow (close_quote));
+ insertion_element ().add_text (close_quote);
}
break;
@@ -533,7 +748,7 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
{
pp_token_begin_url *sub = as_a <pp_token_begin_url *> (iter);
auto anchor = std::make_unique<xml::element> ("a", true);
- anchor->set_attr ("href", std::move (sub->m_value));
+ anchor->set_attr ("href", sub->m_value.get ());
push_element (std::move (anchor));
}
break;
@@ -565,11 +780,24 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
std::vector<xml::element *> m_open_elements;
};
- auto diag_element = make_div (label_text::borrow ("gcc-diagnostic"));
+ auto diag_element = make_div ("gcc-diagnostic");
+
+ const int diag_idx = m_next_diag_id++;
+ std::string diag_id;
+ {
+ pretty_printer pp;
+ pp_printf (&pp, "gcc-diag-%i", diag_idx);
+ diag_id = pp_formatted_text (&pp);
+ }
+ diag_element->set_attr ("id", diag_id);
// TODO: might be nice to emulate the text output format, but colorize it
- auto message_span = make_span (label_text::borrow ("gcc-message"));
+ auto message_span = make_span ("gcc-message");
+ std::string message_span_id (diag_id + "-message");
+ message_span->set_attr ("id", message_span_id);
+ add_focus_id (message_span_id);
+
html_token_printer tok_printer (*this, *message_span.get ());
m_printer->set_token_printer (&tok_printer);
pp_output_formatted_text (m_printer, m_context.get_urlifier ());
@@ -579,7 +807,7 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
if (diagnostic.metadata)
{
- diag_element->add_text (label_text::borrow (" "));
+ diag_element->add_text (" ");
diag_element->add_child
(make_element_for_metadata (*diagnostic.metadata));
}
@@ -592,32 +820,47 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
label_text option_url = label_text::take
(m_context.make_option_url (diagnostic.option_id));
- diag_element->add_text (label_text::borrow (" "));
- auto option_span = make_span (label_text::borrow ("gcc-option"));
- option_span->add_text (label_text::borrow ("["));
+ diag_element->add_text (" ");
+ auto option_span = make_span ("gcc-option");
+ option_span->add_text ("[");
{
if (option_url.get ())
{
auto anchor = std::make_unique<xml::element> ("a", true);
- anchor->set_attr ("href", std::move (option_url));
- anchor->add_text (std::move (option_text));
+ anchor->set_attr ("href", option_url.get ());
+ anchor->add_text (option_text.get ());
option_span->add_child (std::move (anchor));
}
else
- option_span->add_text (std::move (option_text));
- option_span->add_text (label_text::borrow ("]"));
+ option_span->add_text (option_text.get ());
+ option_span->add_text ("]");
}
diag_element->add_child (std::move (option_span));
}
/* Source (and fix-it hints). */
- if (auto source_element = make_element_for_source (diagnostic))
- diag_element->add_child (std::move (source_element));
+ {
+ xml::printer xp (*diag_element);
+ m_context.m_last_location = UNKNOWN_LOCATION;
+ m_context.maybe_show_locus_as_html (*diagnostic.richloc,
+ m_context.m_source_printing,
+ diagnostic.kind,
+ xp,
+ nullptr,
+ nullptr);
+ }
/* Execution path. */
if (auto path = diagnostic.richloc->get_path ())
- if (auto path_element = make_element_for_path (*path))
- diag_element->add_child (std::move (path_element));
+ {
+ xml::printer xp (*diag_element);
+ std::string event_id_prefix (diag_id + "-event-");
+ html_path_label_writer event_label_writer (xp, *this,
+ event_id_prefix);
+ diagnostic_source_print_policy dspp (m_context);
+ print_path_as_html (xp, *path, m_context, &event_label_writer,
+ dspp);
+ }
if (auto patch_element = make_element_for_patch (diagnostic))
diag_element->add_child (std::move (patch_element));
@@ -626,61 +869,23 @@ html_builder::make_element_for_diagnostic (const diagnostic_info &diagnostic,
}
std::unique_ptr<xml::element>
-html_builder::make_element_for_source (const diagnostic_info &diagnostic)
-{
- // TODO: ideally we'd like to capture elements within the following:
- m_context.m_last_location = UNKNOWN_LOCATION;
- pp_clear_output_area (m_printer);
- diagnostic_show_locus (&m_context,
- m_context.m_source_printing,
- diagnostic.richloc, diagnostic.kind,
- m_printer);
- auto text = label_text::take (xstrdup (pp_formatted_text (m_printer)));
- pp_clear_output_area (m_printer);
-
- if (strlen (text.get ()) == 0)
- return nullptr;
-
- auto pre = std::make_unique<xml::element> ("pre", true);
- pre->set_attr ("class", label_text::borrow ("gcc-annotated-source"));
- pre->add_text (std::move (text));
- return pre;
-}
-
-std::unique_ptr<xml::element>
-html_builder::make_element_for_path (const diagnostic_path &path)
-{
- m_context.m_last_location = UNKNOWN_LOCATION;
- diagnostic_text_output_format text_format (m_context);
- pp_show_color (text_format.get_printer ()) = false;
- pp_buffer (text_format.get_printer ())->m_flush_p = false;
- // TODO: ideally we'd like to capture elements within the following:
- text_format.print_path (path);
- auto text = label_text::take
- (xstrdup (pp_formatted_text (text_format.get_printer ())));
-
- if (strlen (text.get ()) == 0)
- return nullptr;
-
- auto pre = std::make_unique<xml::element> ("pre", true);
- pre->set_attr ("class", label_text::borrow ("gcc-execution-path"));
- pre->add_text (std::move (text));
- return pre;
-}
-
-std::unique_ptr<xml::element>
html_builder::make_element_for_patch (const diagnostic_info &diagnostic)
{
edit_context ec (m_context.get_file_cache ());
ec.add_fixits (diagnostic.richloc);
if (char *diff = ec.generate_diff (true))
- if (strlen (diff) > 0)
- {
- auto element = std::make_unique<xml::element> ("pre", true);
- element->set_attr ("class", label_text::borrow ("gcc-generated-patch"));
- element->add_text (label_text::take (diff));
- return element;
- }
+ {
+ if (strlen (diff) > 0)
+ {
+ auto element = std::make_unique<xml::element> ("pre", true);
+ element->set_attr ("class", "gcc-generated-patch");
+ element->add_text (diff);
+ free (diff);
+ return element;
+ }
+ else
+ free (diff);
+ }
return nullptr;
}
@@ -688,22 +893,23 @@ std::unique_ptr<xml::element>
html_builder::make_metadata_element (label_text label,
label_text url)
{
- auto item = make_span (label_text::borrow ("gcc-metadata-item"));
- item->add_text (label_text::borrow ("["));
+ auto item = make_span ("gcc-metadata-item");
+ xml::printer xp (*item.get ());
+ xp.add_text ("[");
{
- auto anchor = std::make_unique<xml::element> ("a", true);
- anchor->set_attr ("href", std::move (url));
- anchor->add_child (std::make_unique<xml::text> (std::move (label)));
- item->add_child (std::move (anchor));
+ xp.push_tag ("a", true);
+ xp.set_attr ("href", url.get ());
+ xp.add_text (label.get ());
+ xp.pop_tag ();
}
- item->add_text (label_text::borrow ("]"));
+ xp.add_text ("]");
return item;
}
std::unique_ptr<xml::element>
html_builder::make_element_for_metadata (const diagnostic_metadata &metadata)
{
- auto span_metadata = make_span (label_text::borrow ("gcc-metadata"));
+ auto span_metadata = make_span ("gcc-metadata");
int cwe = metadata.get_cwe ();
if (cwe)
@@ -737,7 +943,7 @@ html_builder::emit_diagram (const diagnostic_diagram &/*diagram*/)
/* We must be within the emission of a top-level diagnostic. */
gcc_assert (m_cur_diagnostic_element);
- // TODO
+ // TODO: currently a no-op
}
/* Implementation of "end_group_cb" for HTML output. */
@@ -757,6 +963,20 @@ html_builder::end_group ()
void
html_builder::flush_to_file (FILE *outf)
{
+ if (m_html_gen_opts.m_javascript)
+ {
+ gcc_assert (m_head_element);
+ xml::printer xp (*m_head_element);
+ /* Add an initialization of the global js variable "focus_ids"
+ using the array of IDs we saved as we went. */
+ xp.push_tag ("script");
+ pretty_printer pp;
+ pp_string (&pp, "focus_ids = ");
+ m_ui_focus_ids.print (&pp, true);
+ pp_string (&pp, ";\n");
+ xp.add_raw (pp_formatted_text (&pp));
+ xp.pop_tag (); // script
+ }
auto top = m_document.get ();
top->dump (outf);
fprintf (outf, "\n");
@@ -842,9 +1062,10 @@ public:
protected:
html_output_format (diagnostic_context &context,
- const line_maps *line_maps)
+ const line_maps *line_maps,
+ const html_generation_options &html_gen_opts)
: diagnostic_output_format (context),
- m_builder (context, *get_printer (), line_maps),
+ m_builder (context, *get_printer (), line_maps, html_gen_opts),
m_buffer (nullptr)
{}
@@ -857,8 +1078,9 @@ class html_file_output_format : public html_output_format
public:
html_file_output_format (diagnostic_context &context,
const line_maps *line_maps,
+ const html_generation_options &html_gen_opts,
diagnostic_output_file output_file)
- : html_output_format (context, line_maps),
+ : html_output_format (context, line_maps, html_gen_opts),
m_output_file (std::move (output_file))
{
gcc_assert (m_output_file.get_open_file ());
@@ -922,11 +1144,13 @@ diagnostic_output_format_open_html_file (diagnostic_context &context,
std::unique_ptr<diagnostic_output_format>
make_html_sink (diagnostic_context &context,
const line_maps &line_maps,
+ const html_generation_options &html_gen_opts,
diagnostic_output_file output_file)
{
auto sink
= std::make_unique<html_file_output_format> (context,
&line_maps,
+ html_gen_opts,
std::move (output_file));
sink->update_printer ();
return sink;
@@ -945,8 +1169,12 @@ class test_html_diagnostic_context : public test_diagnostic_context
public:
test_html_diagnostic_context ()
{
+ html_generation_options html_gen_opts;
+ html_gen_opts.m_css = false;
+ html_gen_opts.m_javascript = false;
auto sink = std::make_unique<html_buffered_output_format> (*this,
- line_table);
+ line_table,
+ html_gen_opts);
sink->update_printer ();
m_format = sink.get (); // borrowed
@@ -968,8 +1196,9 @@ private:
{
public:
html_buffered_output_format (diagnostic_context &context,
- const line_maps *line_maps)
- : html_output_format (context, line_maps)
+ const line_maps *line_maps,
+ const html_generation_options &html_gen_opts)
+ : html_output_format (context, line_maps, html_gen_opts)
{
}
bool machine_readable_stderr_p () const final override
@@ -1009,12 +1238,12 @@ test_simple_log ()
" </head>\n"
" <body>\n"
" <div class=\"gcc-diagnostic-list\">\n"
- " <div class=\"gcc-diagnostic\">\n"
- " <span class=\"gcc-message\">this is a test: `<span class=\"gcc-quoted-text\">foo</span>&apos;</span>\n"
+ " <div class=\"gcc-diagnostic\" id=\"gcc-diag-0\">\n"
+ " <span class=\"gcc-message\" id=\"gcc-diag-0-message\">this is a test: `<span class=\"gcc-quoted-text\">foo</span>&apos;</span>\n"
" </div>\n"
" </div>\n"
" </body>\n"
- "</html>"));
+ "</html>\n"));
}
static void
@@ -1031,7 +1260,6 @@ test_metadata ()
element->write_as_xml (&pp, 0, true);
ASSERT_STREQ
(pp_formatted_text (&pp),
- "\n"
"<span class=\"gcc-metadata\">"
"<span class=\"gcc-metadata-item\">"
"["
@@ -1040,7 +1268,7 @@ test_metadata ()
"</a>"
"]"
"</span>"
- "</span>");
+ "</span>\n");
}
{
@@ -1053,7 +1281,6 @@ test_metadata ()
element->write_as_xml (&pp, 0, true);
ASSERT_STREQ
(pp_formatted_text (&pp),
- "\n"
"<span class=\"gcc-metadata\">"
"<span class=\"gcc-metadata-item\">"
"["
@@ -1062,10 +1289,71 @@ test_metadata ()
"</a>"
"]"
"</span>"
- "</span>");
+ "</span>\n");
}
}
+static void
+test_printer ()
+{
+ xml::element top ("top", false);
+ xml::printer xp (top);
+ xp.push_tag ("foo");
+ xp.add_text ("hello");
+ xp.push_tag ("bar");
+ xp.set_attr ("size", "3");
+ xp.set_attr ("color", "red");
+ xp.add_text ("world");
+ xp.push_tag ("baz");
+ xp.pop_tag ();
+ xp.pop_tag ();
+ xp.pop_tag ();
+
+ pretty_printer pp;
+ top.write_as_xml (&pp, 0, true);
+ ASSERT_STREQ
+ (pp_formatted_text (&pp),
+ "<top>\n"
+ " <foo>\n"
+ " hello\n"
+ " <bar size=\"3\" color=\"red\">\n"
+ " world\n"
+ " <baz/>\n"
+ " </bar>\n"
+ " </foo>\n"
+ "</top>\n");
+}
+
+// Verify that element attributes preserve insertion order.
+
+static void
+test_attribute_ordering ()
+{
+ xml::element top ("top", false);
+ xml::printer xp (top);
+ xp.push_tag ("chronological");
+ xp.set_attr ("maldon", "991");
+ xp.set_attr ("hastings", "1066");
+ xp.set_attr ("edgehill", "1642");
+ xp.set_attr ("naseby", "1645");
+ xp.pop_tag ();
+ xp.push_tag ("alphabetical");
+ xp.set_attr ("edgehill", "1642");
+ xp.set_attr ("hastings", "1066");
+ xp.set_attr ("maldon", "991");
+ xp.set_attr ("naseby", "1645");
+ xp.pop_tag ();
+
+ pretty_printer pp;
+ top.write_as_xml (&pp, 0, true);
+ ASSERT_STREQ
+ (pp_formatted_text (&pp),
+ "<top>\n"
+ " <chronological maldon=\"991\" hastings=\"1066\" edgehill=\"1642\" naseby=\"1645\"/>\n"
+ " <alphabetical edgehill=\"1642\" hastings=\"1066\" maldon=\"991\" naseby=\"1645\"/>\n"
+ "</top>\n");
+}
+
/* Run all of the selftests within this file. */
void
@@ -1074,6 +1362,8 @@ diagnostic_format_html_cc_tests ()
auto_fix_quotes fix_quotes;
test_simple_log ();
test_metadata ();
+ test_printer ();
+ test_attribute_ordering ();
}
} // namespace selftest
diff --git a/gcc/diagnostic-format-html.h b/gcc/diagnostic-format-html.h
index ff5edca..9ca43f2 100644
--- a/gcc/diagnostic-format-html.h
+++ b/gcc/diagnostic-format-html.h
@@ -24,6 +24,14 @@ along with GCC; see the file COPYING3. If not see
#include "diagnostic-format.h"
#include "diagnostic-output-file.h"
+struct html_generation_options
+{
+ html_generation_options ();
+
+ bool m_css;
+ bool m_javascript;
+};
+
extern diagnostic_output_file
diagnostic_output_format_open_html_file (diagnostic_context &context,
line_maps *line_maps,
@@ -32,6 +40,14 @@ diagnostic_output_format_open_html_file (diagnostic_context &context,
extern std::unique_ptr<diagnostic_output_format>
make_html_sink (diagnostic_context &context,
const line_maps &line_maps,
+ const html_generation_options &html_gen_opts,
diagnostic_output_file output_file);
+extern void
+print_path_as_html (xml::printer &xp,
+ const diagnostic_path &path,
+ diagnostic_context &dc,
+ html_label_writer *event_label_writer,
+ const diagnostic_source_print_policy &dspp);
+
#endif /* ! GCC_DIAGNOSTIC_FORMAT_HTML_H */
diff --git a/gcc/diagnostic-path-output.cc b/gcc/diagnostic-path-output.cc
new file mode 100644
index 0000000..4c17865
--- /dev/null
+++ b/gcc/diagnostic-path-output.cc
@@ -0,0 +1,2713 @@
+/* Printing paths through the code associated with a diagnostic.
+ Copyright (C) 2019-2025 Free Software Foundation, Inc.
+ Contributed by David Malcolm <dmalcolm@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#define INCLUDE_ALGORITHM
+#define INCLUDE_MAP
+#define INCLUDE_STRING
+#define INCLUDE_VECTOR
+#include "system.h"
+#include "coretypes.h"
+#include "diagnostic.h"
+#include "diagnostic-macro-unwinding.h"
+#include "intl.h"
+#include "diagnostic-path.h"
+#include "gcc-rich-location.h"
+#include "diagnostic-color.h"
+#include "diagnostic-event-id.h"
+#include "diagnostic-label-effects.h"
+#include "pretty-print-markup.h"
+#include "selftest.h"
+#include "selftest-diagnostic.h"
+#include "selftest-diagnostic-path.h"
+#include "text-art/theme.h"
+#include "diagnostic-format-text.h"
+#include "diagnostic-format-html.h"
+#include "xml.h"
+#include "xml-printer.h"
+
+/* Disable warnings about missing quoting in GCC diagnostics for the print
+ calls below. */
+#if __GNUC__ >= 10
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wformat-diag"
+#endif
+
+/* Anonymous namespace for path-printing code. */
+
+namespace {
+
+/* A bundle of state for printing a path. */
+
+class path_print_policy
+{
+public:
+ path_print_policy (const diagnostic_text_output_format &text_output)
+ : m_source_policy (text_output.get_context ())
+ {
+ }
+
+ path_print_policy (const diagnostic_context &dc)
+ : m_source_policy (dc)
+ {
+ }
+
+ text_art::theme *
+ get_diagram_theme () const
+ {
+ return m_source_policy.get_diagram_theme ();
+ }
+
+ const diagnostic_source_print_policy &
+ get_source_policy () const { return m_source_policy; }
+
+private:
+ diagnostic_source_print_policy m_source_policy;
+};
+
+/* Subclass of range_label for showing a particular event
+ when showing a consecutive run of events within a diagnostic_path as
+ labelled ranges within one gcc_rich_location. */
+
+class path_label : public range_label
+{
+ public:
+ path_label (const diagnostic_path &path,
+ const pretty_printer &ref_pp,
+ unsigned start_idx,
+ bool colorize,
+ bool allow_emojis)
+ : m_path (path),
+ m_ref_pp (ref_pp),
+ m_start_idx (start_idx), m_effects (*this),
+ m_colorize (colorize), m_allow_emojis (allow_emojis)
+ {}
+
+ label_text get_text (unsigned range_idx) const final override
+ {
+ unsigned event_idx = m_start_idx + range_idx;
+ const diagnostic_event &event = m_path.get_event (event_idx);
+
+ const diagnostic_event::meaning meaning (event.get_meaning ());
+
+ auto pp = m_ref_pp.clone ();
+ pp_show_color (pp.get ()) = m_colorize;
+ diagnostic_event_id_t event_id (event_idx);
+
+ pp_printf (pp.get (), "%@", &event_id);
+ pp_space (pp.get ());
+
+ if (meaning.m_verb == diagnostic_event::VERB_danger
+ && m_allow_emojis)
+ {
+ pp_unicode_character (pp.get (), 0x26A0); /* U+26A0 WARNING SIGN. */
+ /* Append U+FE0F VARIATION SELECTOR-16 to select the emoji
+ variation of the char. */
+ pp_unicode_character (pp.get (), 0xFE0F);
+ /* U+26A0 WARNING SIGN has East_Asian_Width == Neutral, but in its
+ emoji variant is printed (by vte at least) with a 2nd half
+ overlapping the next char. Hence we add two spaces here: a space
+ to be covered by this overlap, plus another space of padding. */
+ pp_string (pp.get (), " ");
+ }
+
+ event.print_desc (*pp.get ());
+
+ label_text result
+ = label_text::take (xstrdup (pp_formatted_text (pp.get ())));
+ return result;
+ }
+
+ const label_effects *get_effects (unsigned /*range_idx*/) const
+ {
+ return &m_effects;
+ }
+
+ private:
+ class path_label_effects : public label_effects
+ {
+ public:
+ path_label_effects (const path_label &path_label)
+ : m_path_label (path_label)
+ {
+ }
+ bool has_in_edge (unsigned range_idx) const final override
+ {
+ if (const diagnostic_event *prev_event
+ = m_path_label.get_prev_event (range_idx))
+ return prev_event->connect_to_next_event_p ();
+ return false;
+ }
+ bool has_out_edge (unsigned range_idx) const final override
+ {
+ const diagnostic_event &event = m_path_label.get_event (range_idx);
+ return event.connect_to_next_event_p ();
+ }
+
+ private:
+ const path_label &m_path_label;
+ };
+
+ const diagnostic_event &get_event (unsigned range_idx) const
+ {
+ unsigned event_idx = m_start_idx + range_idx;
+ return m_path.get_event (event_idx);
+ }
+
+ const diagnostic_event *get_prev_event (unsigned range_idx) const
+ {
+ if (m_start_idx + range_idx == 0)
+ return nullptr;
+ unsigned event_idx = m_start_idx + range_idx - 1;
+ return &m_path.get_event (event_idx);
+ }
+
+ const diagnostic_path &m_path;
+ const pretty_printer &m_ref_pp;
+ unsigned m_start_idx;
+ path_label_effects m_effects;
+ const bool m_colorize;
+ const bool m_allow_emojis;
+};
+
+/* Return true if E1 and E2 can be consolidated into the same run of events
+ when printing a diagnostic_path. */
+
+static bool
+can_consolidate_events (const diagnostic_path &path,
+ const diagnostic_event &e1,
+ unsigned ev1_idx,
+ const diagnostic_event &e2,
+ unsigned ev2_idx,
+ bool check_locations)
+{
+ if (e1.get_thread_id () != e2.get_thread_id ())
+ return false;
+
+ if (!path.same_function_p (ev1_idx, ev2_idx))
+ return false;
+
+ if (e1.get_stack_depth () != e2.get_stack_depth ())
+ return false;
+
+ if (check_locations)
+ {
+ location_t loc1 = e1.get_location ();
+ location_t loc2 = e2.get_location ();
+
+ if (loc1 < RESERVED_LOCATION_COUNT
+ || loc2 < RESERVED_LOCATION_COUNT)
+ return false;
+
+ /* Neither can be macro-based. */
+ if (linemap_location_from_macro_expansion_p (line_table, loc1))
+ return false;
+ if (linemap_location_from_macro_expansion_p (line_table, loc2))
+ return false;
+ }
+
+ /* Passed all the tests. */
+ return true;
+}
+
+struct event_range;
+struct path_summary;
+class thread_event_printer;
+
+/* A bundle of information about all of the events in a diagnostic_path
+ relating to a specific path, for use by path_summary. */
+
+class per_thread_summary
+{
+public:
+ per_thread_summary (const diagnostic_path &path,
+ const logical_location_manager &logical_loc_mgr,
+ label_text name, unsigned swimlane_idx)
+ : m_path (path),
+ m_logical_loc_mgr (logical_loc_mgr),
+ m_name (std::move (name)),
+ m_swimlane_idx (swimlane_idx),
+ m_last_event (nullptr),
+ m_min_depth (INT_MAX),
+ m_max_depth (INT_MIN)
+ {}
+
+ void update_depth_limits (int stack_depth)
+ {
+ if (stack_depth < m_min_depth)
+ m_min_depth = stack_depth;
+ if (stack_depth > m_max_depth)
+ m_max_depth = stack_depth;
+ }
+
+ const char *get_name () const { return m_name.get (); }
+ unsigned get_swimlane_index () const { return m_swimlane_idx; }
+
+ bool interprocedural_p () const;
+
+private:
+ friend struct path_summary;
+ friend class thread_event_printer;
+ friend struct event_range;
+
+ const diagnostic_path &m_path;
+ const logical_location_manager &m_logical_loc_mgr;
+
+ const label_text m_name;
+
+ /* The "swimlane index" is the order in which this per_thread_summary
+ was created, for use when printing the events. */
+ const unsigned m_swimlane_idx;
+
+ // The event ranges specific to this thread:
+ auto_vec<event_range *> m_event_ranges;
+
+ const diagnostic_event *m_last_event;
+
+ int m_min_depth;
+ int m_max_depth;
+};
+
+/* A stack frame for use in HTML output, holding child stack frames,
+ and event ranges. */
+
+struct stack_frame
+{
+ stack_frame (std::unique_ptr<stack_frame> parent,
+ logical_location logical_loc,
+ int stack_depth)
+ : m_parent (std::move (parent)),
+ m_logical_loc (logical_loc),
+ m_stack_depth (stack_depth)
+ {}
+
+ std::unique_ptr<stack_frame> m_parent;
+ logical_location m_logical_loc;
+ const int m_stack_depth;
+};
+
+/* Begin emitting content relating to a new stack frame within PARENT.
+ Allocated a new stack_frame and return it. */
+
+static std::unique_ptr<stack_frame>
+begin_html_stack_frame (xml::printer &xp,
+ std::unique_ptr<stack_frame> parent,
+ logical_location logical_loc,
+ int stack_depth,
+ const logical_location_manager *logical_loc_mgr)
+{
+ if (logical_loc)
+ {
+ gcc_assert (logical_loc_mgr);
+ xp.push_tag_with_class ("table", "stack-frame-with-margin", false);
+ xp.push_tag ("tr", false);
+ {
+ xp.push_tag_with_class ("td", "interprocmargin", false);
+ xp.set_attr ("style", "padding-left: 100px");
+ xp.pop_tag ();
+ }
+ xp.push_tag_with_class ("td", "stack-frame", false);
+ label_text funcname
+ = logical_loc_mgr->get_name_for_path_output (logical_loc);
+ if (funcname.get ())
+ {
+ xp.push_tag_with_class ("div", "frame-funcname", false);
+ xp.push_tag ("span", true);
+ xp.add_text (funcname.get ());
+ xp.pop_tag (); // span
+ xp.pop_tag (); // div
+ }
+ }
+ return std::make_unique<stack_frame> (std::move (parent),
+ logical_loc,
+ stack_depth);
+}
+
+/* Finish emitting content for FRAME and delete it.
+ Return parent. */
+
+static std::unique_ptr<stack_frame>
+end_html_stack_frame (xml::printer &xp,
+ std::unique_ptr<stack_frame> frame)
+{
+ auto parent = std::move (frame->m_parent);
+ if (frame->m_logical_loc)
+ {
+ xp.pop_tag (); // td
+ xp.pop_tag (); // tr
+ xp.pop_tag (); // table
+ }
+ return parent;
+}
+
+/* Append an HTML <div> element to XP containing an SVG arrow representing
+ a change in stack depth from OLD_DEPTH to NEW_DEPTH. */
+
+static void
+emit_svg_arrow (xml::printer &xp, int old_depth, int new_depth)
+{
+ const int pixels_per_depth = 100;
+ const int min_depth = MIN (old_depth, new_depth);
+ const int base_x = 20;
+ const int excess = 30;
+ const int last_x
+ = base_x + (old_depth - min_depth) * pixels_per_depth;
+ const int this_x
+ = base_x + (new_depth - min_depth) * pixels_per_depth;
+ pretty_printer tmp_pp;
+ pretty_printer *pp = &tmp_pp;
+ pp_printf (pp, "<div class=\"%s\">\n",
+ old_depth < new_depth
+ ? "between-ranges-call" : "between-ranges-return");
+ pp_printf (pp, " <svg height=\"30\" width=\"%i\">\n",
+ MAX (last_x, this_x) + excess);
+ pp_string
+ (pp,
+ " <defs>\n"
+ " <marker id=\"arrowhead\" markerWidth=\"10\" markerHeight=\"7\"\n"
+ " refX=\"0\" refY=\"3.5\" orient=\"auto\" stroke=\"#0088ce\" fill=\"#0088ce\">\n"
+ " <polygon points=\"0 0, 10 3.5, 0 7\"/>\n"
+ " </marker>\n"
+ " </defs>\n");
+ pp_printf (pp,
+ " <polyline points=\"%i,0 %i,10 %i,10 %i,20\"\n",
+ last_x, last_x, this_x, this_x);
+ pp_string
+ (pp,
+ " style=\"fill:none;stroke: #0088ce\"\n"
+ " marker-end=\"url(#arrowhead)\"/>\n"
+ " </svg>\n"
+ "</div>\n\n");
+ xp.add_raw (pp_formatted_text (pp));
+}
+
+/* A range of consecutive events within a diagnostic_path, all within the
+ same thread, and with the same fndecl and stack_depth, and which are suitable
+ to print with a single call to diagnostic_show_locus. */
+struct event_range
+{
+ /* A struct for tracking the mergability of labels on a particular
+ source line. In particular, track information about links between
+ labels to ensure that we only consolidate events involving links
+ that the source-printing code is able to handle (splitting them
+ otherwise). */
+ struct per_source_line_info
+ {
+ void init (int line)
+ {
+ m_line = line;
+ m_has_in_edge = false;
+ m_has_out_edge = false;
+ m_min_label_source_column = INT_MAX;
+ m_max_label_source_column = INT_MIN;
+ }
+
+ /* Return true if our source-printing/labelling/linking code can handle
+ the events already on this source line, *and* a new event at COLUMN. */
+ bool
+ can_add_label_for_event_p (bool has_in_edge,
+ const diagnostic_event *prev_event,
+ bool has_out_edge,
+ int column) const
+ {
+ /* Any existing in-edge has to be the left-most label on its
+ source line. */
+ if (m_has_in_edge && column < m_min_label_source_column)
+ return false;
+ /* Any existing out-edge has to be the right-most label on its
+ source line. */
+ if (m_has_out_edge && column > m_max_label_source_column)
+ return false;
+ /* Can't have more than one in-edge. */
+ if (m_has_in_edge && has_in_edge)
+ return false;
+ /* Can't have more than one out-edge. */
+ if (m_has_out_edge && has_out_edge)
+ return false;
+
+ if (has_in_edge)
+ {
+ /* Any new in-edge needs to be the left-most label on its
+ source line. */
+ if (column > m_min_label_source_column)
+ return false;
+
+ gcc_assert (prev_event);
+ const location_t prev_loc = prev_event->get_location ();
+ expanded_location prev_exploc
+ = linemap_client_expand_location_to_spelling_point
+ (line_table, prev_loc, LOCATION_ASPECT_CARET);
+ /* The destination in-edge's line number has to be <= the
+ source out-edge's line number (if any). */
+ if (prev_exploc.line >= m_line)
+ return false;
+ }
+
+ /* Any new out-edge needs to be the right-most label on its
+ source line. */
+ if (has_out_edge)
+ if (column < m_max_label_source_column)
+ return false;
+
+ /* All checks passed; we can add the new event at COLUMN. */
+ return true;
+ }
+
+ void
+ add_label_for_event (bool has_in_edge, bool has_out_edge, int column)
+ {
+ if (has_in_edge)
+ m_has_in_edge = true;
+ if (has_out_edge)
+ m_has_out_edge = true;
+ m_min_label_source_column = std::min (m_min_label_source_column, column);
+ m_max_label_source_column = std::max (m_max_label_source_column, column);
+ }
+
+ int m_line;
+ bool m_has_in_edge;
+ bool m_has_out_edge;
+ int m_min_label_source_column;
+ int m_max_label_source_column;
+ };
+
+ event_range (const diagnostic_path &path,
+ const pretty_printer &ref_pp,
+ unsigned start_idx,
+ const diagnostic_event &initial_event,
+ per_thread_summary &t,
+ bool show_event_links,
+ bool colorize_labels,
+ bool allow_emojis)
+ : m_path (path),
+ m_initial_event (initial_event),
+ m_logical_loc (initial_event.get_logical_location ()),
+ m_stack_depth (initial_event.get_stack_depth ()),
+ m_start_idx (start_idx), m_end_idx (start_idx),
+ m_path_label (path, ref_pp,
+ start_idx, colorize_labels, allow_emojis),
+ m_richloc (initial_event.get_location (), &m_path_label, nullptr),
+ m_thread_id (initial_event.get_thread_id ()),
+ m_per_thread_summary (t),
+ m_show_event_links (show_event_links)
+ {
+ if (m_show_event_links)
+ {
+ expanded_location exploc
+ = linemap_client_expand_location_to_spelling_point
+ (line_table, initial_event.get_location (), LOCATION_ASPECT_CARET);
+ per_source_line_info &source_line_info
+ = get_per_source_line_info (exploc.line);
+
+ const diagnostic_event *prev_thread_event = t.m_last_event;
+ const bool has_in_edge
+ = (prev_thread_event
+ ? prev_thread_event->connect_to_next_event_p ()
+ : false);
+ const bool has_out_edge = initial_event.connect_to_next_event_p ();
+
+ source_line_info.add_label_for_event
+ (has_in_edge, has_out_edge, exploc.column);
+ }
+ }
+
+ per_source_line_info &
+ get_per_source_line_info (int source_line)
+ {
+ bool existed = false;
+ per_source_line_info &result
+ = m_source_line_info_map.get_or_insert (source_line, &existed);
+ if (!existed)
+ result.init (source_line);
+ return result;
+ }
+
+ bool maybe_add_event (const path_print_policy &policy,
+ const diagnostic_event &new_ev,
+ unsigned new_ev_idx,
+ bool check_rich_locations)
+ {
+ if (!can_consolidate_events (m_path,
+ m_initial_event, m_start_idx,
+ new_ev, new_ev_idx,
+ check_rich_locations))
+ return false;
+
+ /* Verify compatibility of the new label and existing labels
+ with respect to the link-printing code. */
+ expanded_location exploc
+ = linemap_client_expand_location_to_spelling_point
+ (line_table, new_ev.get_location (), LOCATION_ASPECT_CARET);
+ per_source_line_info &source_line_info
+ = get_per_source_line_info (exploc.line);
+ const diagnostic_event *prev_event = nullptr;
+ if (new_ev_idx > 0)
+ prev_event = &m_path.get_event (new_ev_idx - 1);
+ const bool has_in_edge = (prev_event
+ ? prev_event->connect_to_next_event_p ()
+ : false);
+ const bool has_out_edge = new_ev.connect_to_next_event_p ();
+ if (m_show_event_links)
+ if (!source_line_info.can_add_label_for_event_p
+ (has_in_edge, prev_event,
+ has_out_edge, exploc.column))
+ return false;
+
+ /* Potentially verify that the locations are sufficiently close. */
+ if (check_rich_locations)
+ if (!m_richloc.add_location_if_nearby (policy.get_source_policy (),
+ new_ev.get_location (),
+ false, &m_path_label))
+ return false;
+
+ m_end_idx = new_ev_idx;
+ m_per_thread_summary.m_last_event = &new_ev;
+
+ if (m_show_event_links)
+ source_line_info.add_label_for_event
+ (has_in_edge, has_out_edge, exploc.column);
+
+ return true;
+ }
+
+ /* Print the events in this range to PP, typically as a single
+ call to diagnostic_show_locus. */
+
+ void print_as_text (pretty_printer &pp,
+ diagnostic_text_output_format &text_output,
+ diagnostic_source_effect_info *effect_info)
+ {
+ location_t initial_loc = m_initial_event.get_location ();
+
+ diagnostic_context &dc = text_output.get_context ();
+
+ /* Emit a span indicating the filename (and line/column) if the
+ line has changed relative to the last call to
+ diagnostic_show_locus. */
+ if (dc.m_source_printing.enabled)
+ {
+ expanded_location exploc
+ = linemap_client_expand_location_to_spelling_point
+ (line_table, initial_loc, LOCATION_ASPECT_CARET);
+ if (exploc.file != LOCATION_FILE (dc.m_last_location))
+ {
+ diagnostic_location_print_policy loc_policy (text_output);
+ loc_policy.print_text_span_start (dc, pp, exploc);
+ }
+ }
+
+ /* If we have an UNKNOWN_LOCATION (or BUILTINS_LOCATION) as the
+ primary location for an event, diagnostic_show_locus won't print
+ anything.
+
+ In particular the label for the event won't get printed.
+ Fail more gracefully in this case by showing the event
+ index and text, at no particular location. */
+ if (get_pure_location (initial_loc) <= BUILTINS_LOCATION)
+ {
+ for (unsigned i = m_start_idx; i <= m_end_idx; i++)
+ {
+ const diagnostic_event &iter_event = m_path.get_event (i);
+ diagnostic_event_id_t event_id (i);
+ pp_printf (&pp, " %@: ", &event_id);
+ iter_event.print_desc (pp);
+ pp_newline (&pp);
+ }
+ return;
+ }
+
+ /* Call diagnostic_show_locus to show the events using labels. */
+ diagnostic_show_locus (&dc, text_output.get_source_printing_options (),
+ &m_richloc, DK_DIAGNOSTIC_PATH, &pp,
+ effect_info);
+
+ /* If we have a macro expansion, show the expansion to the user. */
+ if (linemap_location_from_macro_expansion_p (line_table, initial_loc))
+ {
+ gcc_assert (m_start_idx == m_end_idx);
+ maybe_unwind_expanded_macro_loc (text_output, initial_loc);
+ }
+ }
+
+ /* Print the events in this range to XP, typically as a single
+ call to diagnostic_show_locus_as_html. */
+
+ void print_as_html (xml::printer &xp,
+ diagnostic_context &dc,
+ diagnostic_source_effect_info *effect_info,
+ html_label_writer *event_label_writer)
+ {
+ location_t initial_loc = m_initial_event.get_location ();
+
+ /* Emit a span indicating the filename (and line/column) if the
+ line has changed relative to the last call to
+ diagnostic_show_locus. */
+ if (dc.m_source_printing.enabled)
+ {
+ expanded_location exploc
+ = linemap_client_expand_location_to_spelling_point
+ (line_table, initial_loc, LOCATION_ASPECT_CARET);
+ if (exploc.file != LOCATION_FILE (dc.m_last_location))
+ {
+ diagnostic_location_print_policy loc_policy (dc);
+ loc_policy.print_html_span_start (dc, xp, exploc);
+ }
+ }
+
+ /* If we have an UNKNOWN_LOCATION (or BUILTINS_LOCATION) as the
+ primary location for an event, diagnostic_show_locus_as_html won't print
+ anything.
+
+ In particular the label for the event won't get printed.
+ Fail more gracefully in this case by showing the event
+ index and text, at no particular location. */
+ if (get_pure_location (initial_loc) <= BUILTINS_LOCATION)
+ {
+ for (unsigned i = m_start_idx; i <= m_end_idx; i++)
+ {
+ const diagnostic_event &iter_event = m_path.get_event (i);
+ diagnostic_event_id_t event_id (i);
+ pretty_printer pp;
+ pp_printf (&pp, " %@: ", &event_id);
+ iter_event.print_desc (pp);
+ if (event_label_writer)
+ event_label_writer->begin_label ();
+ xp.add_text (pp_formatted_text (&pp));
+ if (event_label_writer)
+ event_label_writer->end_label ();
+ }
+ return;
+ }
+
+ /* Call diagnostic_show_locus_as_html to show the source,
+ showing events using labels. */
+ diagnostic_show_locus_as_html (&dc, dc.m_source_printing,
+ &m_richloc, DK_DIAGNOSTIC_PATH, xp,
+ effect_info, event_label_writer);
+
+ // TODO: show macro expansions
+ }
+
+ const diagnostic_path &m_path;
+ const diagnostic_event &m_initial_event;
+ logical_location m_logical_loc;
+ int m_stack_depth;
+ unsigned m_start_idx;
+ unsigned m_end_idx;
+ path_label m_path_label;
+ gcc_rich_location m_richloc;
+ diagnostic_thread_id_t m_thread_id;
+ per_thread_summary &m_per_thread_summary;
+ hash_map<int_hash<int, -1, -2>,
+ per_source_line_info> m_source_line_info_map;
+ bool m_show_event_links;
+};
+
+/* A struct for grouping together the events in a diagnostic_path into
+ ranges of events, partitioned by thread and by stack frame (i.e. by fndecl
+ and stack depth). */
+
+struct path_summary
+{
+ path_summary (const path_print_policy &policy,
+ const pretty_printer &ref_pp,
+ const diagnostic_path &path,
+ bool check_rich_locations,
+ bool colorize = false,
+ bool show_event_links = true);
+
+ const logical_location_manager &get_logical_location_manager () const
+ {
+ return m_logical_loc_mgr;
+ }
+ unsigned get_num_ranges () const { return m_ranges.length (); }
+ bool multithreaded_p () const { return m_per_thread_summary.length () > 1; }
+
+ const per_thread_summary &get_events_for_thread_id (diagnostic_thread_id_t tid)
+ {
+ per_thread_summary **slot = m_thread_id_to_events.get (tid);
+ gcc_assert (slot);
+ gcc_assert (*slot);
+ return **slot;
+ }
+
+ const logical_location_manager &m_logical_loc_mgr;
+ auto_delete_vec <event_range> m_ranges;
+ auto_delete_vec <per_thread_summary> m_per_thread_summary;
+ hash_map<int_hash<diagnostic_thread_id_t, -1, -2>,
+ per_thread_summary *> m_thread_id_to_events;
+
+private:
+ per_thread_summary &
+ get_or_create_events_for_thread_id (const diagnostic_path &path,
+ diagnostic_thread_id_t tid)
+ {
+ if (per_thread_summary **slot = m_thread_id_to_events.get (tid))
+ return **slot;
+
+ const diagnostic_thread &thread = path.get_thread (tid);
+ per_thread_summary *pts
+ = new per_thread_summary (path,
+ m_logical_loc_mgr,
+ thread.get_name (false),
+ m_per_thread_summary.length ());
+ m_thread_id_to_events.put (tid, pts);
+ m_per_thread_summary.safe_push (pts);
+ return *pts;
+ }
+};
+
+/* Return true iff there is more than one stack frame used by the events
+ of this thread. */
+
+bool
+per_thread_summary::interprocedural_p () const
+{
+ if (m_event_ranges.is_empty ())
+ return false;
+ int first_stack_depth = m_event_ranges[0]->m_stack_depth;
+ for (auto range : m_event_ranges)
+ {
+ if (!m_path.same_function_p (m_event_ranges[0]->m_start_idx,
+ range->m_start_idx))
+ return true;
+ if (range->m_stack_depth != first_stack_depth)
+ return true;
+ }
+ return false;
+}
+
+/* path_summary's ctor. */
+
+path_summary::path_summary (const path_print_policy &policy,
+ const pretty_printer &ref_pp,
+ const diagnostic_path &path,
+ bool check_rich_locations,
+ bool colorize,
+ bool show_event_links)
+: m_logical_loc_mgr (path.get_logical_location_manager ())
+{
+ const unsigned num_events = path.num_events ();
+
+ event_range *cur_event_range = NULL;
+ for (unsigned idx = 0; idx < num_events; idx++)
+ {
+ const diagnostic_event &event = path.get_event (idx);
+ const diagnostic_thread_id_t thread_id = event.get_thread_id ();
+ per_thread_summary &pts
+ = get_or_create_events_for_thread_id (path, thread_id);
+
+ pts.update_depth_limits (event.get_stack_depth ());
+
+ if (cur_event_range)
+ if (cur_event_range->maybe_add_event (policy,
+ event,
+ idx, check_rich_locations))
+ continue;
+
+ auto theme = policy.get_diagram_theme ();
+ const bool allow_emojis = theme ? theme->emojis_p () : false;
+ cur_event_range = new event_range (path, ref_pp,
+ idx, event, pts,
+ show_event_links,
+ colorize,
+ allow_emojis);
+ m_ranges.safe_push (cur_event_range);
+ pts.m_event_ranges.safe_push (cur_event_range);
+ pts.m_last_event = &event;
+ }
+}
+
+/* Write SPACES to PP. */
+
+static void
+write_indent (pretty_printer *pp, int spaces)
+{
+ for (int i = 0; i < spaces; i++)
+ pp_space (pp);
+}
+
+static const int base_indent = 2;
+static const int per_frame_indent = 2;
+
+/* A bundle of state for printing event_range instances for a particular
+ thread. */
+
+class thread_event_printer
+{
+public:
+ thread_event_printer (const per_thread_summary &t, bool show_depths)
+ : m_per_thread_summary (t),
+ m_show_depths (show_depths),
+ m_cur_indent (base_indent),
+ m_vbar_column_for_depth (),
+ m_num_printed (0)
+ {
+ }
+
+ /* Get the previous event_range within this thread, if any. */
+ const event_range *get_any_prev_range () const
+ {
+ if (m_num_printed > 0)
+ return m_per_thread_summary.m_event_ranges[m_num_printed - 1];
+ else
+ return nullptr;
+ }
+
+ /* Get the next event_range within this thread, if any. */
+ const event_range *get_any_next_range () const
+ {
+ if (m_num_printed < m_per_thread_summary.m_event_ranges.length () - 1)
+ return m_per_thread_summary.m_event_ranges[m_num_printed + 1];
+ else
+ return nullptr;
+ }
+
+ void
+ print_swimlane_for_event_range_as_text (diagnostic_text_output_format &text_output,
+ pretty_printer *pp,
+ const logical_location_manager &logical_loc_mgr,
+ event_range *range,
+ diagnostic_source_effect_info *effect_info)
+ {
+ gcc_assert (pp);
+ const char *const line_color = "path";
+ const char *start_line_color
+ = colorize_start (pp_show_color (pp), line_color);
+ const char *end_line_color = colorize_stop (pp_show_color (pp));
+
+ text_art::ascii_theme fallback_theme;
+ text_art::theme *theme = text_output.get_diagram_theme ();
+ if (!theme)
+ theme = &fallback_theme;
+
+ cppchar_t depth_marker_char = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_DEPTH_MARKER);
+ /* e.g. "|". */
+
+ const bool interprocedural_p = m_per_thread_summary.interprocedural_p ();
+
+ write_indent (pp, m_cur_indent);
+ if (const event_range *prev_range = get_any_prev_range ())
+ {
+ if (range->m_stack_depth > prev_range->m_stack_depth)
+ {
+ gcc_assert (interprocedural_p);
+ /* Show pushed stack frame(s). */
+ cppchar_t left = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_PUSH_FRAME_LEFT);
+ cppchar_t middle = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_PUSH_FRAME_MIDDLE);
+ cppchar_t right = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_PUSH_FRAME_RIGHT);
+ /* e.g. "+--> ". */
+ pp_string (pp, start_line_color);
+ pp_unicode_character (pp, left);
+ pp_unicode_character (pp, middle);
+ pp_unicode_character (pp, middle);
+ pp_unicode_character (pp, right);
+ pp_space (pp);
+ pp_string (pp, end_line_color);
+ m_cur_indent += 5;
+ }
+ }
+ if (range->m_logical_loc)
+ {
+ label_text name
+ (logical_loc_mgr.get_name_for_path_output (range->m_logical_loc));
+ if (name.get ())
+ pp_printf (pp, "%qs: ", name.get ());
+ }
+ if (range->m_start_idx == range->m_end_idx)
+ pp_printf (pp, "event %i",
+ range->m_start_idx + 1);
+ else
+ pp_printf (pp, "events %i-%i",
+ range->m_start_idx + 1, range->m_end_idx + 1);
+ if (m_show_depths)
+ pp_printf (pp, " (depth %i)", range->m_stack_depth);
+ pp_newline (pp);
+
+ /* Print a run of events. */
+ if (interprocedural_p)
+ {
+ write_indent (pp, m_cur_indent + per_frame_indent);
+ pp_string (pp, start_line_color);
+ pp_unicode_character (pp, depth_marker_char);
+ pp_string (pp, end_line_color);
+ pp_newline (pp);
+
+ char *saved_prefix = pp_take_prefix (pp);
+ char *prefix;
+ {
+ pretty_printer tmp_pp;
+ write_indent (&tmp_pp, m_cur_indent + per_frame_indent);
+ pp_string (&tmp_pp, start_line_color);
+ pp_unicode_character (&tmp_pp, depth_marker_char);
+ pp_string (&tmp_pp, end_line_color);
+ prefix = xstrdup (pp_formatted_text (&tmp_pp));
+ }
+ pp_set_prefix (pp, prefix);
+ pp_prefixing_rule (pp) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
+ range->print_as_text (*pp, text_output, effect_info);
+ pp_set_prefix (pp, saved_prefix);
+
+ write_indent (pp, m_cur_indent + per_frame_indent);
+ pp_string (pp, start_line_color);
+ pp_unicode_character (pp, depth_marker_char);
+ pp_string (pp, end_line_color);
+ pp_newline (pp);
+ }
+ else
+ range->print_as_text (*pp, text_output, effect_info);
+
+ if (const event_range *next_range = get_any_next_range ())
+ {
+ if (range->m_stack_depth > next_range->m_stack_depth)
+ {
+ if (m_vbar_column_for_depth.get (next_range->m_stack_depth))
+ {
+ /* Show returning from stack frame(s), by printing
+ something like:
+ " |\n"
+ " <-------------+\n"
+ " |\n". */
+ gcc_assert (interprocedural_p);
+ cppchar_t left = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_POP_FRAMES_LEFT);
+ cppchar_t middle = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_POP_FRAMES_MIDDLE);
+ cppchar_t right = theme->get_cppchar
+ (text_art::theme::cell_kind::INTERPROCEDURAL_POP_FRAMES_RIGHT);
+ int vbar_for_next_frame
+ = *m_vbar_column_for_depth.get (next_range->m_stack_depth);
+
+ int indent_for_next_frame
+ = vbar_for_next_frame - per_frame_indent;
+ write_indent (pp, vbar_for_next_frame);
+ pp_string (pp, start_line_color);
+ pp_unicode_character (pp, left);
+ for (int i = indent_for_next_frame + per_frame_indent;
+ i < m_cur_indent + per_frame_indent - 1; i++)
+ pp_unicode_character (pp, middle);
+ pp_unicode_character (pp, right);
+ pp_string (pp, end_line_color);
+ pp_newline (pp);
+ m_cur_indent = indent_for_next_frame;
+
+ write_indent (pp, vbar_for_next_frame);
+ pp_string (pp, start_line_color);
+ pp_unicode_character (pp, depth_marker_char);
+ pp_string (pp, end_line_color);
+ pp_newline (pp);
+ }
+ else
+ {
+ /* Handle disjoint paths (e.g. a callback at some later
+ time). */
+ m_cur_indent = base_indent;
+ }
+ }
+ else if (range->m_stack_depth < next_range->m_stack_depth)
+ {
+ /* Prepare to show pushed stack frame. */
+ gcc_assert (interprocedural_p);
+ gcc_assert (range->m_stack_depth != EMPTY);
+ gcc_assert (range->m_stack_depth != DELETED);
+ m_vbar_column_for_depth.put (range->m_stack_depth,
+ m_cur_indent + per_frame_indent);
+ m_cur_indent += per_frame_indent;
+ }
+ }
+
+ m_num_printed++;
+ }
+
+ void
+ print_swimlane_for_event_range_as_html (diagnostic_context &dc,
+ xml::printer &xp,
+ html_label_writer *event_label_writer,
+ event_range *range,
+ diagnostic_source_effect_info *effect_info)
+ {
+ range->print_as_html (xp, dc, effect_info, event_label_writer);
+ m_num_printed++;
+ }
+
+ int get_cur_indent () const { return m_cur_indent; }
+
+private:
+ const per_thread_summary &m_per_thread_summary;
+ bool m_show_depths;
+
+ /* Print the ranges. */
+ int m_cur_indent;
+
+ /* Keep track of column numbers of existing '|' characters for
+ stack depths we've already printed. */
+ static const int EMPTY = -1;
+ static const int DELETED = -2;
+ typedef int_hash <int, EMPTY, DELETED> vbar_hash;
+ hash_map <vbar_hash, int> m_vbar_column_for_depth;
+
+ /* How many event ranges within this swimlane have we printed.
+ This is the index of the next event_range to print. */
+ unsigned m_num_printed;
+};
+
+/* Print path_summary PS to TEXT_OUTPUT, giving an overview of the
+ interprocedural calls and returns.
+
+ Print the event descriptions in a nested form, printing the event
+ descriptions within calls to diagnostic_show_locus, using labels to
+ show the events:
+
+ 'foo' (events 1-2)
+ | NN |
+ | |
+ +--> 'bar' (events 3-4)
+ | NN |
+ | |
+ +--> 'baz' (events 5-6)
+ | NN |
+ | |
+ <------------ +
+ |
+ 'foo' (events 7-8)
+ | NN |
+ | |
+ +--> 'bar' (events 9-10)
+ | NN |
+ | |
+ +--> 'baz' (events 11-12)
+ | NN |
+ | |
+
+ If SHOW_DEPTHS is true, append " (depth N)" to the header of each run
+ of events.
+
+ For events with UNKNOWN_LOCATION, print a summary of each the event. */
+
+static void
+print_path_summary_as_text (const path_summary &ps,
+ diagnostic_text_output_format &text_output,
+ bool show_depths)
+{
+ pretty_printer *const pp = text_output.get_printer ();
+
+ std::vector<thread_event_printer> thread_event_printers;
+ for (auto t : ps.m_per_thread_summary)
+ thread_event_printers.push_back (thread_event_printer (*t, show_depths));
+
+ unsigned i;
+ event_range *range;
+ int last_out_edge_column = -1;
+ FOR_EACH_VEC_ELT (ps.m_ranges, i, range)
+ {
+ const int swimlane_idx
+ = range->m_per_thread_summary.get_swimlane_index ();
+ if (ps.multithreaded_p ())
+ if (i == 0 || ps.m_ranges[i - 1]->m_thread_id != range->m_thread_id)
+ {
+ if (i > 0)
+ pp_newline (pp);
+ pp_printf (pp, "Thread: %qs",
+ range->m_per_thread_summary.get_name ());
+ pp_newline (pp);
+ }
+ thread_event_printer &tep = thread_event_printers[swimlane_idx];
+ /* Wire up any trailing out-edge from previous range to leading in-edge
+ of this range. */
+ diagnostic_source_effect_info effect_info;
+ effect_info.m_leading_in_edge_column = last_out_edge_column;
+ tep.print_swimlane_for_event_range_as_text
+ (text_output, pp,
+ ps.get_logical_location_manager (),
+ range, &effect_info);
+ last_out_edge_column = effect_info.m_trailing_out_edge_column;
+ }
+}
+
+/* Print PS as HTML to XP, using DC and, if non-null EVENT_LABEL_WRITER. */
+
+static void
+print_path_summary_as_html (const path_summary &ps,
+ diagnostic_context &dc,
+ xml::printer &xp,
+ html_label_writer *event_label_writer,
+ bool show_depths)
+{
+ std::vector<thread_event_printer> thread_event_printers;
+ for (auto t : ps.m_per_thread_summary)
+ thread_event_printers.push_back (thread_event_printer (*t, show_depths));
+
+ const logical_location_manager *logical_loc_mgr
+ = dc.get_logical_location_manager ();
+
+ xp.push_tag_with_class ("div", "event-ranges", false);
+
+ /* Group the ranges into stack frames. */
+ std::unique_ptr<stack_frame> curr_frame;
+ unsigned i;
+ event_range *range;
+ int last_out_edge_column = -1;
+ FOR_EACH_VEC_ELT (ps.m_ranges, i, range)
+ {
+ const int swimlane_idx
+ = range->m_per_thread_summary.get_swimlane_index ();
+
+ const logical_location this_logical_loc = range->m_logical_loc;
+ const int this_depth = range->m_stack_depth;
+ if (curr_frame)
+ {
+ int old_stack_depth = curr_frame->m_stack_depth;
+ if (this_depth > curr_frame->m_stack_depth)
+ {
+ emit_svg_arrow (xp, old_stack_depth, this_depth);
+ curr_frame
+ = begin_html_stack_frame (xp,
+ std::move (curr_frame),
+ range->m_logical_loc,
+ range->m_stack_depth,
+ logical_loc_mgr);
+ }
+ else
+ {
+ while (this_depth < curr_frame->m_stack_depth
+ || this_logical_loc != curr_frame->m_logical_loc)
+ {
+ curr_frame = end_html_stack_frame (xp, std::move (curr_frame));
+ if (curr_frame == NULL)
+ {
+ curr_frame
+ = begin_html_stack_frame (xp,
+ nullptr,
+ range->m_logical_loc,
+ range->m_stack_depth,
+ logical_loc_mgr);
+ break;
+ }
+ }
+ emit_svg_arrow (xp, old_stack_depth, this_depth);
+ }
+ }
+ else
+ {
+ curr_frame = begin_html_stack_frame (xp,
+ NULL,
+ range->m_logical_loc,
+ range->m_stack_depth,
+ logical_loc_mgr);
+ }
+
+ xp.push_tag_with_class ("table", "event-range-with-margin", false);
+ xp.push_tag ("tr", false);
+ xp.push_tag_with_class ("td", "event-range", false);
+ xp.push_tag_with_class ("div", "events-hdr", true);
+ if (range->m_logical_loc)
+ {
+ gcc_assert (logical_loc_mgr);
+ label_text funcname
+ = logical_loc_mgr->get_name_for_path_output (range->m_logical_loc);
+ if (funcname.get ())
+ {
+ xp.push_tag_with_class ("span", "funcname", true);
+ xp.add_text (funcname.get ());
+ xp.pop_tag (); //span
+ xp.add_text (": ");
+ }
+ }
+ {
+ xp.push_tag_with_class ("span", "event-ids", true);
+ pretty_printer pp;
+ if (range->m_start_idx == range->m_end_idx)
+ pp_printf (&pp, "event %i",
+ range->m_start_idx + 1);
+ else
+ pp_printf (&pp, "events %i-%i",
+ range->m_start_idx + 1, range->m_end_idx + 1);
+ xp.add_text (pp_formatted_text (&pp));
+ xp.pop_tag (); // span
+ }
+ if (show_depths)
+ {
+ xp.add_text (" ");
+ xp.push_tag_with_class ("span", "depth", true);
+ pretty_printer pp;
+ pp_printf (&pp, "(depth %i)", range->m_stack_depth);
+ xp.add_text (pp_formatted_text (&pp));
+ xp.pop_tag (); //span
+ }
+ xp.pop_tag (); // div
+
+ /* Print a run of events. */
+ thread_event_printer &tep = thread_event_printers[swimlane_idx];
+ /* Wire up any trailing out-edge from previous range to leading in-edge
+ of this range. */
+ diagnostic_source_effect_info effect_info;
+ effect_info.m_leading_in_edge_column = last_out_edge_column;
+ tep.print_swimlane_for_event_range_as_html (dc, xp, event_label_writer,
+ range, &effect_info);
+ last_out_edge_column = effect_info.m_trailing_out_edge_column;
+
+ xp.pop_tag (); // td
+ xp.pop_tag (); // tr
+ xp.pop_tag (); // table
+ }
+
+ /* Close outstanding frames. */
+ while (curr_frame)
+ curr_frame = end_html_stack_frame (xp, std::move (curr_frame));
+
+ xp.pop_tag (); // div
+}
+
+} /* end of anonymous namespace for path-printing code. */
+
+class element_event_desc : public pp_element
+{
+public:
+ element_event_desc (const diagnostic_event &event)
+ : m_event (event)
+ {
+ }
+
+ void add_to_phase_2 (pp_markup::context &ctxt) final override
+ {
+ auto pp = ctxt.m_pp.clone ();
+ m_event.print_desc (*pp.get ());
+ pp_string (&ctxt.m_pp, pp_formatted_text (pp.get ()));
+ }
+
+private:
+ const diagnostic_event &m_event;
+};
+
+/* Print PATH according to the context's path_format. */
+
+void
+diagnostic_text_output_format::print_path (const diagnostic_path &path)
+{
+ const unsigned num_events = path.num_events ();
+
+ switch (get_context ().get_path_format ())
+ {
+ case DPF_NONE:
+ /* Do nothing. */
+ return;
+
+ case DPF_SEPARATE_EVENTS:
+ {
+ /* A note per event. */
+ auto &logical_loc_mgr = path.get_logical_location_manager ();
+ for (unsigned i = 0; i < num_events; i++)
+ {
+ const diagnostic_event &event = path.get_event (i);
+ element_event_desc e_event_desc (event);
+ diagnostic_event_id_t event_id (i);
+ if (get_context ().show_path_depths_p ())
+ {
+ int stack_depth = event.get_stack_depth ();
+ /* -fdiagnostics-path-format=separate-events doesn't print
+ fndecl information, so with -fdiagnostics-show-path-depths
+ print the fndecls too, if any. */
+ if (logical_location logical_loc
+ = event.get_logical_location ())
+ {
+ label_text name
+ (logical_loc_mgr.get_name_for_path_output (logical_loc));
+ inform (event.get_location (),
+ "%@ %e (fndecl %qs, depth %i)",
+ &event_id, &e_event_desc,
+ name.get (), stack_depth);
+ }
+ else
+ inform (event.get_location (),
+ "%@ %e (depth %i)",
+ &event_id, &e_event_desc,
+ stack_depth);
+ }
+ else
+ inform (event.get_location (),
+ "%@ %e", &event_id, &e_event_desc);
+ }
+ }
+ break;
+
+ case DPF_INLINE_EVENTS:
+ {
+ /* Consolidate related events. */
+ path_print_policy policy (*this);
+ pretty_printer *const pp = get_printer ();
+ const bool check_rich_locations = true;
+ const bool colorize = pp_show_color (pp);
+ const bool show_event_links = m_source_printing.show_event_links_p;
+ path_summary summary (policy,
+ *pp,
+ path,
+ check_rich_locations,
+ colorize,
+ show_event_links);
+ char *saved_prefix = pp_take_prefix (pp);
+ pp_set_prefix (pp, NULL);
+ print_path_summary_as_text (summary, *this,
+ get_context ().show_path_depths_p ());
+ pp_flush (pp);
+ pp_set_prefix (pp, saved_prefix);
+ }
+ break;
+ }
+}
+
+/* Print PATH as HTML to XP, using DC and DSPP for settings.
+ If non-null, use EVENT_LABEL_WRITER when writing events. */
+
+void
+print_path_as_html (xml::printer &xp,
+ const diagnostic_path &path,
+ diagnostic_context &dc,
+ html_label_writer *event_label_writer,
+ const diagnostic_source_print_policy &dspp)
+{
+ path_print_policy policy (dc);
+ const bool check_rich_locations = true;
+ const bool colorize = false;
+ const diagnostic_source_printing_options &source_printing_opts
+ = dspp.get_options ();
+ const bool show_event_links = source_printing_opts.show_event_links_p;
+ path_summary summary (policy,
+ *dc.get_reference_printer (),
+ path,
+ check_rich_locations,
+ colorize,
+ show_event_links);
+ print_path_summary_as_html (summary, dc, xp, event_label_writer,
+ dc.show_path_depths_p ());
+}
+
+#if CHECKING_P
+
+namespace selftest {
+
+/* Return true iff all events in PATH have locations for which column data
+ is available, so that selftests that require precise string output can
+ bail out for awkward line_table cases. */
+
+static bool
+path_events_have_column_data_p (const diagnostic_path &path)
+{
+ for (unsigned idx = 0; idx < path.num_events (); idx++)
+ {
+ location_t event_loc = path.get_event (idx).get_location ();
+ if (line_table->get_pure_location (event_loc)
+ > LINE_MAP_MAX_LOCATION_WITH_COLS)
+ return false;
+ if (line_table->get_start (event_loc) > LINE_MAP_MAX_LOCATION_WITH_COLS)
+ return false;
+ if (line_table->get_finish (event_loc) > LINE_MAP_MAX_LOCATION_WITH_COLS)
+ return false;
+ }
+ return true;
+}
+
+/* Verify that empty paths are handled gracefully. */
+
+static void
+test_empty_path (pretty_printer *event_pp)
+{
+ test_diagnostic_path path (event_pp);
+ ASSERT_FALSE (path.interprocedural_p ());
+
+ test_diagnostic_context dc;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ ASSERT_EQ (summary.get_num_ranges (), 0);
+
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ ("",
+ pp_formatted_text (text_output.get_printer ()));
+}
+
+/* Verify that print_path_summary works on a purely intraprocedural path. */
+
+static void
+test_intraprocedural_path (pretty_printer *event_pp)
+{
+ test_diagnostic_path path (event_pp);
+ const char *const funcname = "foo";
+ path.add_event (UNKNOWN_LOCATION, funcname, 0, "first %qs", "free");
+ path.add_event (UNKNOWN_LOCATION, funcname, 0, "double %qs", "free");
+
+ ASSERT_FALSE (path.interprocedural_p ());
+
+ test_diagnostic_context dc;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false, false, false);
+ ASSERT_EQ (summary.get_num_ranges (), 1);
+
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ (" `foo': events 1-2 (depth 0)\n"
+ " (1): first `free'\n"
+ " (2): double `free'\n",
+ pp_formatted_text (text_output.get_printer ()));
+}
+
+/* Verify that print_path_summary works on an interprocedural path. */
+
+static void
+test_interprocedural_path_1 (pretty_printer *event_pp)
+{
+ test_diagnostic_path path (event_pp);
+ path.add_entry ("test", 0);
+ path.add_call ("test", 0, "make_boxed_int");
+ path.add_call ("make_boxed_int", 1, "wrapped_malloc");
+ path.add_event (UNKNOWN_LOCATION,
+ "wrapped_malloc", 2, "calling malloc");
+ path.add_return ("test", 0);
+ path.add_call ("test", 0, "free_boxed_int");
+ path.add_call ("free_boxed_int", 1, "wrapped_free");
+ path.add_event (UNKNOWN_LOCATION, "wrapped_free", 2, "calling free");
+ path.add_return ("test", 0);
+ path.add_call ("test", 0, "free_boxed_int");
+ path.add_call ("free_boxed_int", 1, "wrapped_free");
+ path.add_event (UNKNOWN_LOCATION, "wrapped_free", 2, "calling free");
+ ASSERT_EQ (path.num_events (), 18);
+
+ ASSERT_TRUE (path.interprocedural_p ());
+
+ {
+ test_diagnostic_context dc;
+ diagnostic_text_output_format text_output (dc, nullptr, false);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ ASSERT_EQ (summary.get_num_ranges (), 9);
+
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ
+ (" `test': events 1-2 (depth 0)\n"
+ " |\n"
+ " | (1): entering `test'\n"
+ " | (2): calling `make_boxed_int'\n"
+ " |\n"
+ " +--> `make_boxed_int': events 3-4 (depth 1)\n"
+ " |\n"
+ " | (3): entering `make_boxed_int'\n"
+ " | (4): calling `wrapped_malloc'\n"
+ " |\n"
+ " +--> `wrapped_malloc': events 5-6 (depth 2)\n"
+ " |\n"
+ " | (5): entering `wrapped_malloc'\n"
+ " | (6): calling malloc\n"
+ " |\n"
+ " <-------------+\n"
+ " |\n"
+ " `test': events 7-8 (depth 0)\n"
+ " |\n"
+ " | (7): returning to `test'\n"
+ " | (8): calling `free_boxed_int'\n"
+ " |\n"
+ " +--> `free_boxed_int': events 9-10 (depth 1)\n"
+ " |\n"
+ " | (9): entering `free_boxed_int'\n"
+ " | (10): calling `wrapped_free'\n"
+ " |\n"
+ " +--> `wrapped_free': events 11-12 (depth 2)\n"
+ " |\n"
+ " | (11): entering `wrapped_free'\n"
+ " | (12): calling free\n"
+ " |\n"
+ " <-------------+\n"
+ " |\n"
+ " `test': events 13-14 (depth 0)\n"
+ " |\n"
+ " | (13): returning to `test'\n"
+ " | (14): calling `free_boxed_int'\n"
+ " |\n"
+ " +--> `free_boxed_int': events 15-16 (depth 1)\n"
+ " |\n"
+ " | (15): entering `free_boxed_int'\n"
+ " | (16): calling `wrapped_free'\n"
+ " |\n"
+ " +--> `wrapped_free': events 17-18 (depth 2)\n"
+ " |\n"
+ " | (17): entering `wrapped_free'\n"
+ " | (18): calling free\n"
+ " |\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ
+ (" `test': events 1-2 (depth 0)\n"
+ " │\n"
+ " │ (1): entering `test'\n"
+ " │ (2): calling `make_boxed_int'\n"
+ " │\n"
+ " └──> `make_boxed_int': events 3-4 (depth 1)\n"
+ " │\n"
+ " │ (3): entering `make_boxed_int'\n"
+ " │ (4): calling `wrapped_malloc'\n"
+ " │\n"
+ " └──> `wrapped_malloc': events 5-6 (depth 2)\n"
+ " │\n"
+ " │ (5): entering `wrapped_malloc'\n"
+ " │ (6): calling malloc\n"
+ " │\n"
+ " <─────────────┘\n"
+ " │\n"
+ " `test': events 7-8 (depth 0)\n"
+ " │\n"
+ " │ (7): returning to `test'\n"
+ " │ (8): calling `free_boxed_int'\n"
+ " │\n"
+ " └──> `free_boxed_int': events 9-10 (depth 1)\n"
+ " │\n"
+ " │ (9): entering `free_boxed_int'\n"
+ " │ (10): calling `wrapped_free'\n"
+ " │\n"
+ " └──> `wrapped_free': events 11-12 (depth 2)\n"
+ " │\n"
+ " │ (11): entering `wrapped_free'\n"
+ " │ (12): calling free\n"
+ " │\n"
+ " <─────────────┘\n"
+ " │\n"
+ " `test': events 13-14 (depth 0)\n"
+ " │\n"
+ " │ (13): returning to `test'\n"
+ " │ (14): calling `free_boxed_int'\n"
+ " │\n"
+ " └──> `free_boxed_int': events 15-16 (depth 1)\n"
+ " │\n"
+ " │ (15): entering `free_boxed_int'\n"
+ " │ (16): calling `wrapped_free'\n"
+ " │\n"
+ " └──> `wrapped_free': events 17-18 (depth 2)\n"
+ " │\n"
+ " │ (17): entering `wrapped_free'\n"
+ " │ (18): calling free\n"
+ " │\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+
+}
+
+/* Example where we pop the stack to an intermediate frame, rather than the
+ initial one. */
+
+static void
+test_interprocedural_path_2 (pretty_printer *event_pp)
+{
+ test_diagnostic_path path (event_pp);
+ path.add_entry ("foo", 0);
+ path.add_call ("foo", 0, "bar");
+ path.add_call ("bar", 1, "baz");
+ path.add_return ("bar", 1);
+ path.add_call ("bar", 1, "baz");
+ ASSERT_EQ (path.num_events (), 8);
+
+ ASSERT_TRUE (path.interprocedural_p ());
+
+ {
+ test_diagnostic_context dc;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ ASSERT_EQ (summary.get_num_ranges (), 5);
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ
+ (" `foo': events 1-2 (depth 0)\n"
+ " |\n"
+ " | (1): entering `foo'\n"
+ " | (2): calling `bar'\n"
+ " |\n"
+ " +--> `bar': events 3-4 (depth 1)\n"
+ " |\n"
+ " | (3): entering `bar'\n"
+ " | (4): calling `baz'\n"
+ " |\n"
+ " +--> `baz': event 5 (depth 2)\n"
+ " |\n"
+ " | (5): entering `baz'\n"
+ " |\n"
+ " <------+\n"
+ " |\n"
+ " `bar': events 6-7 (depth 1)\n"
+ " |\n"
+ " | (6): returning to `bar'\n"
+ " | (7): calling `baz'\n"
+ " |\n"
+ " +--> `baz': event 8 (depth 2)\n"
+ " |\n"
+ " | (8): entering `baz'\n"
+ " |\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ
+ (" `foo': events 1-2 (depth 0)\n"
+ " │\n"
+ " │ (1): entering `foo'\n"
+ " │ (2): calling `bar'\n"
+ " │\n"
+ " └──> `bar': events 3-4 (depth 1)\n"
+ " │\n"
+ " │ (3): entering `bar'\n"
+ " │ (4): calling `baz'\n"
+ " │\n"
+ " └──> `baz': event 5 (depth 2)\n"
+ " │\n"
+ " │ (5): entering `baz'\n"
+ " │\n"
+ " <──────┘\n"
+ " │\n"
+ " `bar': events 6-7 (depth 1)\n"
+ " │\n"
+ " │ (6): returning to `bar'\n"
+ " │ (7): calling `baz'\n"
+ " │\n"
+ " └──> `baz': event 8 (depth 2)\n"
+ " │\n"
+ " │ (8): entering `baz'\n"
+ " │\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+/* Verify that print_path_summary is sane in the face of a recursive
+ diagnostic_path. */
+
+static void
+test_recursion (pretty_printer *event_pp)
+{
+ test_diagnostic_path path (event_pp);
+ path.add_entry ("factorial", 0);
+ for (int depth = 0; depth < 3; depth++)
+ path.add_call ("factorial", depth, "factorial");
+ ASSERT_EQ (path.num_events (), 7);
+
+ ASSERT_TRUE (path.interprocedural_p ());
+
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ ASSERT_EQ (summary.get_num_ranges (), 4);
+
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ
+ (" `factorial': events 1-2 (depth 0)\n"
+ " |\n"
+ " | (1): entering `factorial'\n"
+ " | (2): calling `factorial'\n"
+ " |\n"
+ " +--> `factorial': events 3-4 (depth 1)\n"
+ " |\n"
+ " | (3): entering `factorial'\n"
+ " | (4): calling `factorial'\n"
+ " |\n"
+ " +--> `factorial': events 5-6 (depth 2)\n"
+ " |\n"
+ " | (5): entering `factorial'\n"
+ " | (6): calling `factorial'\n"
+ " |\n"
+ " +--> `factorial': event 7 (depth 3)\n"
+ " |\n"
+ " | (7): entering `factorial'\n"
+ " |\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
+
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, false);
+ print_path_summary_as_text (summary, text_output, true);
+ ASSERT_STREQ
+ (" `factorial': events 1-2 (depth 0)\n"
+ " │\n"
+ " │ (1): entering `factorial'\n"
+ " │ (2): calling `factorial'\n"
+ " │\n"
+ " └──> `factorial': events 3-4 (depth 1)\n"
+ " │\n"
+ " │ (3): entering `factorial'\n"
+ " │ (4): calling `factorial'\n"
+ " │\n"
+ " └──> `factorial': events 5-6 (depth 2)\n"
+ " │\n"
+ " │ (5): entering `factorial'\n"
+ " │ (6): calling `factorial'\n"
+ " │\n"
+ " └──> `factorial': event 7 (depth 3)\n"
+ " │\n"
+ " │ (7): entering `factorial'\n"
+ " │\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+/* Helper class for writing tests of control flow visualization. */
+
+class control_flow_test
+{
+public:
+ control_flow_test (const location &loc,
+ const line_table_case &case_,
+ const char *content)
+ : m_tmp_file (loc, ".c", content,
+ /* gcc_rich_location::add_location_if_nearby implicitly
+ uses global_dc's file_cache, so we need to evict
+ tmp when we're done. */
+ &global_dc->get_file_cache ()),
+ m_ltt (case_)
+ {
+ m_ord_map
+ = linemap_check_ordinary (linemap_add (line_table, LC_ENTER, false,
+ m_tmp_file.get_filename (), 0));
+ linemap_line_start (line_table, 1, 100);
+ }
+
+ location_t get_line_and_column (int line, int column)
+ {
+ return linemap_position_for_line_and_column (line_table, m_ord_map,
+ line, column);
+ }
+
+ location_t get_line_and_columns (int line, int first_column, int last_column)
+ {
+ return get_line_and_columns (line,
+ first_column, first_column, last_column);
+ }
+
+ location_t get_line_and_columns (int line,
+ int first_column,
+ int caret_column,
+ int last_column)
+ {
+ return make_location (get_line_and_column (line, caret_column),
+ get_line_and_column (line, first_column),
+ get_line_and_column (line, last_column));
+ }
+
+private:
+ temp_source_file m_tmp_file;
+ line_table_test m_ltt;
+ const line_map_ordinary *m_ord_map;
+};
+
+/* Example of event edges where all events can go in the same layout,
+ testing the 6 combinations of:
+ - ASCII vs Unicode vs event links off
+ - line numbering on and off. */
+
+static void
+test_control_flow_1 (const line_table_case &case_,
+ pretty_printer *event_pp)
+{
+ /* Create a tempfile and write some text to it.
+ ...000000000111111111122222222223333333333.
+ ...123456789012345678901234567890123456789. */
+ const char *content
+ = ("int test (int *p)\n" /* line 1. */
+ "{\n" /* line 2. */
+ " if (p)\n" /* line 3. */
+ " return 0;\n" /* line 4. */
+ " return *p;\n" /* line 5. */
+ "}\n"); /* line 6. */
+
+ control_flow_test t (SELFTEST_LOCATION, case_, content);
+
+ const location_t conditional = t.get_line_and_column (3, 7);
+ const location_t cfg_dest = t.get_line_and_column (5, 10);
+
+ test_diagnostic_path path (event_pp);
+ path.add_event (conditional, nullptr, 0,
+ "following %qs branch (when %qs is NULL)...",
+ "false", "p");
+ path.connect_to_next_event ();
+
+ path.add_event (cfg_dest, nullptr, 0,
+ "...to here");
+ path.add_event (cfg_dest, nullptr, 0,
+ "dereference of NULL %qs",
+ "p");
+
+ if (!path_events_have_column_data_p (path))
+ return;
+
+
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:3:7:\n"
+ " if (p)\n"
+ " ^\n"
+ " |\n"
+ " (1) following `false' branch (when `p' is NULL)... ->-+\n"
+ " |\n"
+ "FILENAME:5:10:\n"
+ " |\n"
+ "+------------------------------------------------------------+\n"
+ "| return *p;\n"
+ "| ~\n"
+ "| |\n"
+ "+-------->(2) ...to here\n"
+ " (3) dereference of NULL `p'\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = false;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:3:7:\n"
+ " if (p)\n"
+ " ^\n"
+ " |\n"
+ " (1) following `false' branch (when `p' is NULL)...\n"
+ "FILENAME:5:10:\n"
+ " return *p;\n"
+ " ~\n"
+ " |\n"
+ " (2) ...to here\n"
+ " (3) dereference of NULL `p'\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_line_numbers_p = true;
+ dc.m_source_printing.show_event_links_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:3:7:\n"
+ " 3 | if (p)\n"
+ " | ^\n"
+ " | |\n"
+ " | (1) following `false' branch (when `p' is NULL)... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+------------------------------------------------------------+\n"
+ " 4 || return 0;\n"
+ " 5 || return *p;\n"
+ " || ~\n"
+ " || |\n"
+ " |+-------->(2) ...to here\n"
+ " | (3) dereference of NULL `p'\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_line_numbers_p = true;
+ dc.m_source_printing.show_event_links_p = false;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:3:7:\n"
+ " 3 | if (p)\n"
+ " | ^\n"
+ " | |\n"
+ " | (1) following `false' branch (when `p' is NULL)...\n"
+ " 4 | return 0;\n"
+ " 5 | return *p;\n"
+ " | ~\n"
+ " | |\n"
+ " | (2) ...to here\n"
+ " | (3) dereference of NULL `p'\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
+ dc.m_source_printing.show_event_links_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:3:7:\n"
+ " if (p)\n"
+ " ^\n"
+ " |\n"
+ " (1) following `false' branch (when `p' is NULL)... ─>─┐\n"
+ " │\n"
+ "FILENAME:5:10:\n"
+ " │\n"
+ "┌────────────────────────────────────────────────────────────┘\n"
+ "│ return *p;\n"
+ "│ ~\n"
+ "│ |\n"
+ "└────────>(2) ...to here\n"
+ " (3) dereference of NULL `p'\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
+ dc.m_source_printing.show_event_links_p = true;
+ dc.m_source_printing.show_line_numbers_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:3:7:\n"
+ " 3 | if (p)\n"
+ " | ^\n"
+ " | |\n"
+ " | (1) following `false' branch (when `p' is NULL)... ─>─┐\n"
+ " | │\n"
+ " | │\n"
+ " |┌────────────────────────────────────────────────────────────┘\n"
+ " 4 |│ return 0;\n"
+ " 5 |│ return *p;\n"
+ " |│ ~\n"
+ " |│ |\n"
+ " |└────────>(2) ...to here\n"
+ " | (3) dereference of NULL `p'\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+/* Complex example involving a backedge. */
+
+static void
+test_control_flow_2 (const line_table_case &case_,
+ pretty_printer *event_pp)
+{
+ /* Create a tempfile and write some text to it.
+ ...000000000111111111122222222223333333333.
+ ...123456789012345678901234567890123456789. */
+ const char *content
+ = ("int for_loop_noop_next (struct node *n)\n" /* <--------- line 1. */
+ "{\n" /* <----------------------------------------------- line 2. */
+ " int sum = 0;\n" /* <---------------------------------- line 3. */
+ " for (struct node *iter = n; iter; iter->next)\n" /* <- line 4. */
+ " sum += n->val;\n" /* <------------------------------ line 5. */
+ " return sum;\n" /* <----------------------------------- line 6. */
+ "}\n"); /* <-------------------------------------------- line 7. */
+ /* Adapted from infinite-loop-linked-list.c where
+ "iter->next" should be "iter = iter->next". */
+
+ control_flow_test t (SELFTEST_LOCATION, case_, content);
+
+ const location_t iter_test = t.get_line_and_columns (4, 31, 34);
+ const location_t loop_body_start = t.get_line_and_columns (5, 12, 17);
+ const location_t loop_body_end = t.get_line_and_columns (5, 5, 9, 17);
+
+ test_diagnostic_path path (event_pp);
+ path.add_event (iter_test, nullptr, 0, "infinite loop here");
+
+ path.add_event (iter_test, nullptr, 0, "looping from here...");
+ path.connect_to_next_event ();
+
+ path.add_event (loop_body_start, nullptr, 0, "...to here");
+
+ path.add_event (loop_body_end, nullptr, 0, "looping back...");
+ path.connect_to_next_event ();
+
+ path.add_event (iter_test, nullptr, 0, "...to here");
+
+ if (!path_events_have_column_data_p (path))
+ return;
+
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = true;
+ dc.m_source_printing.show_line_numbers_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:4:31:\n"
+ " 4 | for (struct node *iter = n; iter; iter->next)\n"
+ " | ^~~~\n"
+ " | |\n"
+ " | (1) infinite loop here\n"
+ " | (2) looping from here... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+----------------------------------------------------------+\n"
+ " 5 || sum += n->val;\n"
+ " || ~~~~~~ \n"
+ " || |\n"
+ " |+---------->(3) ...to here\n"
+ /* We need to start an new event_range here as event (4) is to the
+ left of event (3), and thus (4) would mess up the in-edge to (3). */
+ " event 4\n"
+ " 5 | sum += n->val;\n"
+ " | ~~~~^~~~~~~~~\n"
+ " | |\n"
+ " | (4) looping back... ->-+\n"
+ " | |\n"
+ /* We need to start an new event_range here as event (4) with an
+ out-edge is on a later line (line 5) than its destination event (5),
+ on line 4. */
+ " event 5\n"
+ " | |\n"
+ " |+-------------------------------+\n"
+ " 4 || for (struct node *iter = n; iter; iter->next)\n"
+ " || ^~~~\n"
+ " || |\n"
+ " |+----------------------------->(5) ...to here\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+/* Complex example involving a backedge and both an in-edge and out-edge
+ on the same line. */
+
+static void
+test_control_flow_3 (const line_table_case &case_,
+ pretty_printer *event_pp)
+{
+ /* Create a tempfile and write some text to it.
+ ...000000000111111111122222222223333333333.
+ ...123456789012345678901234567890123456789. */
+ const char *content
+ = ("void test_missing_comparison_in_for_condition_1 (int n)\n"
+ "{\n" /* <------------------------- line 2. */
+ " for (int i = 0; n; i++)\n" /* <- line 3. */
+ " {\n" /* <--------------------- line 4. */
+ " }\n" /* <--------------------- line 5. */
+ "}\n"); /* <----------------------- line 6. */
+ /* Adapted from infinite-loop-1.c where the condition should have been
+ "i < n", rather than just "n". */
+
+ control_flow_test t (SELFTEST_LOCATION, case_, content);
+
+ const location_t iter_test = t.get_line_and_column (3, 19);
+ const location_t iter_next = t.get_line_and_columns (3, 22, 24);
+
+ test_diagnostic_path path (event_pp);
+ path.add_event (iter_test, nullptr, 0, "infinite loop here");
+
+ path.add_event (iter_test, nullptr, 0, "looping from here...");
+ path.connect_to_next_event ();
+
+ path.add_event (iter_next, nullptr, 0, "...to here");
+
+ path.add_event (iter_next, nullptr, 0, "looping back...");
+ path.connect_to_next_event ();
+
+ path.add_event (iter_test, nullptr, 0, "...to here");
+
+ if (!path_events_have_column_data_p (path))
+ return;
+
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = true;
+ dc.m_source_printing.show_line_numbers_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-2\n"
+ "FILENAME:3:19:\n"
+ " 3 | for (int i = 0; n; i++)\n"
+ " | ^\n"
+ " | |\n"
+ " | (1) infinite loop here\n"
+ " | (2) looping from here... ->-+\n"
+ " | |\n"
+ " events 3-4\n"
+ " | |\n"
+ " |+----------------------------------------------+\n"
+ " 3 || for (int i = 0; n; i++)\n"
+ " || ^~~\n"
+ " || |\n"
+ " |+-------------------->(3) ...to here\n"
+ " | (4) looping back... ->-+\n"
+ " | |\n"
+ /* We need to start an new event_range here as event (4) with an
+ out-edge is on the same line as its destination event (5), but
+ to the right, which we can't handle as a single event_range. */
+ " event 5\n"
+ " | |\n"
+ " |+--------------------------------------------+\n"
+ " 3 || for (int i = 0; n; i++)\n"
+ " || ^\n"
+ " || |\n"
+ " |+----------------->(5) ...to here\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+/* Implementation of ASSERT_CFG_EDGE_PATH_STREQ. */
+
+static void
+assert_cfg_edge_path_streq (const location &loc,
+ pretty_printer *event_pp,
+ const location_t src_loc,
+ const location_t dst_loc,
+ const char *expected_str)
+{
+ test_diagnostic_path path (event_pp);
+ path.add_event (src_loc, nullptr, 0, "from here...");
+ path.connect_to_next_event ();
+
+ path.add_event (dst_loc, nullptr, 0, "...to here");
+
+ if (!path_events_have_column_data_p (path))
+ return;
+
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = true;
+ dc.m_source_printing.show_line_numbers_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ_AT (loc, expected_str,
+ pp_formatted_text (text_output.get_printer ()));
+}
+
+/* Assert that if we make a path with an event with "from here..." at SRC_LOC
+ leading to an event "...to here" at DST_LOC that we print the path
+ as EXPECTED_STR. */
+
+#define ASSERT_CFG_EDGE_PATH_STREQ(SRC_LOC, DST_LOC, EXPECTED_STR) \
+ assert_cfg_edge_path_streq ((SELFTEST_LOCATION), (event_pp), \
+ (SRC_LOC), (DST_LOC), (EXPECTED_STR))
+
+/* Various examples of edge, trying to cover all combinations of:
+ - relative x positive of src label and dst label
+ - relative y position of labels:
+ - on same line
+ - on next line
+ - on line after next
+ - big gap, where src is before dst
+ - big gap, where src is after dst
+ and other awkward cases. */
+
+static void
+test_control_flow_4 (const line_table_case &case_,
+ pretty_printer *event_pp)
+{
+ std::string many_lines;
+ for (int i = 1; i <= 100; i++)
+ /* ............000000000111
+ ............123456789012. */
+ many_lines += "LHS RHS\n";
+ control_flow_test t (SELFTEST_LOCATION, case_, many_lines.c_str ());
+
+ /* Same line. */
+ {
+ /* LHS -> RHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 1, 3),
+ t.get_line_and_columns (3, 10, 12),
+ (" event 1\n"
+ "FILENAME:3:1:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " event 2\n"
+ " | |\n"
+ " |+--------------------+\n"
+ " 3 ||LHS RHS\n"
+ " || ^~~\n"
+ " || |\n"
+ " |+-------->(2) ...to here\n"));
+
+ /* RHS -> LHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 10, 12),
+ t.get_line_and_columns (3, 1, 3),
+ (" event 1\n"
+ "FILENAME:3:10:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " event 2\n"
+ " | |\n"
+ " |+-----------------------------+\n"
+ " 3 ||LHS RHS\n"
+ " ||^~~\n"
+ " |||\n"
+ " |+(2) ...to here\n"));
+ }
+
+ /* Next line. */
+ {
+ /* LHS -> RHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 1, 3),
+ t.get_line_and_columns (4, 5, 7),
+ (" events 1-2\n"
+ "FILENAME:3:1:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+--------------------+\n"
+ " 4 ||LHS RHS\n"
+ " || ~~~\n"
+ " || |\n"
+ " |+--->(2) ...to here\n"));
+
+ /* RHS -> LHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 10, 12),
+ t.get_line_and_columns (4, 1, 3),
+ (" events 1-2\n"
+ "FILENAME:3:10:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+-----------------------------+\n"
+ " 4 ||LHS RHS\n"
+ " ||~~~ \n"
+ " |||\n"
+ " |+(2) ...to here\n"));
+ }
+
+ /* Line after next. */
+ {
+ /* LHS -> RHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 1, 3),
+ t.get_line_and_columns (5, 10, 12),
+ (" events 1-2\n"
+ "FILENAME:3:1:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+--------------------+\n"
+ " 4 ||LHS RHS\n"
+ " 5 ||LHS RHS\n"
+ " || ~~~\n"
+ " || |\n"
+ " |+-------->(2) ...to here\n"));
+
+ /* RHS -> LHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 10, 12),
+ t.get_line_and_columns (5, 1, 3),
+ (" events 1-2\n"
+ "FILENAME:3:10:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+-----------------------------+\n"
+ " 4 ||LHS RHS\n"
+ " 5 ||LHS RHS\n"
+ " ||~~~ \n"
+ " |||\n"
+ " |+(2) ...to here\n"));
+ }
+
+ /* Big gap, increasing line number. */
+ {
+ /* LHS -> RHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 1, 3),
+ t.get_line_and_columns (97, 10, 12),
+ (" events 1-2\n"
+ "FILENAME:3:1:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ "......\n"
+ " | |\n"
+ " |+--------------------+\n"
+ " 97 ||LHS RHS\n"
+ " || ~~~\n"
+ " || |\n"
+ " |+-------->(2) ...to here\n"));
+
+ /* RHS -> LHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 10, 12),
+ t.get_line_and_columns (97, 1, 3),
+ (" events 1-2\n"
+ "FILENAME:3:10:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ "......\n"
+ " | |\n"
+ " |+-----------------------------+\n"
+ " 97 ||LHS RHS\n"
+ " ||~~~ \n"
+ " |||\n"
+ " |+(2) ...to here\n"));
+ }
+
+ /* Big gap, decreasing line number. */
+ {
+ /* LHS -> RHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (97, 1, 3),
+ t.get_line_and_columns (3, 10, 12),
+ (" event 1\n"
+ "FILENAME:97:1:\n"
+ " 97 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " event 2\n"
+ " | |\n"
+ " |+--------------------+\n"
+ " 3 ||LHS RHS\n"
+ " || ^~~\n"
+ " || |\n"
+ " |+-------->(2) ...to here\n"));
+
+ /* RHS -> LHS. */
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (97, 10, 12),
+ t.get_line_and_columns (3, 1, 3),
+ (" event 1\n"
+ "FILENAME:97:10:\n"
+ " 97 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " event 2\n"
+ " | |\n"
+ " |+-----------------------------+\n"
+ " 3 ||LHS RHS\n"
+ " ||^~~\n"
+ " |||\n"
+ " |+(2) ...to here\n"));
+ }
+
+ /* Unknown src. */
+ {
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (UNKNOWN_LOCATION,
+ t.get_line_and_columns (3, 10, 12),
+ (" event 1\n"
+ " (1): from here...\n"
+ " event 2\n"
+ "FILENAME:3:10:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " |+-------->(2) ...to here\n"));
+ }
+
+ /* Unknown dst. */
+ {
+ ASSERT_CFG_EDGE_PATH_STREQ
+ (t.get_line_and_columns (3, 1, 3),
+ UNKNOWN_LOCATION,
+ (" event 1\n"
+ "FILENAME:3:1:\n"
+ " 3 | LHS RHS\n"
+ " | ^~~\n"
+ " | |\n"
+ " | (1) from here... ->-+\n"
+ " | |\n"
+ " event 2\n"
+ "FILENAME:\n"
+ " (2): ...to here\n"));
+ }
+}
+
+/* Another complex example, adapted from data-model-20.c. */
+
+static void
+test_control_flow_5 (const line_table_case &case_,
+ pretty_printer *event_pp)
+{
+ /* Create a tempfile and write some text to it.
+ ...000000000111111111122222222223333333333444444444455555555556666666666.
+ ...123456789012345678901234567890123456789012345678901234567890123456789. */
+ const char *content
+ = (" if ((arr = (struct foo **)malloc(n * sizeof(struct foo *))) == NULL)\n"
+ " return NULL;\n" /* <------------------------- line 2. */
+ "\n" /* <----------------------------------------- line 3. */
+ " for (i = 0; i < n; i++) {\n" /* <-------------- line 4. */
+ " if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) {\n");
+
+ control_flow_test t (SELFTEST_LOCATION, case_, content);
+
+ test_diagnostic_path path (event_pp);
+ /* (1) */
+ path.add_event (t.get_line_and_column (1, 6), nullptr, 0,
+ "following %qs branch (when %qs is non-NULL)...",
+ "false", "arr");
+ path.connect_to_next_event ();
+
+ /* (2) */
+ path.add_event (t.get_line_and_columns (4, 8, 10, 12), nullptr, 0,
+ "...to here");
+
+ /* (3) */
+ path.add_event (t.get_line_and_columns (4, 15, 17, 19), nullptr, 0,
+ "following %qs branch (when %qs)...",
+ "true", "i < n");
+ path.connect_to_next_event ();
+
+ /* (4) */
+ path.add_event (t.get_line_and_column (5, 13), nullptr, 0,
+ "...to here");
+
+ /* (5) */
+ path.add_event (t.get_line_and_columns (5, 33, 58), nullptr, 0,
+ "allocated here");
+
+ if (!path_events_have_column_data_p (path))
+ return;
+
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = true;
+ dc.m_source_printing.show_line_numbers_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-5\n"
+ "FILENAME:1:6:\n"
+ " 1 | if ((arr = (struct foo **)malloc(n * sizeof(struct foo *))) == NULL)\n"
+ " | ^\n"
+ " | |\n"
+ " | (1) following `false' branch (when `arr' is non-NULL)... ->-+\n"
+ " | |\n"
+ "......\n"
+ " | |\n"
+ " |+-----------------------------------------------------------------+\n"
+ " 4 || for (i = 0; i < n; i++) {\n"
+ " || ~~~~~ ~~~~~\n"
+ " || | |\n"
+ " || | (3) following `true' branch (when `i < n')... ->-+\n"
+ " |+-------->(2) ...to here |\n"
+ " | |\n"
+ " | |\n"
+ " |+-----------------------------------------------------------------+\n"
+ " 5 || if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) {\n"
+ " || ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
+ " || | |\n"
+ " |+----------->(4) ...to here (5) allocated here\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+/* Another complex example, adapted from loop-3.c. */
+
+static void
+test_control_flow_6 (const line_table_case &case_,
+ pretty_printer *event_pp)
+{
+ /* Create a tempfile and write some text to it.
+ ...000000000111111111122222222223333333.
+ ...123456789012345678901234567890123456. */
+ const char *content
+ = ("#include <stdlib.h>\n" /* <------------------ line 1. */
+ "\n" /* <------------------------------------- line 2. */
+ "void test(int c)\n" /* <--------------------- line 3. */
+ "{\n" /* <------------------------------------ line 4. */
+ " int i;\n" /* <----------------------------- line 5. */
+ " char *buffer = (char*)malloc(256);\n" /* <- line 6. */
+ "\n" /* <------------------------------------- line 7. */
+ " for (i=0; i<255; i++) {\n" /* <------------ line 8. */
+ " buffer[i] = c;\n" /* <------------------- line 9. */
+ "\n" /* <------------------------------------- line 10. */
+ " free(buffer);\n" /* <-------------------- line 11. */
+ " }\n"); /* <-------------------------------- line 12. */
+
+ control_flow_test t (SELFTEST_LOCATION, case_, content);
+
+ test_diagnostic_path path (event_pp);
+ /* (1) */
+ path.add_event (t.get_line_and_columns (6, 25, 35), nullptr, 0,
+ "allocated here");
+
+ /* (2) */
+ path.add_event (t.get_line_and_columns (8, 13, 14, 17), nullptr, 0,
+ "following %qs branch (when %qs)...",
+ "true", "i <= 254");
+ path.connect_to_next_event ();
+
+ /* (3) */
+ path.add_event (t.get_line_and_columns (9, 5, 15, 17), nullptr, 0,
+ "...to here");
+
+ /* (4) */
+ path.add_event (t.get_line_and_columns (8, 13, 14, 17), nullptr, 0,
+ "following %qs branch (when %qs)...",
+ "true", "i <= 254");
+ path.connect_to_next_event ();
+
+ /* (5) */
+ path.add_event (t.get_line_and_columns (9, 5, 15, 17), nullptr, 0,
+ "...to here");
+
+ if (!path_events_have_column_data_p (path))
+ return;
+
+ {
+ test_diagnostic_context dc;
+ dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
+ dc.m_source_printing.show_event_links_p = true;
+ dc.m_source_printing.show_line_numbers_p = true;
+ diagnostic_text_output_format text_output (dc);
+ path_print_policy policy (text_output);
+ path_summary summary (policy, *event_pp, path, true);
+ print_path_summary_as_text (summary, text_output, false);
+ ASSERT_STREQ
+ (" events 1-3\n"
+ "FILENAME:6:25:\n"
+ " 6 | char *buffer = (char*)malloc(256);\n"
+ " | ^~~~~~~~~~~\n"
+ " | |\n"
+ " | (1) allocated here\n"
+ " 7 | \n"
+ " 8 | for (i=0; i<255; i++) {\n"
+ " | ~~~~~ \n"
+ " | |\n"
+ " | (2) following `true' branch (when `i <= 254')... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+-----------------------------------------------------------------+\n"
+ " 9 || buffer[i] = c;\n"
+ " || ~~~~~~~~~~~~~ \n"
+ " || |\n"
+ " |+------------->(3) ...to here\n"
+ " events 4-5\n"
+ " 8 | for (i=0; i<255; i++) {\n"
+ " | ~^~~~\n"
+ " | |\n"
+ " | (4) following `true' branch (when `i <= 254')... ->-+\n"
+ " | |\n"
+ " | |\n"
+ " |+-----------------------------------------------------------------+\n"
+ " 9 || buffer[i] = c;\n"
+ " || ~~~~~~~~~~~~~\n"
+ " || |\n"
+ " |+------------->(5) ...to here\n",
+ pp_formatted_text (text_output.get_printer ()));
+ }
+}
+
+static void
+control_flow_tests (const line_table_case &case_)
+{
+ pretty_printer pp;
+ pp_show_color (&pp) = false;
+
+ test_control_flow_1 (case_, &pp);
+ test_control_flow_2 (case_, &pp);
+ test_control_flow_3 (case_, &pp);
+ test_control_flow_4 (case_, &pp);
+ test_control_flow_5 (case_, &pp);
+ test_control_flow_6 (case_, &pp);
+}
+
+/* Run all of the selftests within this file. */
+
+void
+diagnostic_path_output_cc_tests ()
+{
+ pretty_printer pp;
+ pp_show_color (&pp) = false;
+
+ auto_fix_quotes fix_quotes;
+ test_empty_path (&pp);
+ test_intraprocedural_path (&pp);
+ test_interprocedural_path_1 (&pp);
+ test_interprocedural_path_2 (&pp);
+ test_recursion (&pp);
+ for_each_line_table_case (control_flow_tests);
+}
+
+} // namespace selftest
+
+#if __GNUC__ >= 10
+# pragma GCC diagnostic pop
+#endif
+
+#endif /* #if CHECKING_P */
diff --git a/gcc/diagnostic-path.cc b/gcc/diagnostic-path.cc
index 9340e4e..7a9c051 100644
--- a/gcc/diagnostic-path.cc
+++ b/gcc/diagnostic-path.cc
@@ -25,19 +25,7 @@ along with GCC; see the file COPYING3. If not see
#include "system.h"
#include "coretypes.h"
#include "diagnostic.h"
-#include "diagnostic-macro-unwinding.h"
-#include "intl.h"
#include "diagnostic-path.h"
-#include "gcc-rich-location.h"
-#include "diagnostic-color.h"
-#include "diagnostic-event-id.h"
-#include "diagnostic-label-effects.h"
-#include "pretty-print-markup.h"
-#include "selftest.h"
-#include "selftest-diagnostic.h"
-#include "selftest-diagnostic-path.h"
-#include "text-art/theme.h"
-#include "diagnostic-format-text.h"
/* Disable warnings about missing quoting in GCC diagnostics for the print
calls below. */
@@ -226,2315 +214,6 @@ void debug (diagnostic_path *path)
inform (&richloc, "debug path");
}
-/* Anonymous namespace for path-printing code. */
-
-namespace {
-
-/* A bundle of state for printing a path. */
-
-class path_print_policy
-{
-public:
- path_print_policy (const diagnostic_text_output_format &text_output)
- : m_source_policy (text_output.get_context ())
- {
- }
-
- text_art::theme *
- get_diagram_theme () const
- {
- return m_source_policy.get_diagram_theme ();
- }
-
- const diagnostic_source_print_policy &
- get_source_policy () const { return m_source_policy; }
-
-private:
- diagnostic_source_print_policy m_source_policy;
-};
-
-/* Subclass of range_label for showing a particular event
- when showing a consecutive run of events within a diagnostic_path as
- labelled ranges within one gcc_rich_location. */
-
-class path_label : public range_label
-{
- public:
- path_label (const diagnostic_path &path,
- const pretty_printer &ref_pp,
- unsigned start_idx,
- bool colorize,
- bool allow_emojis)
- : m_path (path),
- m_ref_pp (ref_pp),
- m_start_idx (start_idx), m_effects (*this),
- m_colorize (colorize), m_allow_emojis (allow_emojis)
- {}
-
- label_text get_text (unsigned range_idx) const final override
- {
- unsigned event_idx = m_start_idx + range_idx;
- const diagnostic_event &event = m_path.get_event (event_idx);
-
- const diagnostic_event::meaning meaning (event.get_meaning ());
-
- auto pp = m_ref_pp.clone ();
- pp_show_color (pp.get ()) = m_colorize;
- diagnostic_event_id_t event_id (event_idx);
-
- pp_printf (pp.get (), "%@", &event_id);
- pp_space (pp.get ());
-
- if (meaning.m_verb == diagnostic_event::VERB_danger
- && m_allow_emojis)
- {
- pp_unicode_character (pp.get (), 0x26A0); /* U+26A0 WARNING SIGN. */
- /* Append U+FE0F VARIATION SELECTOR-16 to select the emoji
- variation of the char. */
- pp_unicode_character (pp.get (), 0xFE0F);
- /* U+26A0 WARNING SIGN has East_Asian_Width == Neutral, but in its
- emoji variant is printed (by vte at least) with a 2nd half
- overlapping the next char. Hence we add two spaces here: a space
- to be covered by this overlap, plus another space of padding. */
- pp_string (pp.get (), " ");
- }
-
- event.print_desc (*pp.get ());
-
- label_text result
- = label_text::take (xstrdup (pp_formatted_text (pp.get ())));
- return result;
- }
-
- const label_effects *get_effects (unsigned /*range_idx*/) const
- {
- return &m_effects;
- }
-
- private:
- class path_label_effects : public label_effects
- {
- public:
- path_label_effects (const path_label &path_label)
- : m_path_label (path_label)
- {
- }
- bool has_in_edge (unsigned range_idx) const final override
- {
- if (const diagnostic_event *prev_event
- = m_path_label.get_prev_event (range_idx))
- return prev_event->connect_to_next_event_p ();
- return false;
- }
- bool has_out_edge (unsigned range_idx) const final override
- {
- const diagnostic_event &event = m_path_label.get_event (range_idx);
- return event.connect_to_next_event_p ();
- }
-
- private:
- const path_label &m_path_label;
- };
-
- const diagnostic_event &get_event (unsigned range_idx) const
- {
- unsigned event_idx = m_start_idx + range_idx;
- return m_path.get_event (event_idx);
- }
-
- const diagnostic_event *get_prev_event (unsigned range_idx) const
- {
- if (m_start_idx + range_idx == 0)
- return nullptr;
- unsigned event_idx = m_start_idx + range_idx - 1;
- return &m_path.get_event (event_idx);
- }
-
- const diagnostic_path &m_path;
- const pretty_printer &m_ref_pp;
- unsigned m_start_idx;
- path_label_effects m_effects;
- const bool m_colorize;
- const bool m_allow_emojis;
-};
-
-/* Return true if E1 and E2 can be consolidated into the same run of events
- when printing a diagnostic_path. */
-
-static bool
-can_consolidate_events (const diagnostic_path &path,
- const diagnostic_event &e1,
- unsigned ev1_idx,
- const diagnostic_event &e2,
- unsigned ev2_idx,
- bool check_locations)
-{
- if (e1.get_thread_id () != e2.get_thread_id ())
- return false;
-
- if (!path.same_function_p (ev1_idx, ev2_idx))
- return false;
-
- if (e1.get_stack_depth () != e2.get_stack_depth ())
- return false;
-
- if (check_locations)
- {
- location_t loc1 = e1.get_location ();
- location_t loc2 = e2.get_location ();
-
- if (loc1 < RESERVED_LOCATION_COUNT
- || loc2 < RESERVED_LOCATION_COUNT)
- return false;
-
- /* Neither can be macro-based. */
- if (linemap_location_from_macro_expansion_p (line_table, loc1))
- return false;
- if (linemap_location_from_macro_expansion_p (line_table, loc2))
- return false;
- }
-
- /* Passed all the tests. */
- return true;
-}
-
-struct event_range;
-struct path_summary;
-class thread_event_printer;
-
-/* A bundle of information about all of the events in a diagnostic_path
- relating to a specific path, for use by path_summary. */
-
-class per_thread_summary
-{
-public:
- per_thread_summary (const diagnostic_path &path,
- const logical_location_manager &logical_loc_mgr,
- label_text name, unsigned swimlane_idx)
- : m_path (path),
- m_logical_loc_mgr (logical_loc_mgr),
- m_name (std::move (name)),
- m_swimlane_idx (swimlane_idx),
- m_last_event (nullptr),
- m_min_depth (INT_MAX),
- m_max_depth (INT_MIN)
- {}
-
- void update_depth_limits (int stack_depth)
- {
- if (stack_depth < m_min_depth)
- m_min_depth = stack_depth;
- if (stack_depth > m_max_depth)
- m_max_depth = stack_depth;
- }
-
- const char *get_name () const { return m_name.get (); }
- unsigned get_swimlane_index () const { return m_swimlane_idx; }
-
- bool interprocedural_p () const;
-
-private:
- friend struct path_summary;
- friend class thread_event_printer;
- friend struct event_range;
-
- const diagnostic_path &m_path;
- const logical_location_manager &m_logical_loc_mgr;
-
- const label_text m_name;
-
- /* The "swimlane index" is the order in which this per_thread_summary
- was created, for use when printing the events. */
- const unsigned m_swimlane_idx;
-
- // The event ranges specific to this thread:
- auto_vec<event_range *> m_event_ranges;
-
- const diagnostic_event *m_last_event;
-
- int m_min_depth;
- int m_max_depth;
-};
-
-/* A range of consecutive events within a diagnostic_path, all within the
- same thread, and with the same fndecl and stack_depth, and which are suitable
- to print with a single call to diagnostic_show_locus. */
-struct event_range
-{
- /* A struct for tracking the mergability of labels on a particular
- source line. In particular, track information about links between
- labels to ensure that we only consolidate events involving links
- that the source-printing code is able to handle (splitting them
- otherwise). */
- struct per_source_line_info
- {
- void init (int line)
- {
- m_line = line;
- m_has_in_edge = false;
- m_has_out_edge = false;
- m_min_label_source_column = INT_MAX;
- m_max_label_source_column = INT_MIN;
- }
-
- /* Return true if our source-printing/labelling/linking code can handle
- the events already on this source line, *and* a new event at COLUMN. */
- bool
- can_add_label_for_event_p (bool has_in_edge,
- const diagnostic_event *prev_event,
- bool has_out_edge,
- int column) const
- {
- /* Any existing in-edge has to be the left-most label on its
- source line. */
- if (m_has_in_edge && column < m_min_label_source_column)
- return false;
- /* Any existing out-edge has to be the right-most label on its
- source line. */
- if (m_has_out_edge && column > m_max_label_source_column)
- return false;
- /* Can't have more than one in-edge. */
- if (m_has_in_edge && has_in_edge)
- return false;
- /* Can't have more than one out-edge. */
- if (m_has_out_edge && has_out_edge)
- return false;
-
- if (has_in_edge)
- {
- /* Any new in-edge needs to be the left-most label on its
- source line. */
- if (column > m_min_label_source_column)
- return false;
-
- gcc_assert (prev_event);
- const location_t prev_loc = prev_event->get_location ();
- expanded_location prev_exploc
- = linemap_client_expand_location_to_spelling_point
- (line_table, prev_loc, LOCATION_ASPECT_CARET);
- /* The destination in-edge's line number has to be <= the
- source out-edge's line number (if any). */
- if (prev_exploc.line >= m_line)
- return false;
- }
-
- /* Any new out-edge needs to be the right-most label on its
- source line. */
- if (has_out_edge)
- if (column < m_max_label_source_column)
- return false;
-
- /* All checks passed; we can add the new event at COLUMN. */
- return true;
- }
-
- void
- add_label_for_event (bool has_in_edge, bool has_out_edge, int column)
- {
- if (has_in_edge)
- m_has_in_edge = true;
- if (has_out_edge)
- m_has_out_edge = true;
- m_min_label_source_column = std::min (m_min_label_source_column, column);
- m_max_label_source_column = std::max (m_max_label_source_column, column);
- }
-
- int m_line;
- bool m_has_in_edge;
- bool m_has_out_edge;
- int m_min_label_source_column;
- int m_max_label_source_column;
- };
-
- event_range (const diagnostic_path &path,
- const pretty_printer &ref_pp,
- unsigned start_idx,
- const diagnostic_event &initial_event,
- per_thread_summary &t,
- bool show_event_links,
- bool colorize_labels,
- bool allow_emojis)
- : m_path (path),
- m_initial_event (initial_event),
- m_logical_loc (initial_event.get_logical_location ()),
- m_stack_depth (initial_event.get_stack_depth ()),
- m_start_idx (start_idx), m_end_idx (start_idx),
- m_path_label (path, ref_pp,
- start_idx, colorize_labels, allow_emojis),
- m_richloc (initial_event.get_location (), &m_path_label, nullptr),
- m_thread_id (initial_event.get_thread_id ()),
- m_per_thread_summary (t),
- m_show_event_links (show_event_links)
- {
- if (m_show_event_links)
- {
- expanded_location exploc
- = linemap_client_expand_location_to_spelling_point
- (line_table, initial_event.get_location (), LOCATION_ASPECT_CARET);
- per_source_line_info &source_line_info
- = get_per_source_line_info (exploc.line);
-
- const diagnostic_event *prev_thread_event = t.m_last_event;
- const bool has_in_edge
- = (prev_thread_event
- ? prev_thread_event->connect_to_next_event_p ()
- : false);
- const bool has_out_edge = initial_event.connect_to_next_event_p ();
-
- source_line_info.add_label_for_event
- (has_in_edge, has_out_edge, exploc.column);
- }
- }
-
- per_source_line_info &
- get_per_source_line_info (int source_line)
- {
- bool existed = false;
- per_source_line_info &result
- = m_source_line_info_map.get_or_insert (source_line, &existed);
- if (!existed)
- result.init (source_line);
- return result;
- }
-
- bool maybe_add_event (const path_print_policy &policy,
- const diagnostic_event &new_ev,
- unsigned new_ev_idx,
- bool check_rich_locations)
- {
- if (!can_consolidate_events (m_path,
- m_initial_event, m_start_idx,
- new_ev, new_ev_idx,
- check_rich_locations))
- return false;
-
- /* Verify compatibility of the new label and existing labels
- with respect to the link-printing code. */
- expanded_location exploc
- = linemap_client_expand_location_to_spelling_point
- (line_table, new_ev.get_location (), LOCATION_ASPECT_CARET);
- per_source_line_info &source_line_info
- = get_per_source_line_info (exploc.line);
- const diagnostic_event *prev_event = nullptr;
- if (new_ev_idx > 0)
- prev_event = &m_path.get_event (new_ev_idx - 1);
- const bool has_in_edge = (prev_event
- ? prev_event->connect_to_next_event_p ()
- : false);
- const bool has_out_edge = new_ev.connect_to_next_event_p ();
- if (m_show_event_links)
- if (!source_line_info.can_add_label_for_event_p
- (has_in_edge, prev_event,
- has_out_edge, exploc.column))
- return false;
-
- /* Potentially verify that the locations are sufficiently close. */
- if (check_rich_locations)
- if (!m_richloc.add_location_if_nearby (policy.get_source_policy (),
- new_ev.get_location (),
- false, &m_path_label))
- return false;
-
- m_end_idx = new_ev_idx;
- m_per_thread_summary.m_last_event = &new_ev;
-
- if (m_show_event_links)
- source_line_info.add_label_for_event
- (has_in_edge, has_out_edge, exploc.column);
-
- return true;
- }
-
- /* Print the events in this range to PP, typically as a single
- call to diagnostic_show_locus. */
-
- void print (pretty_printer &pp,
- diagnostic_text_output_format &text_output,
- diagnostic_source_effect_info *effect_info)
- {
- location_t initial_loc = m_initial_event.get_location ();
-
- diagnostic_context &dc = text_output.get_context ();
-
- /* Emit a span indicating the filename (and line/column) if the
- line has changed relative to the last call to
- diagnostic_show_locus. */
- if (dc.m_source_printing.enabled)
- {
- expanded_location exploc
- = linemap_client_expand_location_to_spelling_point
- (line_table, initial_loc, LOCATION_ASPECT_CARET);
- if (exploc.file != LOCATION_FILE (dc.m_last_location))
- {
- diagnostic_location_print_policy loc_policy (text_output);
- diagnostic_start_span (&dc) (loc_policy, &pp, exploc);
- }
- }
-
- /* If we have an UNKNOWN_LOCATION (or BUILTINS_LOCATION) as the
- primary location for an event, diagnostic_show_locus won't print
- anything.
-
- In particular the label for the event won't get printed.
- Fail more gracefully in this case by showing the event
- index and text, at no particular location. */
- if (get_pure_location (initial_loc) <= BUILTINS_LOCATION)
- {
- for (unsigned i = m_start_idx; i <= m_end_idx; i++)
- {
- const diagnostic_event &iter_event = m_path.get_event (i);
- diagnostic_event_id_t event_id (i);
- pp_printf (&pp, " %@: ", &event_id);
- iter_event.print_desc (pp);
- pp_newline (&pp);
- }
- return;
- }
-
- /* Call diagnostic_show_locus to show the events using labels. */
- diagnostic_show_locus (&dc, text_output.get_source_printing_options (),
- &m_richloc, DK_DIAGNOSTIC_PATH, &pp,
- effect_info);
-
- /* If we have a macro expansion, show the expansion to the user. */
- if (linemap_location_from_macro_expansion_p (line_table, initial_loc))
- {
- gcc_assert (m_start_idx == m_end_idx);
- maybe_unwind_expanded_macro_loc (text_output, initial_loc);
- }
- }
-
- const diagnostic_path &m_path;
- const diagnostic_event &m_initial_event;
- logical_location m_logical_loc;
- int m_stack_depth;
- unsigned m_start_idx;
- unsigned m_end_idx;
- path_label m_path_label;
- gcc_rich_location m_richloc;
- diagnostic_thread_id_t m_thread_id;
- per_thread_summary &m_per_thread_summary;
- hash_map<int_hash<int, -1, -2>,
- per_source_line_info> m_source_line_info_map;
- bool m_show_event_links;
-};
-
-/* A struct for grouping together the events in a diagnostic_path into
- ranges of events, partitioned by thread and by stack frame (i.e. by fndecl
- and stack depth). */
-
-struct path_summary
-{
- path_summary (const path_print_policy &policy,
- const pretty_printer &ref_pp,
- const diagnostic_path &path,
- bool check_rich_locations,
- bool colorize = false,
- bool show_event_links = true);
-
- const logical_location_manager &get_logical_location_manager () const
- {
- return m_logical_loc_mgr;
- }
- unsigned get_num_ranges () const { return m_ranges.length (); }
- bool multithreaded_p () const { return m_per_thread_summary.length () > 1; }
-
- const per_thread_summary &get_events_for_thread_id (diagnostic_thread_id_t tid)
- {
- per_thread_summary **slot = m_thread_id_to_events.get (tid);
- gcc_assert (slot);
- gcc_assert (*slot);
- return **slot;
- }
-
- const logical_location_manager &m_logical_loc_mgr;
- auto_delete_vec <event_range> m_ranges;
- auto_delete_vec <per_thread_summary> m_per_thread_summary;
- hash_map<int_hash<diagnostic_thread_id_t, -1, -2>,
- per_thread_summary *> m_thread_id_to_events;
-
-private:
- per_thread_summary &
- get_or_create_events_for_thread_id (const diagnostic_path &path,
- diagnostic_thread_id_t tid)
- {
- if (per_thread_summary **slot = m_thread_id_to_events.get (tid))
- return **slot;
-
- const diagnostic_thread &thread = path.get_thread (tid);
- per_thread_summary *pts
- = new per_thread_summary (path,
- m_logical_loc_mgr,
- thread.get_name (false),
- m_per_thread_summary.length ());
- m_thread_id_to_events.put (tid, pts);
- m_per_thread_summary.safe_push (pts);
- return *pts;
- }
-};
-
-/* Return true iff there is more than one stack frame used by the events
- of this thread. */
-
-bool
-per_thread_summary::interprocedural_p () const
-{
- if (m_event_ranges.is_empty ())
- return false;
- int first_stack_depth = m_event_ranges[0]->m_stack_depth;
- for (auto range : m_event_ranges)
- {
- if (!m_path.same_function_p (m_event_ranges[0]->m_start_idx,
- range->m_start_idx))
- return true;
- if (range->m_stack_depth != first_stack_depth)
- return true;
- }
- return false;
-}
-
-/* path_summary's ctor. */
-
-path_summary::path_summary (const path_print_policy &policy,
- const pretty_printer &ref_pp,
- const diagnostic_path &path,
- bool check_rich_locations,
- bool colorize,
- bool show_event_links)
-: m_logical_loc_mgr (path.get_logical_location_manager ())
-{
- const unsigned num_events = path.num_events ();
-
- event_range *cur_event_range = NULL;
- for (unsigned idx = 0; idx < num_events; idx++)
- {
- const diagnostic_event &event = path.get_event (idx);
- const diagnostic_thread_id_t thread_id = event.get_thread_id ();
- per_thread_summary &pts
- = get_or_create_events_for_thread_id (path, thread_id);
-
- pts.update_depth_limits (event.get_stack_depth ());
-
- if (cur_event_range)
- if (cur_event_range->maybe_add_event (policy,
- event,
- idx, check_rich_locations))
- continue;
-
- auto theme = policy.get_diagram_theme ();
- const bool allow_emojis = theme ? theme->emojis_p () : false;
- cur_event_range = new event_range (path, ref_pp,
- idx, event, pts,
- show_event_links,
- colorize,
- allow_emojis);
- m_ranges.safe_push (cur_event_range);
- pts.m_event_ranges.safe_push (cur_event_range);
- pts.m_last_event = &event;
- }
-}
-
-/* Write SPACES to PP. */
-
-static void
-write_indent (pretty_printer *pp, int spaces)
-{
- for (int i = 0; i < spaces; i++)
- pp_space (pp);
-}
-
-static const int base_indent = 2;
-static const int per_frame_indent = 2;
-
-/* A bundle of state for printing event_range instances for a particular
- thread. */
-
-class thread_event_printer
-{
-public:
- thread_event_printer (const per_thread_summary &t, bool show_depths)
- : m_per_thread_summary (t),
- m_show_depths (show_depths),
- m_cur_indent (base_indent),
- m_vbar_column_for_depth (),
- m_num_printed (0)
- {
- }
-
- /* Get the previous event_range within this thread, if any. */
- const event_range *get_any_prev_range () const
- {
- if (m_num_printed > 0)
- return m_per_thread_summary.m_event_ranges[m_num_printed - 1];
- else
- return nullptr;
- }
-
- /* Get the next event_range within this thread, if any. */
- const event_range *get_any_next_range () const
- {
- if (m_num_printed < m_per_thread_summary.m_event_ranges.length () - 1)
- return m_per_thread_summary.m_event_ranges[m_num_printed + 1];
- else
- return nullptr;
- }
-
- void
- print_swimlane_for_event_range (diagnostic_text_output_format &text_output,
- pretty_printer *pp,
- const logical_location_manager &logical_loc_mgr,
- event_range *range,
- diagnostic_source_effect_info *effect_info)
- {
- gcc_assert (pp);
- const char *const line_color = "path";
- const char *start_line_color
- = colorize_start (pp_show_color (pp), line_color);
- const char *end_line_color = colorize_stop (pp_show_color (pp));
-
- text_art::ascii_theme fallback_theme;
- text_art::theme *theme = text_output.get_diagram_theme ();
- if (!theme)
- theme = &fallback_theme;
-
- cppchar_t depth_marker_char = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_DEPTH_MARKER);
- /* e.g. "|". */
-
- const bool interprocedural_p = m_per_thread_summary.interprocedural_p ();
-
- write_indent (pp, m_cur_indent);
- if (const event_range *prev_range = get_any_prev_range ())
- {
- if (range->m_stack_depth > prev_range->m_stack_depth)
- {
- gcc_assert (interprocedural_p);
- /* Show pushed stack frame(s). */
- cppchar_t left = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_PUSH_FRAME_LEFT);
- cppchar_t middle = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_PUSH_FRAME_MIDDLE);
- cppchar_t right = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_PUSH_FRAME_RIGHT);
- /* e.g. "+--> ". */
- pp_string (pp, start_line_color);
- pp_unicode_character (pp, left);
- pp_unicode_character (pp, middle);
- pp_unicode_character (pp, middle);
- pp_unicode_character (pp, right);
- pp_space (pp);
- pp_string (pp, end_line_color);
- m_cur_indent += 5;
- }
- }
- if (range->m_logical_loc)
- {
- label_text name
- (logical_loc_mgr.get_name_for_path_output (range->m_logical_loc));
- if (name.get ())
- pp_printf (pp, "%qs: ", name.get ());
- }
- if (range->m_start_idx == range->m_end_idx)
- pp_printf (pp, "event %i",
- range->m_start_idx + 1);
- else
- pp_printf (pp, "events %i-%i",
- range->m_start_idx + 1, range->m_end_idx + 1);
- if (m_show_depths)
- pp_printf (pp, " (depth %i)", range->m_stack_depth);
- pp_newline (pp);
-
- /* Print a run of events. */
- if (interprocedural_p)
- {
- write_indent (pp, m_cur_indent + per_frame_indent);
- pp_string (pp, start_line_color);
- pp_unicode_character (pp, depth_marker_char);
- pp_string (pp, end_line_color);
- pp_newline (pp);
-
- char *saved_prefix = pp_take_prefix (pp);
- char *prefix;
- {
- pretty_printer tmp_pp;
- write_indent (&tmp_pp, m_cur_indent + per_frame_indent);
- pp_string (&tmp_pp, start_line_color);
- pp_unicode_character (&tmp_pp, depth_marker_char);
- pp_string (&tmp_pp, end_line_color);
- prefix = xstrdup (pp_formatted_text (&tmp_pp));
- }
- pp_set_prefix (pp, prefix);
- pp_prefixing_rule (pp) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
- range->print (*pp, text_output, effect_info);
- pp_set_prefix (pp, saved_prefix);
-
- write_indent (pp, m_cur_indent + per_frame_indent);
- pp_string (pp, start_line_color);
- pp_unicode_character (pp, depth_marker_char);
- pp_string (pp, end_line_color);
- pp_newline (pp);
- }
- else
- range->print (*pp, text_output, effect_info);
-
- if (const event_range *next_range = get_any_next_range ())
- {
- if (range->m_stack_depth > next_range->m_stack_depth)
- {
- if (m_vbar_column_for_depth.get (next_range->m_stack_depth))
- {
- /* Show returning from stack frame(s), by printing
- something like:
- " |\n"
- " <-------------+\n"
- " |\n". */
- gcc_assert (interprocedural_p);
- cppchar_t left = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_POP_FRAMES_LEFT);
- cppchar_t middle = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_POP_FRAMES_MIDDLE);
- cppchar_t right = theme->get_cppchar
- (text_art::theme::cell_kind::INTERPROCEDURAL_POP_FRAMES_RIGHT);
- int vbar_for_next_frame
- = *m_vbar_column_for_depth.get (next_range->m_stack_depth);
-
- int indent_for_next_frame
- = vbar_for_next_frame - per_frame_indent;
- write_indent (pp, vbar_for_next_frame);
- pp_string (pp, start_line_color);
- pp_unicode_character (pp, left);
- for (int i = indent_for_next_frame + per_frame_indent;
- i < m_cur_indent + per_frame_indent - 1; i++)
- pp_unicode_character (pp, middle);
- pp_unicode_character (pp, right);
- pp_string (pp, end_line_color);
- pp_newline (pp);
- m_cur_indent = indent_for_next_frame;
-
- write_indent (pp, vbar_for_next_frame);
- pp_string (pp, start_line_color);
- pp_unicode_character (pp, depth_marker_char);
- pp_string (pp, end_line_color);
- pp_newline (pp);
- }
- else
- {
- /* Handle disjoint paths (e.g. a callback at some later
- time). */
- m_cur_indent = base_indent;
- }
- }
- else if (range->m_stack_depth < next_range->m_stack_depth)
- {
- /* Prepare to show pushed stack frame. */
- gcc_assert (interprocedural_p);
- gcc_assert (range->m_stack_depth != EMPTY);
- gcc_assert (range->m_stack_depth != DELETED);
- m_vbar_column_for_depth.put (range->m_stack_depth,
- m_cur_indent + per_frame_indent);
- m_cur_indent += per_frame_indent;
- }
- }
-
- m_num_printed++;
- }
-
- int get_cur_indent () const { return m_cur_indent; }
-
-private:
- const per_thread_summary &m_per_thread_summary;
- bool m_show_depths;
-
- /* Print the ranges. */
- int m_cur_indent;
-
- /* Keep track of column numbers of existing '|' characters for
- stack depths we've already printed. */
- static const int EMPTY = -1;
- static const int DELETED = -2;
- typedef int_hash <int, EMPTY, DELETED> vbar_hash;
- hash_map <vbar_hash, int> m_vbar_column_for_depth;
-
- /* How many event ranges within this swimlane have we printed.
- This is the index of the next event_range to print. */
- unsigned m_num_printed;
-};
-
-/* Print path_summary PS to TEXT_OUTPUT, giving an overview of the
- interprocedural calls and returns.
-
- Print the event descriptions in a nested form, printing the event
- descriptions within calls to diagnostic_show_locus, using labels to
- show the events:
-
- 'foo' (events 1-2)
- | NN |
- | |
- +--> 'bar' (events 3-4)
- | NN |
- | |
- +--> 'baz' (events 5-6)
- | NN |
- | |
- <------------ +
- |
- 'foo' (events 7-8)
- | NN |
- | |
- +--> 'bar' (events 9-10)
- | NN |
- | |
- +--> 'baz' (events 11-12)
- | NN |
- | |
-
- If SHOW_DEPTHS is true, append " (depth N)" to the header of each run
- of events.
-
- For events with UNKNOWN_LOCATION, print a summary of each the event. */
-
-static void
-print_path_summary_as_text (const path_summary &ps,
- diagnostic_text_output_format &text_output,
- bool show_depths)
-{
- pretty_printer *const pp = text_output.get_printer ();
-
- std::vector<thread_event_printer> thread_event_printers;
- for (auto t : ps.m_per_thread_summary)
- thread_event_printers.push_back (thread_event_printer (*t, show_depths));
-
- unsigned i;
- event_range *range;
- int last_out_edge_column = -1;
- FOR_EACH_VEC_ELT (ps.m_ranges, i, range)
- {
- const int swimlane_idx
- = range->m_per_thread_summary.get_swimlane_index ();
- if (ps.multithreaded_p ())
- if (i == 0 || ps.m_ranges[i - 1]->m_thread_id != range->m_thread_id)
- {
- if (i > 0)
- pp_newline (pp);
- pp_printf (pp, "Thread: %qs",
- range->m_per_thread_summary.get_name ());
- pp_newline (pp);
- }
- thread_event_printer &tep = thread_event_printers[swimlane_idx];
- /* Wire up any trailing out-edge from previous range to leading in-edge
- of this range. */
- diagnostic_source_effect_info effect_info;
- effect_info.m_leading_in_edge_column = last_out_edge_column;
- tep.print_swimlane_for_event_range (text_output, pp,
- ps.get_logical_location_manager (),
- range, &effect_info);
- last_out_edge_column = effect_info.m_trailing_out_edge_column;
- }
-}
-
-} /* end of anonymous namespace for path-printing code. */
-
-class element_event_desc : public pp_element
-{
-public:
- element_event_desc (const diagnostic_event &event)
- : m_event (event)
- {
- }
-
- void add_to_phase_2 (pp_markup::context &ctxt) final override
- {
- auto pp = ctxt.m_pp.clone ();
- m_event.print_desc (*pp.get ());
- pp_string (&ctxt.m_pp, pp_formatted_text (pp.get ()));
- }
-
-private:
- const diagnostic_event &m_event;
-};
-
-/* Print PATH according to the context's path_format. */
-
-void
-diagnostic_text_output_format::print_path (const diagnostic_path &path)
-{
- const unsigned num_events = path.num_events ();
-
- switch (get_context ().get_path_format ())
- {
- case DPF_NONE:
- /* Do nothing. */
- return;
-
- case DPF_SEPARATE_EVENTS:
- {
- /* A note per event. */
- auto &logical_loc_mgr = path.get_logical_location_manager ();
- for (unsigned i = 0; i < num_events; i++)
- {
- const diagnostic_event &event = path.get_event (i);
- element_event_desc e_event_desc (event);
- diagnostic_event_id_t event_id (i);
- if (get_context ().show_path_depths_p ())
- {
- int stack_depth = event.get_stack_depth ();
- /* -fdiagnostics-path-format=separate-events doesn't print
- fndecl information, so with -fdiagnostics-show-path-depths
- print the fndecls too, if any. */
- if (logical_location logical_loc
- = event.get_logical_location ())
- {
- label_text name
- (logical_loc_mgr.get_name_for_path_output (logical_loc));
- inform (event.get_location (),
- "%@ %e (fndecl %qs, depth %i)",
- &event_id, &e_event_desc,
- name.get (), stack_depth);
- }
- else
- inform (event.get_location (),
- "%@ %e (depth %i)",
- &event_id, &e_event_desc,
- stack_depth);
- }
- else
- inform (event.get_location (),
- "%@ %e", &event_id, &e_event_desc);
- }
- }
- break;
-
- case DPF_INLINE_EVENTS:
- {
- /* Consolidate related events. */
- path_print_policy policy (*this);
- pretty_printer *const pp = get_printer ();
- const bool check_rich_locations = true;
- const bool colorize = pp_show_color (pp);
- const bool show_event_links = m_source_printing.show_event_links_p;
- path_summary summary (policy,
- *pp,
- path,
- check_rich_locations,
- colorize,
- show_event_links);
- char *saved_prefix = pp_take_prefix (pp);
- pp_set_prefix (pp, NULL);
- print_path_summary_as_text (summary, *this,
- get_context ().show_path_depths_p ());
- pp_flush (pp);
- pp_set_prefix (pp, saved_prefix);
- }
- break;
- }
-}
-
-#if CHECKING_P
-
-namespace selftest {
-
-/* Return true iff all events in PATH have locations for which column data
- is available, so that selftests that require precise string output can
- bail out for awkward line_table cases. */
-
-static bool
-path_events_have_column_data_p (const diagnostic_path &path)
-{
- for (unsigned idx = 0; idx < path.num_events (); idx++)
- {
- location_t event_loc = path.get_event (idx).get_location ();
- if (line_table->get_pure_location (event_loc)
- > LINE_MAP_MAX_LOCATION_WITH_COLS)
- return false;
- if (line_table->get_start (event_loc) > LINE_MAP_MAX_LOCATION_WITH_COLS)
- return false;
- if (line_table->get_finish (event_loc) > LINE_MAP_MAX_LOCATION_WITH_COLS)
- return false;
- }
- return true;
-}
-
-/* Verify that empty paths are handled gracefully. */
-
-static void
-test_empty_path (pretty_printer *event_pp)
-{
- test_diagnostic_path path (event_pp);
- ASSERT_FALSE (path.interprocedural_p ());
-
- test_diagnostic_context dc;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- ASSERT_EQ (summary.get_num_ranges (), 0);
-
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ ("",
- pp_formatted_text (text_output.get_printer ()));
-}
-
-/* Verify that print_path_summary works on a purely intraprocedural path. */
-
-static void
-test_intraprocedural_path (pretty_printer *event_pp)
-{
- test_diagnostic_path path (event_pp);
- const char *const funcname = "foo";
- path.add_event (UNKNOWN_LOCATION, funcname, 0, "first %qs", "free");
- path.add_event (UNKNOWN_LOCATION, funcname, 0, "double %qs", "free");
-
- ASSERT_FALSE (path.interprocedural_p ());
-
- test_diagnostic_context dc;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false, false, false);
- ASSERT_EQ (summary.get_num_ranges (), 1);
-
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ (" `foo': events 1-2 (depth 0)\n"
- " (1): first `free'\n"
- " (2): double `free'\n",
- pp_formatted_text (text_output.get_printer ()));
-}
-
-/* Verify that print_path_summary works on an interprocedural path. */
-
-static void
-test_interprocedural_path_1 (pretty_printer *event_pp)
-{
- test_diagnostic_path path (event_pp);
- path.add_entry ("test", 0);
- path.add_call ("test", 0, "make_boxed_int");
- path.add_call ("make_boxed_int", 1, "wrapped_malloc");
- path.add_event (UNKNOWN_LOCATION,
- "wrapped_malloc", 2, "calling malloc");
- path.add_return ("test", 0);
- path.add_call ("test", 0, "free_boxed_int");
- path.add_call ("free_boxed_int", 1, "wrapped_free");
- path.add_event (UNKNOWN_LOCATION, "wrapped_free", 2, "calling free");
- path.add_return ("test", 0);
- path.add_call ("test", 0, "free_boxed_int");
- path.add_call ("free_boxed_int", 1, "wrapped_free");
- path.add_event (UNKNOWN_LOCATION, "wrapped_free", 2, "calling free");
- ASSERT_EQ (path.num_events (), 18);
-
- ASSERT_TRUE (path.interprocedural_p ());
-
- {
- test_diagnostic_context dc;
- diagnostic_text_output_format text_output (dc, nullptr, false);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- ASSERT_EQ (summary.get_num_ranges (), 9);
-
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ
- (" `test': events 1-2 (depth 0)\n"
- " |\n"
- " | (1): entering `test'\n"
- " | (2): calling `make_boxed_int'\n"
- " |\n"
- " +--> `make_boxed_int': events 3-4 (depth 1)\n"
- " |\n"
- " | (3): entering `make_boxed_int'\n"
- " | (4): calling `wrapped_malloc'\n"
- " |\n"
- " +--> `wrapped_malloc': events 5-6 (depth 2)\n"
- " |\n"
- " | (5): entering `wrapped_malloc'\n"
- " | (6): calling malloc\n"
- " |\n"
- " <-------------+\n"
- " |\n"
- " `test': events 7-8 (depth 0)\n"
- " |\n"
- " | (7): returning to `test'\n"
- " | (8): calling `free_boxed_int'\n"
- " |\n"
- " +--> `free_boxed_int': events 9-10 (depth 1)\n"
- " |\n"
- " | (9): entering `free_boxed_int'\n"
- " | (10): calling `wrapped_free'\n"
- " |\n"
- " +--> `wrapped_free': events 11-12 (depth 2)\n"
- " |\n"
- " | (11): entering `wrapped_free'\n"
- " | (12): calling free\n"
- " |\n"
- " <-------------+\n"
- " |\n"
- " `test': events 13-14 (depth 0)\n"
- " |\n"
- " | (13): returning to `test'\n"
- " | (14): calling `free_boxed_int'\n"
- " |\n"
- " +--> `free_boxed_int': events 15-16 (depth 1)\n"
- " |\n"
- " | (15): entering `free_boxed_int'\n"
- " | (16): calling `wrapped_free'\n"
- " |\n"
- " +--> `wrapped_free': events 17-18 (depth 2)\n"
- " |\n"
- " | (17): entering `wrapped_free'\n"
- " | (18): calling free\n"
- " |\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ
- (" `test': events 1-2 (depth 0)\n"
- " │\n"
- " │ (1): entering `test'\n"
- " │ (2): calling `make_boxed_int'\n"
- " │\n"
- " └──> `make_boxed_int': events 3-4 (depth 1)\n"
- " │\n"
- " │ (3): entering `make_boxed_int'\n"
- " │ (4): calling `wrapped_malloc'\n"
- " │\n"
- " └──> `wrapped_malloc': events 5-6 (depth 2)\n"
- " │\n"
- " │ (5): entering `wrapped_malloc'\n"
- " │ (6): calling malloc\n"
- " │\n"
- " <─────────────┘\n"
- " │\n"
- " `test': events 7-8 (depth 0)\n"
- " │\n"
- " │ (7): returning to `test'\n"
- " │ (8): calling `free_boxed_int'\n"
- " │\n"
- " └──> `free_boxed_int': events 9-10 (depth 1)\n"
- " │\n"
- " │ (9): entering `free_boxed_int'\n"
- " │ (10): calling `wrapped_free'\n"
- " │\n"
- " └──> `wrapped_free': events 11-12 (depth 2)\n"
- " │\n"
- " │ (11): entering `wrapped_free'\n"
- " │ (12): calling free\n"
- " │\n"
- " <─────────────┘\n"
- " │\n"
- " `test': events 13-14 (depth 0)\n"
- " │\n"
- " │ (13): returning to `test'\n"
- " │ (14): calling `free_boxed_int'\n"
- " │\n"
- " └──> `free_boxed_int': events 15-16 (depth 1)\n"
- " │\n"
- " │ (15): entering `free_boxed_int'\n"
- " │ (16): calling `wrapped_free'\n"
- " │\n"
- " └──> `wrapped_free': events 17-18 (depth 2)\n"
- " │\n"
- " │ (17): entering `wrapped_free'\n"
- " │ (18): calling free\n"
- " │\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-
-}
-
-/* Example where we pop the stack to an intermediate frame, rather than the
- initial one. */
-
-static void
-test_interprocedural_path_2 (pretty_printer *event_pp)
-{
- test_diagnostic_path path (event_pp);
- path.add_entry ("foo", 0);
- path.add_call ("foo", 0, "bar");
- path.add_call ("bar", 1, "baz");
- path.add_return ("bar", 1);
- path.add_call ("bar", 1, "baz");
- ASSERT_EQ (path.num_events (), 8);
-
- ASSERT_TRUE (path.interprocedural_p ());
-
- {
- test_diagnostic_context dc;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- ASSERT_EQ (summary.get_num_ranges (), 5);
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ
- (" `foo': events 1-2 (depth 0)\n"
- " |\n"
- " | (1): entering `foo'\n"
- " | (2): calling `bar'\n"
- " |\n"
- " +--> `bar': events 3-4 (depth 1)\n"
- " |\n"
- " | (3): entering `bar'\n"
- " | (4): calling `baz'\n"
- " |\n"
- " +--> `baz': event 5 (depth 2)\n"
- " |\n"
- " | (5): entering `baz'\n"
- " |\n"
- " <------+\n"
- " |\n"
- " `bar': events 6-7 (depth 1)\n"
- " |\n"
- " | (6): returning to `bar'\n"
- " | (7): calling `baz'\n"
- " |\n"
- " +--> `baz': event 8 (depth 2)\n"
- " |\n"
- " | (8): entering `baz'\n"
- " |\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ
- (" `foo': events 1-2 (depth 0)\n"
- " │\n"
- " │ (1): entering `foo'\n"
- " │ (2): calling `bar'\n"
- " │\n"
- " └──> `bar': events 3-4 (depth 1)\n"
- " │\n"
- " │ (3): entering `bar'\n"
- " │ (4): calling `baz'\n"
- " │\n"
- " └──> `baz': event 5 (depth 2)\n"
- " │\n"
- " │ (5): entering `baz'\n"
- " │\n"
- " <──────┘\n"
- " │\n"
- " `bar': events 6-7 (depth 1)\n"
- " │\n"
- " │ (6): returning to `bar'\n"
- " │ (7): calling `baz'\n"
- " │\n"
- " └──> `baz': event 8 (depth 2)\n"
- " │\n"
- " │ (8): entering `baz'\n"
- " │\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-/* Verify that print_path_summary is sane in the face of a recursive
- diagnostic_path. */
-
-static void
-test_recursion (pretty_printer *event_pp)
-{
- test_diagnostic_path path (event_pp);
- path.add_entry ("factorial", 0);
- for (int depth = 0; depth < 3; depth++)
- path.add_call ("factorial", depth, "factorial");
- ASSERT_EQ (path.num_events (), 7);
-
- ASSERT_TRUE (path.interprocedural_p ());
-
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
-
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- ASSERT_EQ (summary.get_num_ranges (), 4);
-
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ
- (" `factorial': events 1-2 (depth 0)\n"
- " |\n"
- " | (1): entering `factorial'\n"
- " | (2): calling `factorial'\n"
- " |\n"
- " +--> `factorial': events 3-4 (depth 1)\n"
- " |\n"
- " | (3): entering `factorial'\n"
- " | (4): calling `factorial'\n"
- " |\n"
- " +--> `factorial': events 5-6 (depth 2)\n"
- " |\n"
- " | (5): entering `factorial'\n"
- " | (6): calling `factorial'\n"
- " |\n"
- " +--> `factorial': event 7 (depth 3)\n"
- " |\n"
- " | (7): entering `factorial'\n"
- " |\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
-
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, false);
- print_path_summary_as_text (summary, text_output, true);
- ASSERT_STREQ
- (" `factorial': events 1-2 (depth 0)\n"
- " │\n"
- " │ (1): entering `factorial'\n"
- " │ (2): calling `factorial'\n"
- " │\n"
- " └──> `factorial': events 3-4 (depth 1)\n"
- " │\n"
- " │ (3): entering `factorial'\n"
- " │ (4): calling `factorial'\n"
- " │\n"
- " └──> `factorial': events 5-6 (depth 2)\n"
- " │\n"
- " │ (5): entering `factorial'\n"
- " │ (6): calling `factorial'\n"
- " │\n"
- " └──> `factorial': event 7 (depth 3)\n"
- " │\n"
- " │ (7): entering `factorial'\n"
- " │\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-/* Helper class for writing tests of control flow visualization. */
-
-class control_flow_test
-{
-public:
- control_flow_test (const location &loc,
- const line_table_case &case_,
- const char *content)
- : m_tmp_file (loc, ".c", content,
- /* gcc_rich_location::add_location_if_nearby implicitly
- uses global_dc's file_cache, so we need to evict
- tmp when we're done. */
- &global_dc->get_file_cache ()),
- m_ltt (case_)
- {
- m_ord_map
- = linemap_check_ordinary (linemap_add (line_table, LC_ENTER, false,
- m_tmp_file.get_filename (), 0));
- linemap_line_start (line_table, 1, 100);
- }
-
- location_t get_line_and_column (int line, int column)
- {
- return linemap_position_for_line_and_column (line_table, m_ord_map,
- line, column);
- }
-
- location_t get_line_and_columns (int line, int first_column, int last_column)
- {
- return get_line_and_columns (line,
- first_column, first_column, last_column);
- }
-
- location_t get_line_and_columns (int line,
- int first_column,
- int caret_column,
- int last_column)
- {
- return make_location (get_line_and_column (line, caret_column),
- get_line_and_column (line, first_column),
- get_line_and_column (line, last_column));
- }
-
-private:
- temp_source_file m_tmp_file;
- line_table_test m_ltt;
- const line_map_ordinary *m_ord_map;
-};
-
-/* Example of event edges where all events can go in the same layout,
- testing the 6 combinations of:
- - ASCII vs Unicode vs event links off
- - line numbering on and off. */
-
-static void
-test_control_flow_1 (const line_table_case &case_,
- pretty_printer *event_pp)
-{
- /* Create a tempfile and write some text to it.
- ...000000000111111111122222222223333333333.
- ...123456789012345678901234567890123456789. */
- const char *content
- = ("int test (int *p)\n" /* line 1. */
- "{\n" /* line 2. */
- " if (p)\n" /* line 3. */
- " return 0;\n" /* line 4. */
- " return *p;\n" /* line 5. */
- "}\n"); /* line 6. */
-
- control_flow_test t (SELFTEST_LOCATION, case_, content);
-
- const location_t conditional = t.get_line_and_column (3, 7);
- const location_t cfg_dest = t.get_line_and_column (5, 10);
-
- test_diagnostic_path path (event_pp);
- path.add_event (conditional, nullptr, 0,
- "following %qs branch (when %qs is NULL)...",
- "false", "p");
- path.connect_to_next_event ();
-
- path.add_event (cfg_dest, nullptr, 0,
- "...to here");
- path.add_event (cfg_dest, nullptr, 0,
- "dereference of NULL %qs",
- "p");
-
- if (!path_events_have_column_data_p (path))
- return;
-
-
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:3:7:\n"
- " if (p)\n"
- " ^\n"
- " |\n"
- " (1) following `false' branch (when `p' is NULL)... ->-+\n"
- " |\n"
- "FILENAME:5:10:\n"
- " |\n"
- "+------------------------------------------------------------+\n"
- "| return *p;\n"
- "| ~\n"
- "| |\n"
- "+-------->(2) ...to here\n"
- " (3) dereference of NULL `p'\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = false;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:3:7:\n"
- " if (p)\n"
- " ^\n"
- " |\n"
- " (1) following `false' branch (when `p' is NULL)...\n"
- "FILENAME:5:10:\n"
- " return *p;\n"
- " ~\n"
- " |\n"
- " (2) ...to here\n"
- " (3) dereference of NULL `p'\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_line_numbers_p = true;
- dc.m_source_printing.show_event_links_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:3:7:\n"
- " 3 | if (p)\n"
- " | ^\n"
- " | |\n"
- " | (1) following `false' branch (when `p' is NULL)... ->-+\n"
- " | |\n"
- " | |\n"
- " |+------------------------------------------------------------+\n"
- " 4 || return 0;\n"
- " 5 || return *p;\n"
- " || ~\n"
- " || |\n"
- " |+-------->(2) ...to here\n"
- " | (3) dereference of NULL `p'\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_line_numbers_p = true;
- dc.m_source_printing.show_event_links_p = false;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:3:7:\n"
- " 3 | if (p)\n"
- " | ^\n"
- " | |\n"
- " | (1) following `false' branch (when `p' is NULL)...\n"
- " 4 | return 0;\n"
- " 5 | return *p;\n"
- " | ~\n"
- " | |\n"
- " | (2) ...to here\n"
- " | (3) dereference of NULL `p'\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
- dc.m_source_printing.show_event_links_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:3:7:\n"
- " if (p)\n"
- " ^\n"
- " |\n"
- " (1) following `false' branch (when `p' is NULL)... ─>─┐\n"
- " │\n"
- "FILENAME:5:10:\n"
- " │\n"
- "┌────────────────────────────────────────────────────────────┘\n"
- "│ return *p;\n"
- "│ ~\n"
- "│ |\n"
- "└────────>(2) ...to here\n"
- " (3) dereference of NULL `p'\n",
- pp_formatted_text (text_output.get_printer ()));
- }
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
- dc.m_source_printing.show_event_links_p = true;
- dc.m_source_printing.show_line_numbers_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:3:7:\n"
- " 3 | if (p)\n"
- " | ^\n"
- " | |\n"
- " | (1) following `false' branch (when `p' is NULL)... ─>─┐\n"
- " | │\n"
- " | │\n"
- " |┌────────────────────────────────────────────────────────────┘\n"
- " 4 |│ return 0;\n"
- " 5 |│ return *p;\n"
- " |│ ~\n"
- " |│ |\n"
- " |└────────>(2) ...to here\n"
- " | (3) dereference of NULL `p'\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-/* Complex example involving a backedge. */
-
-static void
-test_control_flow_2 (const line_table_case &case_,
- pretty_printer *event_pp)
-{
- /* Create a tempfile and write some text to it.
- ...000000000111111111122222222223333333333.
- ...123456789012345678901234567890123456789. */
- const char *content
- = ("int for_loop_noop_next (struct node *n)\n" /* <--------- line 1. */
- "{\n" /* <----------------------------------------------- line 2. */
- " int sum = 0;\n" /* <---------------------------------- line 3. */
- " for (struct node *iter = n; iter; iter->next)\n" /* <- line 4. */
- " sum += n->val;\n" /* <------------------------------ line 5. */
- " return sum;\n" /* <----------------------------------- line 6. */
- "}\n"); /* <-------------------------------------------- line 7. */
- /* Adapted from infinite-loop-linked-list.c where
- "iter->next" should be "iter = iter->next". */
-
- control_flow_test t (SELFTEST_LOCATION, case_, content);
-
- const location_t iter_test = t.get_line_and_columns (4, 31, 34);
- const location_t loop_body_start = t.get_line_and_columns (5, 12, 17);
- const location_t loop_body_end = t.get_line_and_columns (5, 5, 9, 17);
-
- test_diagnostic_path path (event_pp);
- path.add_event (iter_test, nullptr, 0, "infinite loop here");
-
- path.add_event (iter_test, nullptr, 0, "looping from here...");
- path.connect_to_next_event ();
-
- path.add_event (loop_body_start, nullptr, 0, "...to here");
-
- path.add_event (loop_body_end, nullptr, 0, "looping back...");
- path.connect_to_next_event ();
-
- path.add_event (iter_test, nullptr, 0, "...to here");
-
- if (!path_events_have_column_data_p (path))
- return;
-
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = true;
- dc.m_source_printing.show_line_numbers_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:4:31:\n"
- " 4 | for (struct node *iter = n; iter; iter->next)\n"
- " | ^~~~\n"
- " | |\n"
- " | (1) infinite loop here\n"
- " | (2) looping from here... ->-+\n"
- " | |\n"
- " | |\n"
- " |+----------------------------------------------------------+\n"
- " 5 || sum += n->val;\n"
- " || ~~~~~~ \n"
- " || |\n"
- " |+---------->(3) ...to here\n"
- /* We need to start an new event_range here as event (4) is to the
- left of event (3), and thus (4) would mess up the in-edge to (3). */
- " event 4\n"
- " 5 | sum += n->val;\n"
- " | ~~~~^~~~~~~~~\n"
- " | |\n"
- " | (4) looping back... ->-+\n"
- " | |\n"
- /* We need to start an new event_range here as event (4) with an
- out-edge is on a later line (line 5) than its destination event (5),
- on line 4. */
- " event 5\n"
- " | |\n"
- " |+-------------------------------+\n"
- " 4 || for (struct node *iter = n; iter; iter->next)\n"
- " || ^~~~\n"
- " || |\n"
- " |+----------------------------->(5) ...to here\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-/* Complex example involving a backedge and both an in-edge and out-edge
- on the same line. */
-
-static void
-test_control_flow_3 (const line_table_case &case_,
- pretty_printer *event_pp)
-{
- /* Create a tempfile and write some text to it.
- ...000000000111111111122222222223333333333.
- ...123456789012345678901234567890123456789. */
- const char *content
- = ("void test_missing_comparison_in_for_condition_1 (int n)\n"
- "{\n" /* <------------------------- line 2. */
- " for (int i = 0; n; i++)\n" /* <- line 3. */
- " {\n" /* <--------------------- line 4. */
- " }\n" /* <--------------------- line 5. */
- "}\n"); /* <----------------------- line 6. */
- /* Adapted from infinite-loop-1.c where the condition should have been
- "i < n", rather than just "n". */
-
- control_flow_test t (SELFTEST_LOCATION, case_, content);
-
- const location_t iter_test = t.get_line_and_column (3, 19);
- const location_t iter_next = t.get_line_and_columns (3, 22, 24);
-
- test_diagnostic_path path (event_pp);
- path.add_event (iter_test, nullptr, 0, "infinite loop here");
-
- path.add_event (iter_test, nullptr, 0, "looping from here...");
- path.connect_to_next_event ();
-
- path.add_event (iter_next, nullptr, 0, "...to here");
-
- path.add_event (iter_next, nullptr, 0, "looping back...");
- path.connect_to_next_event ();
-
- path.add_event (iter_test, nullptr, 0, "...to here");
-
- if (!path_events_have_column_data_p (path))
- return;
-
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = true;
- dc.m_source_printing.show_line_numbers_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-2\n"
- "FILENAME:3:19:\n"
- " 3 | for (int i = 0; n; i++)\n"
- " | ^\n"
- " | |\n"
- " | (1) infinite loop here\n"
- " | (2) looping from here... ->-+\n"
- " | |\n"
- " events 3-4\n"
- " | |\n"
- " |+----------------------------------------------+\n"
- " 3 || for (int i = 0; n; i++)\n"
- " || ^~~\n"
- " || |\n"
- " |+-------------------->(3) ...to here\n"
- " | (4) looping back... ->-+\n"
- " | |\n"
- /* We need to start an new event_range here as event (4) with an
- out-edge is on the same line as its destination event (5), but
- to the right, which we can't handle as a single event_range. */
- " event 5\n"
- " | |\n"
- " |+--------------------------------------------+\n"
- " 3 || for (int i = 0; n; i++)\n"
- " || ^\n"
- " || |\n"
- " |+----------------->(5) ...to here\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-/* Implementation of ASSERT_CFG_EDGE_PATH_STREQ. */
-
-static void
-assert_cfg_edge_path_streq (const location &loc,
- pretty_printer *event_pp,
- const location_t src_loc,
- const location_t dst_loc,
- const char *expected_str)
-{
- test_diagnostic_path path (event_pp);
- path.add_event (src_loc, nullptr, 0, "from here...");
- path.connect_to_next_event ();
-
- path.add_event (dst_loc, nullptr, 0, "...to here");
-
- if (!path_events_have_column_data_p (path))
- return;
-
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = true;
- dc.m_source_printing.show_line_numbers_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ_AT (loc, expected_str,
- pp_formatted_text (text_output.get_printer ()));
-}
-
-/* Assert that if we make a path with an event with "from here..." at SRC_LOC
- leading to an event "...to here" at DST_LOC that we print the path
- as EXPECTED_STR. */
-
-#define ASSERT_CFG_EDGE_PATH_STREQ(SRC_LOC, DST_LOC, EXPECTED_STR) \
- assert_cfg_edge_path_streq ((SELFTEST_LOCATION), (event_pp), \
- (SRC_LOC), (DST_LOC), (EXPECTED_STR))
-
-/* Various examples of edge, trying to cover all combinations of:
- - relative x positive of src label and dst label
- - relative y position of labels:
- - on same line
- - on next line
- - on line after next
- - big gap, where src is before dst
- - big gap, where src is after dst
- and other awkward cases. */
-
-static void
-test_control_flow_4 (const line_table_case &case_,
- pretty_printer *event_pp)
-{
- std::string many_lines;
- for (int i = 1; i <= 100; i++)
- /* ............000000000111
- ............123456789012. */
- many_lines += "LHS RHS\n";
- control_flow_test t (SELFTEST_LOCATION, case_, many_lines.c_str ());
-
- /* Same line. */
- {
- /* LHS -> RHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 1, 3),
- t.get_line_and_columns (3, 10, 12),
- (" event 1\n"
- "FILENAME:3:1:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " event 2\n"
- " | |\n"
- " |+--------------------+\n"
- " 3 ||LHS RHS\n"
- " || ^~~\n"
- " || |\n"
- " |+-------->(2) ...to here\n"));
-
- /* RHS -> LHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 10, 12),
- t.get_line_and_columns (3, 1, 3),
- (" event 1\n"
- "FILENAME:3:10:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " event 2\n"
- " | |\n"
- " |+-----------------------------+\n"
- " 3 ||LHS RHS\n"
- " ||^~~\n"
- " |||\n"
- " |+(2) ...to here\n"));
- }
-
- /* Next line. */
- {
- /* LHS -> RHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 1, 3),
- t.get_line_and_columns (4, 5, 7),
- (" events 1-2\n"
- "FILENAME:3:1:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " | |\n"
- " |+--------------------+\n"
- " 4 ||LHS RHS\n"
- " || ~~~\n"
- " || |\n"
- " |+--->(2) ...to here\n"));
-
- /* RHS -> LHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 10, 12),
- t.get_line_and_columns (4, 1, 3),
- (" events 1-2\n"
- "FILENAME:3:10:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " | |\n"
- " |+-----------------------------+\n"
- " 4 ||LHS RHS\n"
- " ||~~~ \n"
- " |||\n"
- " |+(2) ...to here\n"));
- }
-
- /* Line after next. */
- {
- /* LHS -> RHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 1, 3),
- t.get_line_and_columns (5, 10, 12),
- (" events 1-2\n"
- "FILENAME:3:1:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " | |\n"
- " |+--------------------+\n"
- " 4 ||LHS RHS\n"
- " 5 ||LHS RHS\n"
- " || ~~~\n"
- " || |\n"
- " |+-------->(2) ...to here\n"));
-
- /* RHS -> LHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 10, 12),
- t.get_line_and_columns (5, 1, 3),
- (" events 1-2\n"
- "FILENAME:3:10:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " | |\n"
- " |+-----------------------------+\n"
- " 4 ||LHS RHS\n"
- " 5 ||LHS RHS\n"
- " ||~~~ \n"
- " |||\n"
- " |+(2) ...to here\n"));
- }
-
- /* Big gap, increasing line number. */
- {
- /* LHS -> RHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 1, 3),
- t.get_line_and_columns (97, 10, 12),
- (" events 1-2\n"
- "FILENAME:3:1:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- "......\n"
- " | |\n"
- " |+--------------------+\n"
- " 97 ||LHS RHS\n"
- " || ~~~\n"
- " || |\n"
- " |+-------->(2) ...to here\n"));
-
- /* RHS -> LHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 10, 12),
- t.get_line_and_columns (97, 1, 3),
- (" events 1-2\n"
- "FILENAME:3:10:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- "......\n"
- " | |\n"
- " |+-----------------------------+\n"
- " 97 ||LHS RHS\n"
- " ||~~~ \n"
- " |||\n"
- " |+(2) ...to here\n"));
- }
-
- /* Big gap, decreasing line number. */
- {
- /* LHS -> RHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (97, 1, 3),
- t.get_line_and_columns (3, 10, 12),
- (" event 1\n"
- "FILENAME:97:1:\n"
- " 97 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " event 2\n"
- " | |\n"
- " |+--------------------+\n"
- " 3 ||LHS RHS\n"
- " || ^~~\n"
- " || |\n"
- " |+-------->(2) ...to here\n"));
-
- /* RHS -> LHS. */
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (97, 10, 12),
- t.get_line_and_columns (3, 1, 3),
- (" event 1\n"
- "FILENAME:97:10:\n"
- " 97 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " event 2\n"
- " | |\n"
- " |+-----------------------------+\n"
- " 3 ||LHS RHS\n"
- " ||^~~\n"
- " |||\n"
- " |+(2) ...to here\n"));
- }
-
- /* Unknown src. */
- {
- ASSERT_CFG_EDGE_PATH_STREQ
- (UNKNOWN_LOCATION,
- t.get_line_and_columns (3, 10, 12),
- (" event 1\n"
- " (1): from here...\n"
- " event 2\n"
- "FILENAME:3:10:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " |+-------->(2) ...to here\n"));
- }
-
- /* Unknown dst. */
- {
- ASSERT_CFG_EDGE_PATH_STREQ
- (t.get_line_and_columns (3, 1, 3),
- UNKNOWN_LOCATION,
- (" event 1\n"
- "FILENAME:3:1:\n"
- " 3 | LHS RHS\n"
- " | ^~~\n"
- " | |\n"
- " | (1) from here... ->-+\n"
- " | |\n"
- " event 2\n"
- "FILENAME:\n"
- " (2): ...to here\n"));
- }
-}
-
-/* Another complex example, adapted from data-model-20.c. */
-
-static void
-test_control_flow_5 (const line_table_case &case_,
- pretty_printer *event_pp)
-{
- /* Create a tempfile and write some text to it.
- ...000000000111111111122222222223333333333444444444455555555556666666666.
- ...123456789012345678901234567890123456789012345678901234567890123456789. */
- const char *content
- = (" if ((arr = (struct foo **)malloc(n * sizeof(struct foo *))) == NULL)\n"
- " return NULL;\n" /* <------------------------- line 2. */
- "\n" /* <----------------------------------------- line 3. */
- " for (i = 0; i < n; i++) {\n" /* <-------------- line 4. */
- " if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) {\n");
-
- control_flow_test t (SELFTEST_LOCATION, case_, content);
-
- test_diagnostic_path path (event_pp);
- /* (1) */
- path.add_event (t.get_line_and_column (1, 6), nullptr, 0,
- "following %qs branch (when %qs is non-NULL)...",
- "false", "arr");
- path.connect_to_next_event ();
-
- /* (2) */
- path.add_event (t.get_line_and_columns (4, 8, 10, 12), nullptr, 0,
- "...to here");
-
- /* (3) */
- path.add_event (t.get_line_and_columns (4, 15, 17, 19), nullptr, 0,
- "following %qs branch (when %qs)...",
- "true", "i < n");
- path.connect_to_next_event ();
-
- /* (4) */
- path.add_event (t.get_line_and_column (5, 13), nullptr, 0,
- "...to here");
-
- /* (5) */
- path.add_event (t.get_line_and_columns (5, 33, 58), nullptr, 0,
- "allocated here");
-
- if (!path_events_have_column_data_p (path))
- return;
-
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = true;
- dc.m_source_printing.show_line_numbers_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-5\n"
- "FILENAME:1:6:\n"
- " 1 | if ((arr = (struct foo **)malloc(n * sizeof(struct foo *))) == NULL)\n"
- " | ^\n"
- " | |\n"
- " | (1) following `false' branch (when `arr' is non-NULL)... ->-+\n"
- " | |\n"
- "......\n"
- " | |\n"
- " |+-----------------------------------------------------------------+\n"
- " 4 || for (i = 0; i < n; i++) {\n"
- " || ~~~~~ ~~~~~\n"
- " || | |\n"
- " || | (3) following `true' branch (when `i < n')... ->-+\n"
- " |+-------->(2) ...to here |\n"
- " | |\n"
- " | |\n"
- " |+-----------------------------------------------------------------+\n"
- " 5 || if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) {\n"
- " || ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
- " || | |\n"
- " |+----------->(4) ...to here (5) allocated here\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-/* Another complex example, adapted from loop-3.c. */
-
-static void
-test_control_flow_6 (const line_table_case &case_,
- pretty_printer *event_pp)
-{
- /* Create a tempfile and write some text to it.
- ...000000000111111111122222222223333333.
- ...123456789012345678901234567890123456. */
- const char *content
- = ("#include <stdlib.h>\n" /* <------------------ line 1. */
- "\n" /* <------------------------------------- line 2. */
- "void test(int c)\n" /* <--------------------- line 3. */
- "{\n" /* <------------------------------------ line 4. */
- " int i;\n" /* <----------------------------- line 5. */
- " char *buffer = (char*)malloc(256);\n" /* <- line 6. */
- "\n" /* <------------------------------------- line 7. */
- " for (i=0; i<255; i++) {\n" /* <------------ line 8. */
- " buffer[i] = c;\n" /* <------------------- line 9. */
- "\n" /* <------------------------------------- line 10. */
- " free(buffer);\n" /* <-------------------- line 11. */
- " }\n"); /* <-------------------------------- line 12. */
-
- control_flow_test t (SELFTEST_LOCATION, case_, content);
-
- test_diagnostic_path path (event_pp);
- /* (1) */
- path.add_event (t.get_line_and_columns (6, 25, 35), nullptr, 0,
- "allocated here");
-
- /* (2) */
- path.add_event (t.get_line_and_columns (8, 13, 14, 17), nullptr, 0,
- "following %qs branch (when %qs)...",
- "true", "i <= 254");
- path.connect_to_next_event ();
-
- /* (3) */
- path.add_event (t.get_line_and_columns (9, 5, 15, 17), nullptr, 0,
- "...to here");
-
- /* (4) */
- path.add_event (t.get_line_and_columns (8, 13, 14, 17), nullptr, 0,
- "following %qs branch (when %qs)...",
- "true", "i <= 254");
- path.connect_to_next_event ();
-
- /* (5) */
- path.add_event (t.get_line_and_columns (9, 5, 15, 17), nullptr, 0,
- "...to here");
-
- if (!path_events_have_column_data_p (path))
- return;
-
- {
- test_diagnostic_context dc;
- dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
- dc.m_source_printing.show_event_links_p = true;
- dc.m_source_printing.show_line_numbers_p = true;
- diagnostic_text_output_format text_output (dc);
- path_print_policy policy (text_output);
- path_summary summary (policy, *event_pp, path, true);
- print_path_summary_as_text (summary, text_output, false);
- ASSERT_STREQ
- (" events 1-3\n"
- "FILENAME:6:25:\n"
- " 6 | char *buffer = (char*)malloc(256);\n"
- " | ^~~~~~~~~~~\n"
- " | |\n"
- " | (1) allocated here\n"
- " 7 | \n"
- " 8 | for (i=0; i<255; i++) {\n"
- " | ~~~~~ \n"
- " | |\n"
- " | (2) following `true' branch (when `i <= 254')... ->-+\n"
- " | |\n"
- " | |\n"
- " |+-----------------------------------------------------------------+\n"
- " 9 || buffer[i] = c;\n"
- " || ~~~~~~~~~~~~~ \n"
- " || |\n"
- " |+------------->(3) ...to here\n"
- " events 4-5\n"
- " 8 | for (i=0; i<255; i++) {\n"
- " | ~^~~~\n"
- " | |\n"
- " | (4) following `true' branch (when `i <= 254')... ->-+\n"
- " | |\n"
- " | |\n"
- " |+-----------------------------------------------------------------+\n"
- " 9 || buffer[i] = c;\n"
- " || ~~~~~~~~~~~~~\n"
- " || |\n"
- " |+------------->(5) ...to here\n",
- pp_formatted_text (text_output.get_printer ()));
- }
-}
-
-static void
-control_flow_tests (const line_table_case &case_)
-{
- pretty_printer pp;
- pp_show_color (&pp) = false;
-
- test_control_flow_1 (case_, &pp);
- test_control_flow_2 (case_, &pp);
- test_control_flow_3 (case_, &pp);
- test_control_flow_4 (case_, &pp);
- test_control_flow_5 (case_, &pp);
- test_control_flow_6 (case_, &pp);
-}
-
-/* Run all of the selftests within this file. */
-
-void
-diagnostic_path_cc_tests ()
-{
- pretty_printer pp;
- pp_show_color (&pp) = false;
-
- auto_fix_quotes fix_quotes;
- test_empty_path (&pp);
- test_intraprocedural_path (&pp);
- test_interprocedural_path_1 (&pp);
- test_interprocedural_path_2 (&pp);
- test_recursion (&pp);
- for_each_line_table_case (control_flow_tests);
-}
-
-} // namespace selftest
-
#if __GNUC__ >= 10
# pragma GCC diagnostic pop
#endif
-
-#endif /* #if CHECKING_P */
diff --git a/gcc/diagnostic-show-locus.cc b/gcc/diagnostic-show-locus.cc
index 898efe7..397fffb 100644
--- a/gcc/diagnostic-show-locus.cc
+++ b/gcc/diagnostic-show-locus.cc
@@ -19,6 +19,8 @@ along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
#include "config.h"
+#define INCLUDE_MAP
+#define INCLUDE_STRING
#define INCLUDE_VECTOR
#include "system.h"
#include "coretypes.h"
@@ -37,6 +39,8 @@ along with GCC; see the file COPYING3. If not see
#include "text-art/types.h"
#include "text-art/theme.h"
#include "diagnostic-label-effects.h"
+#include "xml.h"
+#include "xml-printer.h"
#ifdef HAVE_TERMIOS_H
# include <termios.h>
@@ -70,7 +74,8 @@ struct point_state
bool draw_caret_p;
};
-/* A class to inject colorization codes when printing the diagnostic locus.
+/* A class to inject colorization codes when printing the diagnostic locus
+ as text.
It has one kind of colorization for each of:
- normal text
@@ -369,17 +374,348 @@ struct char_display_policy : public cpp_char_column_policy
public:
char_display_policy (int tabstop,
int (*width_cb) (cppchar_t c),
- void (*print_cb) (pretty_printer *pp,
- const cpp_decoded_char &cp))
+ void (*print_text_cb) (to_text &sink,
+ const cpp_decoded_char &cp),
+ void (*print_html_cb) (to_html &sink,
+ const cpp_decoded_char &cp))
: cpp_char_column_policy (tabstop, width_cb),
- m_print_cb (print_cb)
+ m_print_text_cb (print_text_cb),
+ m_print_html_cb (print_html_cb)
{
}
- void (*m_print_cb) (pretty_printer *pp,
- const cpp_decoded_char &cp);
+ void (*m_print_text_cb) (to_text &sink,
+ const cpp_decoded_char &cp);
+ void (*m_print_html_cb) (to_html &sink,
+ const cpp_decoded_char &cp);
};
+template <typename Sink> class layout_printer;
+
+} // anonymous namespace
+
+/* This code is written generically to write either:
+ - text, to a pretty_printer, potentially with colorization codes, or
+ - html, to an xml::printer, with nested HTML tags.
+
+ This is handled via a "Sink" template, which is either to_text
+ or to_html. */
+
+/* Writing text output. */
+
+struct to_text
+{
+ friend class layout_printer<to_text>;
+
+ to_text (pretty_printer &pp,
+ colorizer &colorizer)
+ : m_pp (pp),
+ m_colorizer (&colorizer)
+ {
+ m_saved_rule = pp_prefixing_rule (&m_pp);
+ pp_prefixing_rule (&m_pp) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
+ }
+ to_text (pretty_printer &pp,
+ colorizer *colorizer)
+ : m_pp (pp),
+ m_colorizer (colorizer)
+ {
+ m_saved_rule = pp_prefixing_rule (&m_pp);
+ pp_prefixing_rule (&m_pp) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
+ }
+ ~to_text ()
+ {
+
+ pp_prefixing_rule (&m_pp) = m_saved_rule;
+ }
+
+ static bool is_text () { return true; }
+ static bool is_html () { return false; }
+
+ void emit_text_prefix ()
+ {
+ pp_emit_prefix (&m_pp);
+ }
+
+ void push_html_tag (std::string, bool)
+ {
+ // no-op for text
+ }
+ void push_html_tag_with_class (std::string, std::string, bool)
+ {
+ // no-op for text
+ }
+ void pop_html_tag (std::string)
+ {
+ // no-op for text
+ }
+
+ void add_html_tag_with_class (std::string, std::string, bool)
+ {
+ // no-op for text
+ }
+
+ void add_space ()
+ {
+ pp_space (&m_pp);
+ }
+
+ void add_character (cppchar_t ch)
+ {
+ pp_unicode_character (&m_pp, ch);
+ }
+
+ void add_utf8_byte (char b)
+ {
+ pp_character (&m_pp, b);
+ }
+
+ void add_text (const char *text)
+ {
+ pp_string (&m_pp, text);
+ }
+
+ void print_decoded_char (const char_display_policy &char_policy,
+ cpp_decoded_char cp)
+ {
+ char_policy.m_print_text_cb (*this, cp);
+ }
+
+ void colorize_text_ensure_normal ()
+ {
+ gcc_assert (m_colorizer);
+ m_colorizer->set_normal_text ();
+ }
+
+ void colorize_text_for_range_idx (int range_idx)
+ {
+ gcc_assert (m_colorizer);
+ m_colorizer->set_range (range_idx);
+ }
+
+ void colorize_text_for_cfg_edge ()
+ {
+ gcc_assert (m_colorizer);
+ m_colorizer->set_cfg_edge ();
+ }
+
+ void colorize_text_for_fixit_insert ()
+ {
+ gcc_assert (m_colorizer);
+ m_colorizer->set_fixit_insert ();
+ }
+
+ void colorize_text_for_fixit_delete ()
+ {
+ gcc_assert (m_colorizer);
+ m_colorizer->set_fixit_delete ();
+ }
+
+ void
+ invoke_start_span_fn (const diagnostic_source_print_policy &source_policy,
+ const diagnostic_location_print_policy &loc_policy,
+ const expanded_location &exploc)
+ {
+ source_policy.get_text_start_span_fn () (loc_policy, *this, exploc);
+ }
+
+ // Text-specific functions
+ void add_newline ()
+ {
+ pp_newline (&m_pp);
+ }
+
+ pretty_printer &m_pp;
+private:
+ colorizer *m_colorizer;
+ diagnostic_prefixing_rule_t m_saved_rule;
+};
+
+/* Writing HTML output. */
+
+struct to_html
+{
+ friend class layout_printer<to_html>;
+
+ to_html (xml::printer &xp,
+ html_label_writer *html_label_writer)
+ : m_xp (xp),
+ m_html_label_writer (html_label_writer)
+ {}
+
+ static bool is_text () { return false; }
+ static bool is_html () { return true; }
+
+ void emit_text_prefix ()
+ {
+ // no-op for HTML
+ }
+
+ void push_html_tag (std::string name,
+ bool preserve_whitespace)
+ {
+ m_xp.push_tag (std::move (name), preserve_whitespace);
+ }
+
+ void push_html_tag_with_class (std::string name,
+ std::string class_,
+ bool preserve_whitespace)
+ {
+ m_xp.push_tag_with_class (std::move (name),
+ std::move (class_),
+ preserve_whitespace);
+ }
+
+ void pop_html_tag (std::string /*name*/)
+ {
+ m_xp.pop_tag ();
+ }
+
+ void add_html_tag_with_class (std::string name,
+ std::string class_,
+ bool preserve_whitespace)
+ {
+ auto element = std::make_unique<xml::element> (std::move (name),
+ preserve_whitespace);
+ element->set_attr ("class", std::move (class_));
+ m_xp.append (std::move (element));
+ }
+
+ void add_raw_html (const char *src)
+ {
+ m_xp.add_raw (src);
+ }
+
+ void add_space ()
+ {
+ m_xp.add_text (" ");
+ }
+
+ void add_character (cppchar_t ch)
+ {
+ pp_clear_output_area (&m_scratch_pp);
+ pp_unicode_character (&m_scratch_pp, ch);
+ m_xp.add_text (pp_formatted_text (&m_scratch_pp));
+ }
+
+ void add_utf8_byte (char b)
+ {
+ m_xp.add_text (std::string (1, b));
+ }
+
+ void add_text (const char *text)
+ {
+ m_xp.add_text (text);
+ }
+
+ void print_decoded_char (const char_display_policy &char_policy,
+ cpp_decoded_char cp)
+ {
+ char_policy.m_print_html_cb (*this, cp);
+ }
+
+ void colorize_text_ensure_normal ()
+ {
+ // no-op for HTML
+ }
+
+ void colorize_text_for_range_idx (int)
+ {
+ // no-op for HTML
+ }
+
+ void colorize_text_for_cfg_edge ()
+ {
+ // no-op for HTML
+ }
+
+ void colorize_text_for_fixit_insert ()
+ {
+ // no-op for HTML
+ }
+
+ void colorize_text_for_fixit_delete ()
+ {
+ // no-op for HTML
+ }
+
+ void
+ invoke_start_span_fn (const diagnostic_source_print_policy &source_policy,
+ const diagnostic_location_print_policy &loc_policy,
+ const expanded_location &exploc)
+ {
+ source_policy.get_html_start_span_fn () (loc_policy, *this, exploc);
+ }
+
+ xml::printer &m_xp;
+private:
+ html_label_writer *m_html_label_writer;
+ pretty_printer m_scratch_pp;
+};
+
+void
+diagnostic_location_print_policy::
+print_text_span_start (const diagnostic_context &dc,
+ pretty_printer &pp,
+ const expanded_location &exploc)
+{
+ to_text sink (pp, nullptr);
+ diagnostic_source_print_policy source_policy (dc);
+ source_policy.get_text_start_span_fn () (*this, sink, exploc);
+}
+
+void
+diagnostic_location_print_policy::
+print_html_span_start (const diagnostic_context &dc,
+ xml::printer &xp,
+ const expanded_location &exploc)
+{
+ to_html sink (xp, nullptr);
+ diagnostic_source_print_policy source_policy (dc);
+ source_policy.get_html_start_span_fn () (*this, sink, exploc);
+}
+
+pretty_printer *
+get_printer (to_text &sink)
+{
+ return &sink.m_pp;
+}
+
+template<>
+void
+default_diagnostic_start_span_fn<to_text> (const diagnostic_location_print_policy &loc_policy,
+ to_text &sink,
+ expanded_location exploc)
+{
+ const diagnostic_column_policy &column_policy
+ = loc_policy.get_column_policy ();
+ label_text text
+ = column_policy.get_location_text (exploc,
+ loc_policy.show_column_p (),
+ pp_show_color (&sink.m_pp));
+ pp_string (&sink.m_pp, text.get ());
+ pp_newline (&sink.m_pp);
+}
+
+template<>
+void
+default_diagnostic_start_span_fn<to_html> (const diagnostic_location_print_policy &loc_policy,
+ to_html &sink,
+ expanded_location exploc)
+{
+ const diagnostic_column_policy &column_policy
+ = loc_policy.get_column_policy ();
+ label_text text
+ = column_policy.get_location_text (exploc,
+ loc_policy.show_column_p (),
+ false);
+ sink.m_xp.push_tag_with_class ("span", "location", true);
+ sink.m_xp.add_text (text.get ());
+ sink.m_xp.pop_tag (); // span
+}
+
+namespace {
+
/* A class to control the overall layout when printing a diagnostic.
The layout is determined within the constructor.
@@ -392,7 +728,8 @@ struct char_display_policy : public cpp_char_column_policy
class layout
{
public:
- friend class layout_printer;
+ friend class layout_printer<to_text>;
+ friend class layout_printer<to_html>;
layout (const diagnostic_source_print_policy &source_policy,
const rich_location &richloc,
@@ -458,16 +795,24 @@ class layout
bool m_escape_on_output;
};
-/* A bundle of state for printing a particular layout
- to a particular pretty_printer. */
+class line_label;
+enum class margin_kind
+{
+ normal,
+ insertion,
+ ruler
+};
+
+/* A bundle of state for printing a particular layout
+ to a particular Sink (either to_text or to_html). */
+template <typename Sink>
class layout_printer
{
public:
- layout_printer (pretty_printer &pp,
+ layout_printer (Sink &sink,
const layout &layout,
- const rich_location &richloc,
- diagnostic_t diagnostic_kind);
+ bool is_diagnostic_path);
void print (const diagnostic_source_print_policy &source_policy);
@@ -485,11 +830,13 @@ private:
line_bounds print_source_line (linenum_type row, const char *line,
int line_bytes);
void print_leftmost_column ();
- void start_annotation_line (char margin_char = ' ');
+ void start_annotation_line (enum margin_kind);
+ void end_line ();
void print_annotation_line (linenum_type row, const line_bounds lbounds);
void print_any_labels (linenum_type row);
+ void begin_label (const line_label &label);
+ void end_label ();
void print_trailing_fixits (linenum_type row);
- void print_newline ();
void
move_to_column (int *column, int dest_column, bool add_left_margin);
@@ -497,9 +844,8 @@ private:
void print_any_right_to_left_edge_lines ();
private:
- pretty_printer &m_pp;
+ Sink &m_sink;
const layout &m_layout;
- colorizer m_colorizer;
bool m_is_diagnostic_path;
/* Fields for handling links between labels (e.g. for showing CFG edges
@@ -1178,8 +1524,9 @@ fixit_cmp (const void *p_a, const void *p_b)
/* Callback for char_display_policy::m_print_cb for printing source chars
when not escaping the source. */
+template <class Sink>
static void
-default_print_decoded_ch (pretty_printer *pp,
+default_print_decoded_ch (Sink &sink,
const cpp_decoded_char &decoded_ch)
{
for (const char *ptr = decoded_ch.m_start_byte;
@@ -1187,11 +1534,11 @@ default_print_decoded_ch (pretty_printer *pp,
{
if (*ptr == '\0' || *ptr == '\r')
{
- pp_space (pp);
+ sink.add_space ();
continue;
}
- pp_character (pp, *ptr);
+ sink.add_utf8_byte (*ptr);
}
}
@@ -1219,8 +1566,9 @@ escape_as_bytes_width (cppchar_t ch)
/* Callback for char_display_policy::m_print_cb for printing source chars
when escaping with DIAGNOSTICS_ESCAPE_FORMAT_BYTES. */
+template <typename Sink>
static void
-escape_as_bytes_print (pretty_printer *pp,
+escape_as_bytes_print (Sink &sink,
const cpp_decoded_char &decoded_ch)
{
if (!decoded_ch.m_valid_ch)
@@ -1230,14 +1578,14 @@ escape_as_bytes_print (pretty_printer *pp,
{
char buf[16];
sprintf (buf, "<%02x>", (unsigned char)*iter);
- pp_string (pp, buf);
+ sink.add_text (buf);
}
return;
}
cppchar_t ch = decoded_ch.m_ch;
if (ch < 0x80 && ISPRINT (ch))
- pp_character (pp, ch);
+ sink.add_character (ch);
else
{
for (const char *iter = decoded_ch.m_start_byte;
@@ -1245,7 +1593,7 @@ escape_as_bytes_print (pretty_printer *pp,
{
char buf[16];
sprintf (buf, "<%02x>", (unsigned char)*iter);
- pp_string (pp, buf);
+ sink.add_text (buf);
}
}
}
@@ -1275,24 +1623,25 @@ escape_as_unicode_width (cppchar_t ch)
/* Callback for char_display_policy::m_print_cb for printing source chars
when escaping with DIAGNOSTICS_ESCAPE_FORMAT_UNICODE. */
+template <typename Sink>
static void
-escape_as_unicode_print (pretty_printer *pp,
+escape_as_unicode_print (Sink &sink,
const cpp_decoded_char &decoded_ch)
{
if (!decoded_ch.m_valid_ch)
{
- escape_as_bytes_print (pp, decoded_ch);
+ escape_as_bytes_print<Sink> (sink, decoded_ch);
return;
}
cppchar_t ch = decoded_ch.m_ch;
if (ch < 0x80 && ISPRINT (ch))
- pp_character (pp, ch);
+ sink.add_character (ch);
else
{
char buf[16];
sprintf (buf, "<U+%04X>", ch);
- pp_string (pp, buf);
+ sink.add_text (buf);
}
}
@@ -1306,7 +1655,8 @@ make_char_policy (const diagnostic_source_print_policy &source_policy,
char_display_policy result
(source_policy.get_column_policy ().get_tabstop (),
cpp_wcwidth,
- default_print_decoded_ch);
+ default_print_decoded_ch<to_text>,
+ default_print_decoded_ch<to_html>);
/* If the diagnostic suggests escaping non-ASCII bytes, then
use policy from user-supplied options. */
@@ -1319,11 +1669,13 @@ make_char_policy (const diagnostic_source_print_policy &source_policy,
gcc_unreachable ();
case DIAGNOSTICS_ESCAPE_FORMAT_UNICODE:
result.m_width_cb = escape_as_unicode_width;
- result.m_print_cb = escape_as_unicode_print;
+ result.m_print_text_cb = escape_as_unicode_print<to_text>;
+ result.m_print_html_cb = escape_as_unicode_print<to_html>;
break;
case DIAGNOSTICS_ESCAPE_FORMAT_BYTES:
result.m_width_cb = escape_as_bytes_width;
- result.m_print_cb = escape_as_bytes_print;
+ result.m_print_text_cb = escape_as_bytes_print<to_text>;
+ result.m_print_html_cb = escape_as_bytes_print<to_html>;
break;
}
}
@@ -1530,17 +1882,32 @@ layout::will_show_line_p (linenum_type row) const
/* Print a line showing a gap in the line numbers, for showing the boundary
between two line spans. */
+template<>
void
-layout_printer::print_gap_in_line_numbering ()
+layout_printer<to_text>::print_gap_in_line_numbering ()
{
gcc_assert (m_layout.m_options.show_line_numbers_p);
- pp_emit_prefix (&m_pp);
+ m_sink.emit_text_prefix ();
for (int i = 0; i < m_layout.get_linenum_width () + 1; i++)
- pp_character (&m_pp, '.');
+ m_sink.add_character ('.');
- pp_newline (&m_pp);
+ m_sink.add_newline ();
+}
+
+template<>
+void
+layout_printer<to_html>::print_gap_in_line_numbering ()
+{
+ gcc_assert (m_layout.m_options.show_line_numbers_p);
+
+ m_sink.add_raw_html
+ ("<tbody class=\"line-span-jump\">\n"
+ "<tr class=\"line-span-jump-row\">"
+ "<td class=\"linenum-gap\">[...]</td>"
+ "<td class=\"source-gap\"/></tr>\n"
+ "</tbody>\n");
}
/* Return true iff we should print a heading when starting the
@@ -1854,21 +2221,32 @@ layout::calculate_x_offset_display ()
colorization and tab expansion, this function tracks the line position in
both byte and display column units. */
+template<typename Sink>
line_bounds
-layout_printer::print_source_line (linenum_type row, const char *line, int line_bytes)
+layout_printer<Sink>::print_source_line (linenum_type row,
+ const char *line,
+ int line_bytes)
{
- m_colorizer.set_normal_text ();
-
- pp_emit_prefix (&m_pp);
+ m_sink.colorize_text_ensure_normal ();
+ m_sink.push_html_tag ("tr", true);
+ m_sink.emit_text_prefix ();
if (m_layout.m_options.show_line_numbers_p)
{
+ m_sink.push_html_tag_with_class ("td", "linenum", true);
int width = num_digits (row);
for (int i = 0; i < m_layout.get_linenum_width () - width; i++)
- pp_space (&m_pp);
- pp_printf (&m_pp, "%i |", row);
+ m_sink.add_space ();
+ char buf[20];
+ sprintf (buf, "%i", row);
+ m_sink.add_text (buf);
+ if (Sink::is_text ())
+ m_sink.add_text (" |");
+ m_sink.pop_html_tag ("td");
}
+ m_sink.push_html_tag_with_class ("td", "left-margin", true);
print_leftmost_column ();
+ m_sink.pop_html_tag ("td");
/* We will stop printing the source line at any trailing whitespace. */
line_bytes = get_line_bytes_without_trailing_whitespace (line,
@@ -1879,6 +2257,8 @@ layout_printer::print_source_line (linenum_type row, const char *line, int line_
tab expansion, and for implementing m_x_offset_display. */
cpp_display_width_computation dw (line, line_bytes, m_layout.m_char_policy);
+ m_sink.push_html_tag_with_class ("td", "source", true);
+
/* Skip the first m_x_offset_display display columns. In case the leading
portion that will be skipped ends with a character with wcwidth > 1, then
it is possible we skipped too much, so account for that by padding with
@@ -1889,7 +2269,7 @@ layout_printer::print_source_line (linenum_type row, const char *line, int line_
for (int skipped_display_cols
= dw.advance_display_cols (m_layout.m_x_offset_display);
skipped_display_cols > m_layout.m_x_offset_display; --skipped_display_cols)
- pp_space (&m_pp);
+ m_sink.add_space ();
/* Print the line and compute the line_bounds. */
line_bounds lbounds;
@@ -1917,9 +2297,9 @@ layout_printer::print_source_line (linenum_type row, const char *line, int line_
CU_BYTES,
&state);
if (in_range_p)
- m_colorizer.set_range (state.range_idx);
+ m_sink.colorize_text_for_range_idx (state.range_idx);
else
- m_colorizer.set_normal_text ();
+ m_sink.colorize_text_ensure_normal ();
}
/* Get the display width of the next character to be output, expanding
@@ -1933,7 +2313,7 @@ layout_printer::print_source_line (linenum_type row, const char *line, int line_
/* The returned display width is the number of spaces into which the
tab should be expanded. */
for (int i = 0; i != this_display_width; ++i)
- pp_space (&m_pp);
+ m_sink.add_space ();
continue;
}
@@ -1947,10 +2327,10 @@ layout_printer::print_source_line (linenum_type row, const char *line, int line_
}
/* Output the character. */
- m_layout.m_char_policy.m_print_cb (&m_pp, cp);
+ m_sink.print_decoded_char (m_layout.m_char_policy, cp);
c = dw.next_byte ();
}
- print_newline ();
+ end_line ();
return lbounds;
}
@@ -1975,8 +2355,9 @@ layout::should_print_annotation_line_p (linenum_type row) const
/* Print the leftmost column after the margin, which is used for showing
links between labels (e.g. for CFG edges in execution paths). */
+template<typename Sink>
void
-layout_printer::print_leftmost_column ()
+layout_printer<Sink>::print_leftmost_column ()
{
if (!get_options ().show_event_links_p)
gcc_assert (m_link_lhs_state == link_lhs_state::none);
@@ -1986,76 +2367,124 @@ layout_printer::print_leftmost_column ()
default:
gcc_unreachable ();
case link_lhs_state::none:
- pp_space (&m_pp);
+ m_sink.add_space ();
break;
case link_lhs_state::rewinding_to_lhs:
{
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t ch = get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_FROM_LEFT_TO_DOWN);
- pp_unicode_character (&m_pp, ch);
- m_colorizer.set_normal_text ();
+ m_sink.add_character (ch);
+ m_sink.colorize_text_ensure_normal ();
}
break;
case link_lhs_state::at_lhs:
{
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t ch = get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_DOWN);
- pp_unicode_character (&m_pp, ch);
- m_colorizer.set_normal_text ();
+ m_sink.add_character (ch);
+ m_sink.colorize_text_ensure_normal ();
}
break;
case link_lhs_state::indenting_to_dest:
{
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t ch = get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_FROM_DOWN_TO_RIGHT);
- pp_unicode_character (&m_pp, ch);
- m_colorizer.set_normal_text ();
+ m_sink.add_character (ch);
+ m_sink.colorize_text_ensure_normal ();
}
break;
}
}
-/* Begin an annotation line. If m_show_line_numbers_p, print the left
- margin, which is empty for annotation lines.
+/* Begin an annotation line for either text or html output
+
+ If m_show_line_numbers_p, print the left margin, which is empty
+ for annotation lines.
After any left margin, print a leftmost column, which is used for
- showing links between labels (e.g. for CFG edges in execution paths). */
+ showing links between labels (e.g. for CFG edges in execution paths).
+
+ For text sinks, this also first prints the text prefix.
+ For html sinks, this also pushes <tr> and <td> open tags, where the
+ <td> is for the coming annotations. */
+template<typename Sink>
void
-layout_printer::start_annotation_line (char margin_char)
+layout_printer<Sink>::start_annotation_line (enum margin_kind margin)
{
- pp_emit_prefix (&m_pp);
+ m_sink.emit_text_prefix ();
+ m_sink.push_html_tag ("tr", true);
+
+ char margin_char = (margin == margin_kind::insertion
+ ? '+'
+ : ' ');
+
if (get_options ().show_line_numbers_p)
{
/* Print the margin. If MARGIN_CHAR != ' ', then print up to 3
of it, right-aligned, padded with spaces. */
+ m_sink.push_html_tag_with_class ("td", "linenum", true);
int i;
for (i = 0; i < m_layout.m_linenum_width - 3; i++)
- pp_space (&m_pp);
+ m_sink.add_space ();
for (; i < m_layout.m_linenum_width; i++)
- pp_character (&m_pp, margin_char);
- pp_string (&m_pp, " |");
+ m_sink.add_character (margin_char);
+ if (Sink::is_text ())
+ m_sink.add_text (" |");
+ m_sink.pop_html_tag ("td");
}
- if (margin_char == ' ')
- print_leftmost_column ();
+
+ m_sink.push_html_tag_with_class ("td", "left-margin", true);
+ if (margin == margin_kind::insertion)
+ m_sink.add_character (margin_char);
else
- pp_character (&m_pp, margin_char);
+ print_leftmost_column ();
+ m_sink.pop_html_tag ("td");
+
+ m_sink.push_html_tag_with_class ("td",
+ (margin == margin_kind::ruler
+ ? "ruler"
+ : "annotation"),
+ true);
+}
+
+/* End a source or annotation line: text implementation.
+ Reset any colorization and emit a newline. */
+
+template<>
+void
+layout_printer<to_text>::end_line ()
+{
+ m_sink.colorize_text_ensure_normal ();
+ m_sink.add_newline ();
+}
+
+/* End a source or annotation line: HTML implementation.
+ Close the <td> and <tr> tags. */
+
+template<>
+void
+layout_printer<to_html>::end_line ()
+{
+ m_sink.pop_html_tag ("td");
+ m_sink.pop_html_tag ("tr");
}
/* Print a line consisting of the caret/underlines for the given
source line. */
+template<typename Sink>
void
-layout_printer::print_annotation_line (linenum_type row,
- const line_bounds lbounds)
+layout_printer<Sink>::print_annotation_line (linenum_type row,
+ const line_bounds lbounds)
{
int x_bound = m_layout.get_x_bound_for_row (row,
m_layout.m_exploc.m_display_col,
lbounds.m_last_non_ws_disp_col);
- start_annotation_line ();
+ start_annotation_line (margin_kind::normal);
for (int column = 1 + m_layout.m_x_offset_display; column < x_bound; column++)
{
@@ -2069,7 +2498,7 @@ layout_printer::print_annotation_line (linenum_type row,
if (in_range_p)
{
/* Within a range. Draw either the caret or an underline. */
- m_colorizer.set_range (state.range_idx);
+ m_sink.colorize_text_for_range_idx (state.range_idx);
if (state.draw_caret_p)
{
/* Draw the caret. */
@@ -2078,19 +2507,20 @@ layout_printer::print_annotation_line (linenum_type row,
caret_char = get_options ().caret_chars[state.range_idx];
else
caret_char = '^';
- pp_character (&m_pp, caret_char);
+ m_sink.add_character (caret_char);
}
else
- pp_character (&m_pp, '~');
+ m_sink.add_character ('~');
}
else
{
/* Not in a range. */
- m_colorizer.set_normal_text ();
- pp_character (&m_pp, ' ');
+ m_sink.colorize_text_ensure_normal ();
+ m_sink.add_character (' ');
}
}
- print_newline ();
+
+ end_line ();
}
/* A version of label_text that can live inside a vec.
@@ -2126,11 +2556,13 @@ struct pod_label_text
class line_label
{
public:
- line_label (int state_idx, int column,
+ line_label (unsigned original_range_idx,
+ int state_idx, int column,
label_text text,
bool has_in_edge,
bool has_out_edge)
- : m_state_idx (state_idx), m_column (column),
+ : m_original_range_idx (original_range_idx),
+ m_state_idx (state_idx), m_column (column),
m_text (std::move (text)), m_label_line (0), m_has_vbar (true),
m_has_in_edge (has_in_edge),
m_has_out_edge (has_out_edge)
@@ -2158,6 +2590,7 @@ public:
return -compare (ll1->m_state_idx, ll2->m_state_idx);
}
+ unsigned m_original_range_idx;
int m_state_idx;
int m_column;
pod_label_text m_text;
@@ -2168,9 +2601,43 @@ public:
bool m_has_out_edge;
};
+template<>
+void
+layout_printer<to_text>::begin_label (const line_label &label)
+{
+ /* Colorize the text, unless it's for events in a
+ diagnostic_path. */
+ if (!m_is_diagnostic_path)
+ m_sink.colorize_text_for_range_idx (label.m_state_idx);
+}
+
+template<>
+void
+layout_printer<to_html>::begin_label (const line_label &)
+{
+ if (m_sink.m_html_label_writer)
+ m_sink.m_html_label_writer->begin_label ();
+}
+
+template<>
+void
+layout_printer<to_text>::end_label ()
+{
+ m_sink.colorize_text_ensure_normal ();
+}
+
+template<>
+void
+layout_printer<to_html>::end_label ()
+{
+ if (m_sink.m_html_label_writer)
+ m_sink.m_html_label_writer->end_label ();
+}
+
/* Print any labels in this row. */
+template <typename Sink>
void
-layout_printer::print_any_labels (linenum_type row)
+layout_printer<Sink>::print_any_labels (linenum_type row)
{
int i;
auto_vec<line_label> labels;
@@ -2203,7 +2670,8 @@ layout_printer::print_any_labels (linenum_type row)
if (text.get () == NULL)
continue;
- labels.safe_push (line_label (i, disp_col, std::move (text),
+ labels.safe_push (line_label (range->m_original_idx,
+ i, disp_col, std::move (text),
range->has_in_edge (),
range->has_out_edge ()));
}
@@ -2288,7 +2756,7 @@ layout_printer::print_any_labels (linenum_type row)
gcc_assert (get_options ().show_event_links_p);
m_link_lhs_state = link_lhs_state::indenting_to_dest;
}
- start_annotation_line ();
+ start_annotation_line (margin_kind::normal);
int column = 1 + m_layout.m_x_offset_display;
line_label *label;
@@ -2310,32 +2778,31 @@ layout_printer::print_any_labels (linenum_type row)
. ^~~~~~~~~~~~~
. this text. */
gcc_assert (get_options ().show_event_links_p);
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t right= get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_RIGHT);
while (column < label->m_column - 1)
{
- pp_unicode_character (&m_pp, right);
+ m_sink.add_character (right);
column++;
}
if (column == label->m_column - 1)
{
- pp_character (&m_pp, '>');
+ m_sink.add_character ('>');
column++;
}
- m_colorizer.set_normal_text ();
+ m_sink.colorize_text_ensure_normal ();
m_link_lhs_state = link_lhs_state::none;
label_line_with_in_edge = -1;
}
else
move_to_column (&column, label->m_column, true);
gcc_assert (column == label->m_column);
- /* Colorize the text, unless it's for events in a
- diagnostic_path. */
- if (!m_is_diagnostic_path)
- m_colorizer.set_range (label->m_state_idx);
- pp_string (&m_pp, label->m_text.m_buffer);
- m_colorizer.set_normal_text ();
+
+ begin_label (*label);
+ m_sink.add_text (label->m_text.m_buffer);
+ end_label ();
+
column += label->m_display_width;
if (get_options ().show_event_links_p && label->m_has_out_edge)
{
@@ -2350,13 +2817,13 @@ layout_printer::print_any_labels (linenum_type row)
(text_art::theme::cell_kind::CFG_RIGHT);
const cppchar_t from_right_to_down= get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_FROM_RIGHT_TO_DOWN);
- m_colorizer.set_cfg_edge ();
- pp_space (&m_pp);
- pp_unicode_character (&m_pp, right);
- pp_unicode_character (&m_pp, '>');
- pp_unicode_character (&m_pp, right);
- pp_unicode_character (&m_pp, from_right_to_down);
- m_colorizer.set_normal_text ();
+ m_sink.colorize_text_for_cfg_edge ();
+ m_sink.add_space ();
+ m_sink.add_character (right);
+ m_sink.add_character ('>');
+ m_sink.add_character (right);
+ m_sink.add_character (from_right_to_down);
+ m_sink.colorize_text_ensure_normal ();
column += 5;
m_link_rhs_column = column - 1;
}
@@ -2365,9 +2832,9 @@ layout_printer::print_any_labels (linenum_type row)
{
gcc_assert (column <= label->m_column);
move_to_column (&column, label->m_column, true);
- m_colorizer.set_range (label->m_state_idx);
- pp_character (&m_pp, '|');
- m_colorizer.set_normal_text ();
+ m_sink.colorize_text_for_range_idx (label->m_state_idx);
+ m_sink.add_character ('|');
+ m_sink.colorize_text_ensure_normal ();
column++;
}
}
@@ -2377,14 +2844,14 @@ layout_printer::print_any_labels (linenum_type row)
if (m_link_rhs_column != -1 && column < m_link_rhs_column)
{
move_to_column (&column, m_link_rhs_column, true);
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t down= get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_DOWN);
- pp_unicode_character (&m_pp, down);
- m_colorizer.set_normal_text ();
+ m_sink.add_character (down);
+ m_sink.colorize_text_ensure_normal ();
}
- print_newline ();
+ end_line ();
}
}
@@ -2393,14 +2860,13 @@ layout_printer::print_any_labels (linenum_type row)
if (m_link_rhs_column != -1)
{
int column = 1 + m_layout.m_x_offset_display;
- start_annotation_line ();
+ start_annotation_line (margin_kind::normal);
move_to_column (&column, m_link_rhs_column, true);
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t down= get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_DOWN);
- pp_unicode_character (&m_pp, down);
- m_colorizer.set_normal_text ();
- print_newline ();
+ m_sink.add_character (down);
+ end_line ();
}
/* Clean up. */
@@ -2417,8 +2883,9 @@ layout_printer::print_any_labels (linenum_type row)
They are printed on lines of their own, before the source line
itself, with a leading '+'. */
+template <typename Sink>
void
-layout_printer::print_leading_fixits (linenum_type row)
+layout_printer<Sink>::print_leading_fixits (linenum_type row)
{
for (unsigned int i = 0; i < m_layout.m_fixit_hints.length (); i++)
{
@@ -2438,16 +2905,15 @@ layout_printer::print_leading_fixits (linenum_type row)
and the inserted line with "insert" colorization
helps them stand out from each other, and from
the surrounding text. */
- m_colorizer.set_normal_text ();
- start_annotation_line ('+');
- m_colorizer.set_fixit_insert ();
+ m_sink.colorize_text_ensure_normal ();
+ start_annotation_line (margin_kind::insertion);
+ m_sink.colorize_text_for_fixit_insert ();
/* Print all but the trailing newline of the fix-it hint.
We have to print the newline separately to avoid
getting additional pp prefixes printed. */
for (size_t i = 0; i < hint->get_length () - 1; i++)
- pp_character (&m_pp, hint->get_string ()[i]);
- m_colorizer.set_normal_text ();
- pp_newline (&m_pp);
+ m_sink.add_character (hint->get_string ()[i]);
+ end_line ();
}
}
}
@@ -2877,8 +3343,9 @@ line_corrections::add_hint (const fixit_hint *hint)
Fix-it hints that insert new lines are handled separately,
in layout::print_leading_fixits. */
+template<typename Sink>
void
-layout_printer::print_trailing_fixits (linenum_type row)
+layout_printer<Sink>::print_trailing_fixits (linenum_type row)
{
/* Build a list of correction instances for the line,
potentially consolidating hints (for the sake of readability). */
@@ -2904,7 +3371,7 @@ layout_printer::print_trailing_fixits (linenum_type row)
int column = 1 + m_layout.m_x_offset_display;
if (!corrections.m_corrections.is_empty ())
- start_annotation_line ();
+ start_annotation_line (margin_kind::normal);
FOR_EACH_VEC_ELT (corrections.m_corrections, i, c)
{
@@ -2914,9 +3381,9 @@ layout_printer::print_trailing_fixits (linenum_type row)
/* This assumes the insertion just affects one line. */
int start_column = c->m_printed_columns.start;
move_to_column (&column, start_column, true);
- m_colorizer.set_fixit_insert ();
- pp_string (&m_pp, c->m_text);
- m_colorizer.set_normal_text ();
+ m_sink.colorize_text_for_fixit_insert ();
+ m_sink.add_text (c->m_text);
+ m_sink.colorize_text_ensure_normal ();
column += c->m_display_cols;
}
else
@@ -2932,10 +3399,10 @@ layout_printer::print_trailing_fixits (linenum_type row)
|| c->m_byte_length == 0)
{
move_to_column (&column, start_column, true);
- m_colorizer.set_fixit_delete ();
+ m_sink.colorize_text_for_fixit_delete ();
for (; column <= finish_column; column++)
- pp_character (&m_pp, '-');
- m_colorizer.set_normal_text ();
+ m_sink.add_character ('-');
+ m_sink.colorize_text_ensure_normal ();
}
/* Print the replacement text. REPLACE also covers
removals, so only do this extra work (potentially starting
@@ -2943,27 +3410,21 @@ layout_printer::print_trailing_fixits (linenum_type row)
if (c->m_byte_length > 0)
{
move_to_column (&column, start_column, true);
- m_colorizer.set_fixit_insert ();
- pp_string (&m_pp, c->m_text);
- m_colorizer.set_normal_text ();
+ m_sink.colorize_text_for_fixit_insert ();
+ m_sink.add_text (c->m_text);
+ m_sink.colorize_text_ensure_normal ();
column += c->m_display_cols;
}
}
}
+ if (!corrections.m_corrections.is_empty ())
+ m_sink.pop_html_tag ("td");
+
/* Add a trailing newline, if necessary. */
move_to_column (&column, 1 + m_layout.m_x_offset_display, false);
}
-/* Disable any colorization and emit a newline. */
-
-void
-layout_printer::print_newline ()
-{
- m_colorizer.set_normal_text ();
- pp_newline (&m_pp);
-}
-
/* Return true if (ROW/COLUMN) is within a range of the layout.
If it returns true, OUT_STATE is written to, with the
range index, and whether we should draw the caret at
@@ -3060,27 +3521,28 @@ layout::get_x_bound_for_row (linenum_type row, int caret_column,
and updating *COLUMN. If ADD_LEFT_MARGIN, then print the (empty)
left margin after any newline. */
+template<typename Sink>
void
-layout_printer::move_to_column (int *column,
- int dest_column,
- bool add_left_margin)
+layout_printer<Sink>::move_to_column (int *column,
+ int dest_column,
+ bool add_left_margin)
{
/* Start a new line if we need to. */
if (*column > dest_column)
{
- print_newline ();
+ end_line ();
if (add_left_margin)
- start_annotation_line ();
+ start_annotation_line (margin_kind::normal);
*column = 1 + m_layout.m_x_offset_display;
}
while (*column < dest_column)
{
/* For debugging column issues, it can be helpful to replace this
- pp_space call with
- pp_character (&m_pp, '0' + (*column % 10));
+ add_space call with
+ m_sink.add_character ('0' + (*column % 10));
to visualize the changing value of "*column". */
- pp_space (&m_pp);
+ m_sink.add_space ();
(*column)++;
}
}
@@ -3088,49 +3550,55 @@ layout_printer::move_to_column (int *column,
/* For debugging layout issues, render a ruler giving column numbers
(after the 1-column indent). */
+template<typename Sink>
void
-layout_printer::show_ruler (int max_column)
+layout_printer<Sink>::show_ruler (int max_column)
{
+ m_sink.push_html_tag_with_class("thead", "ruler", false);
+
/* Hundreds. */
if (max_column > 99)
{
- start_annotation_line ();
+ start_annotation_line (margin_kind::ruler);
for (int column = 1 + m_layout.m_x_offset_display;
column <= max_column;
++column)
if (column % 10 == 0)
- pp_character (&m_pp, '0' + (column / 100) % 10);
+ m_sink.add_character ('0' + (column / 100) % 10);
else
- pp_space (&m_pp);
- pp_newline (&m_pp);
+ m_sink.add_space ();
+ end_line ();
}
/* Tens. */
- start_annotation_line ();
+ start_annotation_line (margin_kind::ruler);
for (int column = 1 + m_layout.m_x_offset_display;
column <= max_column;
++column)
if (column % 10 == 0)
- pp_character (&m_pp, '0' + (column / 10) % 10);
+ m_sink.add_character ('0' + (column / 10) % 10);
else
- pp_space (&m_pp);
- pp_newline (&m_pp);
+ m_sink.add_space ();
+ end_line ();
/* Units. */
- start_annotation_line ();
+ start_annotation_line (margin_kind::ruler);
for (int column = 1 + m_layout.m_x_offset_display;
column <= max_column;
++column)
- pp_character (&m_pp, '0' + (column % 10));
- pp_newline (&m_pp);
+ m_sink.add_character ('0' + (column % 10));
+ end_line ();
+
+ m_sink.pop_html_tag("thead"); // thead
}
/* Print leading fix-its (for new lines inserted before the source line)
then the source line, followed by an annotation line
consisting of any caret/underlines, then any fixits.
If the source line can't be read, print nothing. */
+template<typename Sink>
void
-layout_printer::print_line (linenum_type row)
+layout_printer<Sink>::print_line (linenum_type row)
{
char_span line
= m_layout.m_file_cache.get_source_line (m_layout.m_exploc.file, row);
@@ -3154,8 +3622,9 @@ layout_printer::print_line (linenum_type row)
showing the link entering at the top right and emerging
at the bottom left. */
+template<typename Sink>
void
-layout_printer::print_any_right_to_left_edge_lines ()
+layout_printer<Sink>::print_any_right_to_left_edge_lines ()
{
if (m_link_rhs_column == -1)
/* Can also happen if the out-edge had UNKNOWN_LOCATION. */
@@ -3164,31 +3633,30 @@ layout_printer::print_any_right_to_left_edge_lines ()
gcc_assert (get_options ().show_event_links_p);
/* Print the line with "|". */
- start_annotation_line ();
+ start_annotation_line (margin_kind::normal);
+
int column = 1 + m_layout.m_x_offset_display;
move_to_column (&column, m_link_rhs_column, true);
- m_colorizer.set_cfg_edge ();
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t down= get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_DOWN);
- pp_unicode_character (&m_pp, down);
- m_colorizer.set_normal_text ();
- pp_newline (&m_pp);
+ m_sink.add_character (down);
+ end_line ();
/* Print the line with "┌──────────────────────────────────────────┘". */
m_link_lhs_state = link_lhs_state::rewinding_to_lhs;
- start_annotation_line ();
- m_colorizer.set_cfg_edge ();
+ start_annotation_line (margin_kind::normal);
+ m_sink.colorize_text_for_cfg_edge ();
const cppchar_t left= get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_LEFT);
for (int column = 1 + m_layout.m_x_offset_display;
column < m_link_rhs_column;
++column)
- pp_unicode_character (&m_pp, left);
+ m_sink.add_character (left);
const cppchar_t from_down_to_left = get_theme ().get_cppchar
(text_art::theme::cell_kind::CFG_FROM_DOWN_TO_LEFT);
- pp_unicode_character (&m_pp, from_down_to_left);
- m_colorizer.set_normal_text ();
- pp_newline (&m_pp);
+ m_sink.add_character (from_down_to_left);
+ end_line ();
/* We now have a link line on the LHS,
and no longer have one on the RHS. */
@@ -3196,14 +3664,13 @@ layout_printer::print_any_right_to_left_edge_lines ()
m_link_rhs_column = -1;
}
-layout_printer::layout_printer (pretty_printer &pp,
- const layout &layout,
- const rich_location &richloc,
- diagnostic_t diagnostic_kind)
-: m_pp (pp),
+template<typename Sink>
+layout_printer<Sink>::layout_printer (Sink &sink,
+ const layout &layout,
+ bool is_diagnostic_path)
+: m_sink (sink),
m_layout (layout),
- m_colorizer (m_pp, richloc, diagnostic_kind),
- m_is_diagnostic_path (diagnostic_kind == DK_DIAGNOSTIC_PATH),
+ m_is_diagnostic_path (is_diagnostic_path),
m_link_lhs_state (link_lhs_state::none),
m_link_rhs_column (-1)
{
@@ -3293,11 +3760,47 @@ diagnostic_context::maybe_show_locus (const rich_location &richloc,
source_policy.print (pp, richloc, diagnostic_kind, effects);
}
+/* As above, but print in HTML form to XP.
+ If non-null, use LABEL_WRITER when writing labelled ranges. */
+
+void
+diagnostic_context::maybe_show_locus_as_html (const rich_location &richloc,
+ const diagnostic_source_printing_options &opts,
+ diagnostic_t diagnostic_kind,
+ xml::printer &xp,
+ diagnostic_source_effect_info *effects,
+ html_label_writer *label_writer)
+{
+ const location_t loc = richloc.get_loc ();
+ /* Do nothing if source-printing has been disabled. */
+ if (!opts.enabled)
+ return;
+
+ /* Don't attempt to print source for UNKNOWN_LOCATION and for builtins. */
+ if (loc <= BUILTINS_LOCATION)
+ return;
+
+ /* Don't print the same source location twice in a row, unless we have
+ fix-it hints, or multiple locations, or a label. */
+ if (loc == m_last_location
+ && richloc.get_num_fixit_hints () == 0
+ && richloc.get_num_locations () == 1
+ && richloc.get_range (0)->m_label == NULL)
+ return;
+
+ m_last_location = loc;
+
+ diagnostic_source_print_policy source_policy (*this, opts);
+ source_policy.print_as_html (xp, richloc, diagnostic_kind, effects,
+ label_writer);
+}
+
diagnostic_source_print_policy::
diagnostic_source_print_policy (const diagnostic_context &dc)
: m_options (dc.m_source_printing),
m_location_policy (dc),
- m_start_span_cb (dc.m_text_callbacks.m_start_span),
+ m_text_start_span_cb (dc.m_text_callbacks.m_text_start_span),
+ m_html_start_span_cb (dc.m_text_callbacks.m_html_start_span),
m_file_cache (dc.get_file_cache ()),
m_diagram_theme (dc.get_diagram_theme ()),
m_escape_format (dc.get_escape_format ())
@@ -3309,7 +3812,8 @@ diagnostic_source_print_policy (const diagnostic_context &dc,
const diagnostic_source_printing_options &opts)
: m_options (opts),
m_location_policy (dc),
- m_start_span_cb (dc.m_text_callbacks.m_start_span),
+ m_text_start_span_cb (dc.m_text_callbacks.m_text_start_span),
+ m_html_start_span_cb (dc.m_text_callbacks.m_html_start_span),
m_file_cache (dc.get_file_cache ()),
m_diagram_theme (dc.get_diagram_theme ()),
m_escape_format (dc.get_escape_format ())
@@ -3329,15 +3833,36 @@ diagnostic_source_print_policy::print (pretty_printer &pp,
const
{
layout layout (*this, richloc, effects);
- layout_printer lp (pp, layout, richloc, diagnostic_kind);
+ colorizer col (pp, richloc, diagnostic_kind);
+ to_text sink (pp, col);
+ layout_printer<to_text> lp (sink, layout,
+ diagnostic_kind == DK_DIAGNOSTIC_PATH);
lp.print (*this);
}
+/* As above, but print in HTML form to XP.
+ If non-null, use LABEL_WRITER when writing labelled ranges. */
+
void
-layout_printer::print (const diagnostic_source_print_policy &source_policy)
+diagnostic_source_print_policy::print_as_html (xml::printer &xp,
+ const rich_location &richloc,
+ diagnostic_t diagnostic_kind,
+ diagnostic_source_effect_info *effects,
+ html_label_writer *label_writer)
+ const
{
- diagnostic_prefixing_rule_t saved_rule = pp_prefixing_rule (&m_pp);
- pp_prefixing_rule (&m_pp) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE;
+ layout layout (*this, richloc, effects);
+ to_html sink (xp, label_writer);
+ layout_printer<to_html> lp (sink, layout,
+ diagnostic_kind == DK_DIAGNOSTIC_PATH);
+ lp.print (*this);
+}
+
+template <typename Sink>
+void
+layout_printer<Sink>::print (const diagnostic_source_print_policy &source_policy)
+{
+ m_sink.push_html_tag_with_class ("table", "locus", false);
if (get_options ().show_ruler_p)
show_ruler (m_layout.m_x_offset_display + get_options ().max_width);
@@ -3362,27 +3887,65 @@ layout_printer::print (const diagnostic_source_print_policy &source_policy)
= m_layout.get_expanded_location (line_span);
const diagnostic_location_print_policy &
loc_policy = source_policy.get_location_policy ();
- source_policy.get_start_span_fn () (loc_policy, &m_pp, exploc);
+ m_sink.invoke_start_span_fn (source_policy, loc_policy, exploc);
}
}
+
+ m_sink.push_html_tag_with_class ("tbody", "line-span", false);
+
/* Iterate over the lines within this span (using linenum_arith_t to
avoid overflow with 0xffffffff causing an infinite loop). */
linenum_arith_t last_line = line_span->get_last_line ();
for (linenum_arith_t row = line_span->get_first_line ();
row <= last_line; row++)
print_line (row);
+
+ m_sink.pop_html_tag ("tbody");
}
if (auto effect_info = m_layout.m_effect_info)
effect_info->m_trailing_out_edge_column = m_link_rhs_column;
- pp_prefixing_rule (&m_pp) = saved_rule;
+ m_sink.pop_html_tag ("table");
}
#if CHECKING_P
namespace selftest {
+static std::unique_ptr<xml::node>
+make_element_for_locus (const rich_location &rich_loc,
+ diagnostic_t kind,
+ diagnostic_context &dc)
+{
+ dc.m_last_location = UNKNOWN_LOCATION;
+
+ xml::element wrapper ("wrapper", false);
+ xml::printer xp (wrapper);
+ dc.maybe_show_locus_as_html (rich_loc,
+ dc.m_source_printing,
+ kind,
+ xp,
+ nullptr,
+ nullptr); // label_writer
+ if (wrapper.m_children.size () > 0)
+ return std::move (wrapper.m_children[0]);
+ else
+ return nullptr;
+}
+
+static label_text
+make_raw_html_for_locus (const rich_location &rich_loc,
+ diagnostic_t kind,
+ diagnostic_context &dc)
+{
+ auto node = make_element_for_locus (rich_loc, kind, dc);
+ pretty_printer pp;
+ if (node)
+ node->write_as_xml (&pp, 0, true);
+ return label_text::take (xstrdup (pp_formatted_text (&pp)));
+}
+
/* Selftests for diagnostic_show_locus. */
diagnostic_show_locus_fixture::
@@ -3600,7 +4163,10 @@ test_layout_x_offset_display_utf8 (const line_table_case &case_)
linemap_position_for_column (line_table,
emoji_col));
layout test_layout (policy, richloc, nullptr);
- layout_printer lp (*dc.get_reference_printer (), test_layout, richloc, DK_ERROR);
+ colorizer col (*dc.get_reference_printer (),
+ richloc, DK_ERROR);
+ to_text sink (*dc.get_reference_printer (), col);
+ layout_printer<to_text> lp (sink, test_layout, false);
lp.print (policy);
ASSERT_STREQ (" | 1 \n"
" | 1 \n"
@@ -3627,7 +4193,10 @@ test_layout_x_offset_display_utf8 (const line_table_case &case_)
linemap_position_for_column (line_table,
emoji_col + 2));
layout test_layout (dc, richloc, nullptr);
- layout_printer lp (*dc.get_reference_printer (), test_layout, richloc, DK_ERROR);
+ colorizer col (*dc.get_reference_printer (),
+ richloc, DK_ERROR);
+ to_text sink (*dc.get_reference_printer (), col);
+ layout_printer<to_text> lp (sink, test_layout, false);
lp.print (policy);
ASSERT_STREQ (" | 1 1 \n"
" | 1 2 \n"
@@ -3708,7 +4277,10 @@ test_layout_x_offset_display_tab (const line_table_case &case_)
dc.m_tabstop = tabstop;
diagnostic_source_print_policy policy (dc);
layout test_layout (policy, richloc, nullptr);
- layout_printer lp (*dc.get_reference_printer (), test_layout, richloc, DK_ERROR);
+ colorizer col (*dc.get_reference_printer (),
+ richloc, DK_ERROR);
+ to_text sink (*dc.get_reference_printer (), col);
+ layout_printer<to_text> lp (sink, test_layout, false);
lp.print (policy);
const char *out = pp_formatted_text (dc.get_reference_printer ());
ASSERT_EQ (NULL, strchr (out, '\t'));
@@ -3733,7 +4305,10 @@ test_layout_x_offset_display_tab (const line_table_case &case_)
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_source_print_policy policy (dc);
layout test_layout (policy, richloc, nullptr);
- layout_printer lp (*dc.get_reference_printer (), test_layout, richloc, DK_ERROR);
+ colorizer col (*dc.get_reference_printer (),
+ richloc, DK_ERROR);
+ to_text sink (*dc.get_reference_printer (), col);
+ layout_printer<to_text> lp (sink, test_layout, false);
lp.print (policy);
/* We have arranged things so that two columns will be printed before
@@ -3814,6 +4389,32 @@ test_one_liner_caret_and_range ()
ASSERT_STREQ (" foo = bar.field;\n"
" ~~~^~~~~~\n",
dc.test_show_locus (richloc));
+
+ {
+ test_diagnostic_context dc;
+ auto out = make_raw_html_for_locus (richloc, DK_ERROR, dc);
+ ASSERT_STREQ
+ ("<table class=\"locus\">\n"
+ " <tbody class=\"line-span\">\n"
+ " <tr><td class=\"left-margin\"> </td><td class=\"source\">foo = bar.field;</td></tr>\n"
+ " <tr><td class=\"left-margin\"> </td><td class=\"annotation\"> ~~~^~~~~~</td></tr>\n"
+ " </tbody>\n"
+ "</table>\n",
+ out.get ());
+ }
+ {
+ test_diagnostic_context dc;
+ dc.m_source_printing.show_line_numbers_p = true;
+ auto out = make_raw_html_for_locus (richloc, DK_ERROR, dc);
+ ASSERT_STREQ
+ ("<table class=\"locus\">\n"
+ " <tbody class=\"line-span\">\n"
+ " <tr><td class=\"linenum\"> 1</td><td class=\"left-margin\"> </td><td class=\"source\">foo = bar.field;</td></tr>\n"
+ " <tr><td class=\"linenum\"> </td><td class=\"left-margin\"> </td><td class=\"annotation\"> ~~~^~~~~~</td></tr>\n"
+ " </tbody>\n"
+ "</table>\n",
+ out.get ());
+ }
}
/* Multiple ranges and carets. */
@@ -4231,6 +4832,24 @@ test_one_liner_labels ()
" | label 1\n"
" label 0\n",
dc.test_show_locus (richloc));
+
+ {
+ test_diagnostic_context dc;
+ dc.m_source_printing.show_line_numbers_p = true;
+ auto out = make_raw_html_for_locus (richloc, DK_ERROR, dc);
+ ASSERT_STREQ
+ ("<table class=\"locus\">\n"
+ " <tbody class=\"line-span\">\n"
+ " <tr><td class=\"linenum\"> 1</td><td class=\"left-margin\"> </td><td class=\"source\">foo = bar.field;</td></tr>\n"
+ " <tr><td class=\"linenum\"> </td><td class=\"left-margin\"> </td><td class=\"annotation\">^~~ ~~~ ~~~~~</td></tr>\n"
+ " <tr><td class=\"linenum\"> </td><td class=\"left-margin\"> </td><td class=\"annotation\">| | |</td></tr>\n"
+ " <tr><td class=\"linenum\"> </td><td class=\"left-margin\"> </td><td class=\"annotation\">| | label 2</td></tr>\n"
+ " <tr><td class=\"linenum\"> </td><td class=\"left-margin\"> </td><td class=\"annotation\">| label 1</td></tr>\n"
+ " <tr><td class=\"linenum\"> </td><td class=\"left-margin\"> </td><td class=\"annotation\">label 0</td></tr>\n"
+ " </tbody>\n"
+ "</table>\n",
+ out.get ());
+ }
}
/* Example of boundary conditions: label 0 and 1 have just enough clearance,
diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc
index b43fc90..20582b1 100644
--- a/gcc/diagnostic.cc
+++ b/gcc/diagnostic.cc
@@ -250,7 +250,10 @@ diagnostic_context::initialize (int n_opts)
m_internal_error = nullptr;
m_adjust_diagnostic_info = nullptr;
m_text_callbacks.m_begin_diagnostic = default_diagnostic_text_starter;
- m_text_callbacks.m_start_span = default_diagnostic_start_span_fn;
+ m_text_callbacks.m_text_start_span
+ = default_diagnostic_start_span_fn<to_text>;
+ m_text_callbacks.m_html_start_span
+ = default_diagnostic_start_span_fn<to_html>;
m_text_callbacks.m_end_diagnostic = default_diagnostic_text_finalizer;
m_option_mgr = nullptr;
m_urlifier_stack = new auto_vec<urlifier_stack_node> ();
@@ -1071,21 +1074,6 @@ logical_location_manager::function_p (key k) const
}
}
-void
-default_diagnostic_start_span_fn (const diagnostic_location_print_policy &loc_policy,
- pretty_printer *pp,
- expanded_location exploc)
-{
- const diagnostic_column_policy &column_policy
- = loc_policy.get_column_policy ();
- label_text text
- = column_policy.get_location_text (exploc,
- loc_policy.show_column_p (),
- pp_show_color (pp));
- pp_string (pp, text.get ());
- pp_newline (pp);
-}
-
/* Interface to specify diagnostic kind overrides. Returns the
previous setting, or DK_UNSPECIFIED if the parameters are out of
range. If OPTION_ID is zero, the new setting is for all the
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index 00d7812..cdd6f26 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -31,6 +31,11 @@ namespace text_art
class theme;
} // namespace text_art
+namespace xml
+{
+ class printer;
+} // namespace xml
+
/* An enum for controlling what units to use for the column number
when diagnostics are output, used by the -fdiagnostics-column-unit option.
Tabs will be expanded or not according to the value of -ftabstop. The origin
@@ -177,10 +182,15 @@ class diagnostic_source_print_policy;
typedef void (*diagnostic_text_starter_fn) (diagnostic_text_output_format &,
const diagnostic_info *);
-typedef void
-(*diagnostic_start_span_fn) (const diagnostic_location_print_policy &,
- pretty_printer *,
- expanded_location);
+struct to_text;
+struct to_html;
+
+extern pretty_printer *get_printer (to_text &);
+
+template <typename Sink>
+using diagnostic_start_span_fn = void (*) (const diagnostic_location_print_policy &,
+ Sink &sink,
+ expanded_location);
typedef void (*diagnostic_text_finalizer_fn) (diagnostic_text_output_format &,
const diagnostic_info *,
@@ -389,11 +399,32 @@ public:
const diagnostic_column_policy &
get_column_policy () const { return m_column_policy; }
+ void
+ print_text_span_start (const diagnostic_context &dc,
+ pretty_printer &pp,
+ const expanded_location &exploc);
+
+ void
+ print_html_span_start (const diagnostic_context &dc,
+ xml::printer &xp,
+ const expanded_location &exploc);
+
private:
diagnostic_column_policy m_column_policy;
bool m_show_column;
};
+/* Abstract base class for optionally supplying extra tags when writing
+ out annotation labels in HTML output. */
+
+class html_label_writer
+{
+public:
+ virtual ~html_label_writer () {}
+ virtual void begin_label () = 0;
+ virtual void end_label () = 0;
+};
+
/* A bundle of state for printing source within a diagnostic,
to isolate the interactions between diagnostic_context and the
implementation of diagnostic_show_locus. */
@@ -411,11 +442,21 @@ public:
diagnostic_t diagnostic_kind,
diagnostic_source_effect_info *effect_info) const;
+ void
+ print_as_html (xml::printer &xp,
+ const rich_location &richloc,
+ diagnostic_t diagnostic_kind,
+ diagnostic_source_effect_info *effect_info,
+ html_label_writer *label_writer) const;
+
const diagnostic_source_printing_options &
get_options () const { return m_options; }
- diagnostic_start_span_fn
- get_start_span_fn () const { return m_start_span_cb; }
+ diagnostic_start_span_fn<to_text>
+ get_text_start_span_fn () const { return m_text_start_span_cb; }
+
+ diagnostic_start_span_fn<to_html>
+ get_html_start_span_fn () const { return m_html_start_span_cb; }
file_cache &
get_file_cache () const { return m_file_cache; }
@@ -442,7 +483,8 @@ public:
private:
const diagnostic_source_printing_options &m_options;
class diagnostic_location_print_policy m_location_policy;
- diagnostic_start_span_fn m_start_span_cb;
+ diagnostic_start_span_fn<to_text> m_text_start_span_cb;
+ diagnostic_start_span_fn<to_html> m_html_start_span_cb;
file_cache &m_file_cache;
/* Other data copied from diagnostic_context. */
@@ -508,7 +550,7 @@ public:
/* Give access to m_text_callbacks. */
friend diagnostic_text_starter_fn &
diagnostic_text_starter (diagnostic_context *context);
- friend diagnostic_start_span_fn &
+ friend diagnostic_start_span_fn<to_text> &
diagnostic_start_span (diagnostic_context *context);
friend diagnostic_text_finalizer_fn &
diagnostic_text_finalizer (diagnostic_context *context);
@@ -602,6 +644,12 @@ public:
diagnostic_t diagnostic_kind,
pretty_printer &pp,
diagnostic_source_effect_info *effect_info);
+ void maybe_show_locus_as_html (const rich_location &richloc,
+ const diagnostic_source_printing_options &opts,
+ diagnostic_t diagnostic_kind,
+ xml::printer &xp,
+ diagnostic_source_effect_info *effect_info,
+ html_label_writer *label_writer);
void emit_diagram (const diagnostic_diagram &diagram);
@@ -882,7 +930,8 @@ private:
/* This function is called by diagnostic_show_locus in between
disjoint spans of source code, so that the context can print
something to indicate that a new span of source code has begun. */
- diagnostic_start_span_fn m_start_span;
+ diagnostic_start_span_fn<to_text> m_text_start_span;
+ diagnostic_start_span_fn<to_html> m_html_start_span;
/* This function is called after the diagnostic message is printed. */
diagnostic_text_finalizer_fn m_end_diagnostic;
@@ -1040,10 +1089,10 @@ diagnostic_text_starter (diagnostic_context *context)
/* Client supplied function called between disjoint spans of source code,
so that the context can print
something to indicate that a new span of source code has begun. */
-inline diagnostic_start_span_fn &
+inline diagnostic_start_span_fn<to_text> &
diagnostic_start_span (diagnostic_context *context)
{
- return context->m_text_callbacks.m_start_span;
+ return context->m_text_callbacks.m_text_start_span;
}
/* Client supplied function called after a diagnostic message is
@@ -1128,6 +1177,21 @@ diagnostic_show_locus (diagnostic_context *context,
context->maybe_show_locus (*richloc, opts, diagnostic_kind, *pp, effect_info);
}
+inline void
+diagnostic_show_locus_as_html (diagnostic_context *context,
+ const diagnostic_source_printing_options &opts,
+ rich_location *richloc,
+ diagnostic_t diagnostic_kind,
+ xml::printer &xp,
+ diagnostic_source_effect_info *effect_info = nullptr,
+ html_label_writer *label_writer = nullptr)
+{
+ gcc_assert (context);
+ gcc_assert (richloc);
+ context->maybe_show_locus_as_html (*richloc, opts, diagnostic_kind, xp,
+ effect_info, label_writer);
+}
+
/* Because we read source files a second time after the frontend did it the
first time, we need to know how the frontend handled things like character
set conversion and UTF-8 BOM stripping, in order to make everything
@@ -1201,8 +1265,9 @@ extern void diagnostic_set_info_translated (diagnostic_info *, const char *,
#endif
void default_diagnostic_text_starter (diagnostic_text_output_format &,
const diagnostic_info *);
+template <typename Sink>
void default_diagnostic_start_span_fn (const diagnostic_location_print_policy &,
- pretty_printer *,
+ Sink &sink,
expanded_location);
void default_diagnostic_text_finalizer (diagnostic_text_output_format &,
const diagnostic_info *,
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 442fce6..fe22d34 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -31,6 +31,7 @@ extensions, accepted by GCC in C90 mode and in C++.
* Thread-Local:: Per-thread variables.
* OpenMP:: Multiprocessing extensions.
* OpenACC:: Extensions for offloading code to accelerator devices.
+* _Countof:: The number of elements of arrays.
* Inline:: Defining inline functions (as fast as macros).
* Volatiles:: What constitutes an access to a volatile object.
* Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
@@ -7323,7 +7324,7 @@ truncate the copy without appending the terminating @code{NUL} character.
Using the attribute makes it possible to suppress the warning. However,
when the array is declared with the attribute the call to @code{strlen} is
diagnosed because when the array doesn't contain a @code{NUL}-terminated
-string the call is undefined. To copy, compare, of search non-string
+string the call is undefined. To copy, compare, or search non-string
character arrays use the @code{memcpy}, @code{memcmp}, @code{memchr},
and other functions that operate on arrays of bytes. In addition,
calling @code{strnlen} and @code{strndup} with such arrays is safe
@@ -10693,6 +10694,36 @@ library.
@xref{OpenMP and OpenACC Options}, for additional options useful with
@option{-fopenacc}.
+@node _Countof
+@section Determining the Number of Elements of Arrays
+@cindex _Countof
+@cindex number of elements
+
+The keyword @code{_Countof} determines
+the number of elements of an array operand.
+Its syntax is similar to @code{sizeof}.
+The operand must be
+a parenthesized complete array type name
+or an expression of such a type.
+For example:
+
+@smallexample
+int a[n];
+_Countof (a); // returns n
+_Countof (int [7][3]); // returns 7
+@end smallexample
+
+The result of this operator is an integer constant expression,
+unless the array has a variable number of elements.
+The operand is only evaluated
+if the array has a variable number of elements.
+For example:
+
+@smallexample
+_Countof (int [7][n++]); // integer constant expression
+_Countof (int [n++][7]); // run-time value; n++ is evaluated
+@end smallexample
+
@node Inline
@section An Inline Function is As Fast As a Macro
@cindex inline functions
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index fe47ce5..0150ad0 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -3297,6 +3297,50 @@ Enable support for the C++ coroutines extension (experimental).
Permit the C++ front end to note all candidates during overload resolution
failure, including when a deleted function is selected.
+@item -fdump-lang-
+@itemx -fdump-lang-@var{switch}
+@itemx -fdump-lang-@var{switch}-@var{options}
+@itemx -fdump-lang-@var{switch}-@var{options}=@var{filename}
+Control the dumping of C++-specific information. The @var{options}
+and @var{filename} portions behave as described in the
+@option{-fdump-tree} option. The following @var{switch} values are
+accepted:
+
+@table @samp
+@item all
+Enable all of the below.
+
+@opindex fdump-lang-class
+@item class
+Dump class hierarchy information. Virtual table information is emitted
+unless '@option{slim}' is specified.
+
+@opindex fdump-lang-module
+@item module
+Dump module information. Options @option{lineno} (locations),
+@option{graph} (reachability), @option{blocks} (clusters),
+@option{uid} (serialization), @option{alias} (mergeable),
+@option{asmname} (Elrond), @option{eh} (mapper) & @option{vops}
+(macros) may provide additional information.
+
+@opindex fdump-lang-raw
+@item raw
+Dump the raw internal tree data.
+
+@opindex fdump-lang-tinst
+@item tinst
+Dump the sequence of template instantiations, indented to show the
+depth of recursion. The @option{lineno} option adds the source
+location where the instantiation was triggered, and the
+@option{details} option also dumps pre-instantiation substitutions
+such as those performed during template argument deduction.
+
+Lines in the .tinst dump start with @samp{I} for an instantiation,
+@samp{S} for another substitution, and @samp{R[IS]} for the reopened
+context of a deferred instantiation.
+
+@end table
+
@opindex fno-elide-constructors
@opindex felide-constructors
@item -fno-elide-constructors
@@ -6075,18 +6119,25 @@ in this release.
@item experimental-html
Emit diagnostics to a file in HTML format. This scheme is experimental,
-and may go away in future GCC releases. The details of the output are
-also subject to change.
+and may go away in future GCC releases. The keys and details of the output
+are also subject to change.
Supported keys are:
@table @gcctabopt
+@item css=@r{[}yes@r{|}no@r{]}
+Add an embedded <style> to the generated HTML. Defaults to yes.
+
@item file=@var{FILENAME}
Specify the filename to write the HTML output to, potentially with a
leading absolute or relative path. If not specified, it defaults to
@file{@var{source}.html}.
+@item javascript=@r{[}yes@r{|}no@r{]}
+Add an embedded <script> to the generated HTML providing a barebones UI
+for viewing results. Defaults to yes.
+
@end table
@end table
@@ -20891,30 +20942,10 @@ Dump language-specific information. The file name is made by appending
@itemx -fdump-lang-@var{switch}-@var{options}=@var{filename}
Control the dumping of language-specific information. The @var{options}
and @var{filename} portions behave as described in the
-@option{-fdump-tree} option. The following @var{switch} values are
-accepted:
-
-@table @samp
-@item all
-
-Enable all language-specific dumps.
-
-@item class
-Dump class hierarchy information. Virtual table information is emitted
-unless '@option{slim}' is specified. This option is applicable to C++ only.
-
-@item module
-Dump module information. Options @option{lineno} (locations),
-@option{graph} (reachability), @option{blocks} (clusters),
-@option{uid} (serialization), @option{alias} (mergeable),
-@option{asmname} (Elrond), @option{eh} (mapper) & @option{vops}
-(macros) may provide additional information. This option is
-applicable to C++ only.
-
-@item raw
-Dump the raw internal tree data. This option is applicable to C++ only.
-
-@end table
+@option{-fdump-tree} option. @option{-fdump-tree-all} enables all
+language-specific dumps; other options vary with the language. For
+instance, see @xref{C++ Dialect Options} for the @option{-fdump-lang}
+flags supported by the C++ front-end.
@opindex fdump-passes
@item -fdump-passes
diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index 5f48ced..014f421 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -5085,6 +5085,11 @@ simple_operand_p (const_tree exp)
#pragma weak, etc). */
&& ! TREE_PUBLIC (exp)
&& ! DECL_EXTERNAL (exp)
+ /* DECL_VALUE_EXPR will expand to something non-simple. */
+ && ! ((VAR_P (exp)
+ || TREE_CODE (exp) == PARM_DECL
+ || TREE_CODE (exp) == RESULT_DECL)
+ && DECL_HAS_VALUE_EXPR_P (exp))
/* Weakrefs are not safe to be read, since they can be NULL.
They are !TREE_PUBLIC && !DECL_EXTERNAL but still
have DECL_WEAK flag set. */
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f0d4e2c..3496d06 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,72 @@
+2025-05-28 Tobias Burnus <tburnus@baylibre.com>
+
+ PR fortran/113152
+ * simplify.cc (gfc_simplify_cospi, gfc_simplify_sinpi): Avoid using
+ mpfr_fmod_ui in the MPFR < 4.2.0 version.
+
+2025-05-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/119856
+ * io.cc: Set missing comma error checks to STD_STD_LEGACY.
+
+2025-05-28 Yuao Ma <c8ef@outlook.com>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/113152
+ * gfortran.h (enum gfc_isym_id): Add new enum.
+ * intrinsic.cc (add_functions): Register new intrinsics. Changing the call
+ from gfc_resolve_trigd{,2} to gfc_resolve_trig{,2}.
+ * intrinsic.h (gfc_simplify_acospi, gfc_simplify_asinpi,
+ gfc_simplify_asinpi, gfc_simplify_atanpi, gfc_simplify_atan2pi,
+ gfc_simplify_cospi, gfc_simplify_sinpi, gfc_simplify_tanpi): New.
+ (gfc_resolve_trig): Rename from gfc_resolve_trigd.
+ (gfc_resolve_trig2): Rename from gfc_resolve_trigd2.
+ * iresolve.cc (gfc_resolve_trig): Rename from gfc_resolve_trigd.
+ (gfc_resolve_trig2): Rename from gfc_resolve_trigd2.
+ * mathbuiltins.def: Add 7 new math builtins and re-align.
+ * simplify.cc (gfc_simplify_acos, gfc_simplify_asin,
+ gfc_simplify_acosd, gfc_simplify_asind): Revise error message.
+ (gfc_simplify_acospi, gfc_simplify_asinpi,
+ gfc_simplify_asinpi, gfc_simplify_atanpi, gfc_simplify_atan2pi,
+ gfc_simplify_cospi, gfc_simplify_sinpi, gfc_simplify_tanpi): New.
+
+2025-05-27 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/101735
+ * primary.cc (gfc_match_varspec): Correct order of logic.
+
+2025-05-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/120049
+ * check.cc (gfc_check_c_associated): Use new helper functions.
+ Only call check_c_ptr_1 if optional c_ptr_2 tests succeed.
+ (check_c_ptr_1): Handle only c_ptr_1 checks.
+ (check_c_ptr_2): Expand checks for c_ptr_2 and handle cases
+ where there is no derived pointer in the gfc_expr and check
+ the inmod_sym_id only if it exists.
+ * misc.cc (gfc_typename): Handle the case for BT_VOID rather
+ than throw an internal error.
+
+2025-05-27 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/101735
+ * expr.cc (find_inquiry_ref): If an inquiry reference applies to
+ a substring, use that, and calculate substring length if needed.
+ * primary.cc (extend_ref): Also handle attaching to end of
+ reference chain for appending.
+ (gfc_match_varspec): Discrimate between arrays of character and
+ substrings of them. If a substring is taken from a character
+ component of a derived type, get the proper typespec so that
+ inquiry references work correctly.
+ (gfc_match_rvalue): Handle corner case where we hit a seemingly
+ dangling '%' and missed an inquiry reference. Try another match.
+
+2025-05-27 David Malcolm <dmalcolm@redhat.com>
+
+ PR other/116792
+ * error.cc (gfc_diagnostic_start_span): Update for diagnostic.h
+ changes.
+
2025-05-19 Harald Anlauf <anlauf@gmx.de>
PR fortran/120099
diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc
index f02a2a3..c693e42 100644
--- a/gcc/fortran/check.cc
+++ b/gcc/fortran/check.cc
@@ -5952,49 +5952,110 @@ gfc_check_c_sizeof (gfc_expr *arg)
}
-bool
-gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
+/* Helper functions check_c_ptr_1 and check_c_ptr_2
+ used in gfc_check_c_associated. */
+
+static inline
+bool check_c_ptr_1 (gfc_expr *c_ptr_1)
{
- if (c_ptr_1)
- {
- if (c_ptr_1->expr_type == EXPR_FUNCTION && c_ptr_1->ts.type == BT_VOID)
- return true;
+ if ((c_ptr_1->ts.type == BT_VOID)
+ && (c_ptr_1->expr_type == EXPR_FUNCTION))
+ return true;
- if (c_ptr_1->ts.type != BT_DERIVED
- || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
- || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
- && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
- {
- gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
- "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
- return false;
- }
- }
+ if (c_ptr_1->ts.type != BT_DERIVED
+ || c_ptr_1->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
+ || (c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_PTR
+ && c_ptr_1->ts.u.derived->intmod_sym_id != ISOCBINDING_FUNPTR))
+ goto check_1_error;
- if (!scalar_check (c_ptr_1, 0))
+ if ((c_ptr_1->ts.type == BT_DERIVED)
+ && (c_ptr_1->expr_type == EXPR_STRUCTURE)
+ && (c_ptr_1->ts.u.derived->intmod_sym_id
+ == ISOCBINDING_NULL_FUNPTR))
+ goto check_1_error;
+
+ if (scalar_check (c_ptr_1, 0))
+ return true;
+ else
+ /* Return since the check_1_error message may not apply here. */
return false;
- if (c_ptr_2)
- {
- if (c_ptr_2->expr_type == EXPR_FUNCTION && c_ptr_2->ts.type == BT_VOID)
- return true;
+check_1_error:
- if (c_ptr_2->ts.type != BT_DERIVED
- || c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING
- || (c_ptr_1->ts.u.derived->intmod_sym_id
- != c_ptr_2->ts.u.derived->intmod_sym_id))
+ gfc_error ("Argument C_PTR_1 at %L to C_ASSOCIATED shall have the "
+ "type TYPE(C_PTR) or TYPE(C_FUNPTR)", &c_ptr_1->where);
+ return false;
+}
+
+static inline
+bool check_c_ptr_2 (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
+{
+ switch (c_ptr_2->ts.type)
+ {
+ case BT_VOID:
+ if (c_ptr_2->expr_type == EXPR_FUNCTION)
{
- gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
- "same type as C_PTR_1: %s instead of %s", &c_ptr_1->where,
- gfc_typename (&c_ptr_1->ts), gfc_typename (&c_ptr_2->ts));
- return false;
+ if ((c_ptr_1->ts.type == BT_DERIVED)
+ && c_ptr_1->expr_type == EXPR_STRUCTURE
+ && (c_ptr_1->ts.u.derived->intmod_sym_id
+ == ISOCBINDING_FUNPTR))
+ goto check_2_error;
}
- }
+ break;
+
+ case BT_DERIVED:
+ if ((c_ptr_2->expr_type == EXPR_STRUCTURE)
+ && (c_ptr_2->ts.u.derived->intmod_sym_id == ISOCBINDING_PTR)
+ && (c_ptr_1->ts.type == BT_VOID)
+ && (c_ptr_1->expr_type == EXPR_FUNCTION))
+ return scalar_check (c_ptr_2, 1);
- if (c_ptr_2 && !scalar_check (c_ptr_2, 1))
+ if ((c_ptr_2->expr_type == EXPR_STRUCTURE)
+ && (c_ptr_1->ts.type == BT_VOID)
+ && (c_ptr_1->expr_type == EXPR_FUNCTION))
+ goto check_2_error;
+
+ if (c_ptr_2->ts.u.derived->from_intmod != INTMOD_ISO_C_BINDING)
+ goto check_2_error;
+
+ if (c_ptr_1->ts.type == BT_DERIVED
+ && (c_ptr_1->ts.u.derived->intmod_sym_id
+ != c_ptr_2->ts.u.derived->intmod_sym_id))
+ goto check_2_error;
+ break;
+
+ default:
+ goto check_2_error;
+ }
+
+ if (scalar_check (c_ptr_2, 1))
+ return true;
+ else
+ /* Return since the check_2_error message may not apply here. */
return false;
- return true;
+check_2_error:
+
+ gfc_error ("Argument C_PTR_2 at %L to C_ASSOCIATED shall have the "
+ "same type as C_PTR_1: %s instead of %s", &c_ptr_2->where,
+ gfc_typename (&c_ptr_1->ts), gfc_typename (&c_ptr_2->ts));
+
+ return false;
+ }
+
+
+bool
+gfc_check_c_associated (gfc_expr *c_ptr_1, gfc_expr *c_ptr_2)
+{
+ if (c_ptr_2)
+ {
+ if (check_c_ptr_2 (c_ptr_1, c_ptr_2))
+ return check_c_ptr_1 (c_ptr_1);
+ else
+ return false;
+ }
+ else
+ return check_c_ptr_1 (c_ptr_1);
}
diff --git a/gcc/fortran/error.cc b/gcc/fortran/error.cc
index f89d41d..004a4b2 100644
--- a/gcc/fortran/error.cc
+++ b/gcc/fortran/error.cc
@@ -618,9 +618,10 @@ gfc_diagnostic_text_starter (diagnostic_text_output_format &text_output,
static void
gfc_diagnostic_start_span (const diagnostic_location_print_policy &loc_policy,
- pretty_printer *pp,
+ to_text &sink,
expanded_location exploc)
{
+ pretty_printer *pp = get_printer (sink);
const bool colorize = pp_show_color (pp);
char *locus_prefix
= gfc_diagnostic_build_locus_prefix (loc_policy, exploc, colorize);
diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc
index 92a9ebd..bf858ea 100644
--- a/gcc/fortran/expr.cc
+++ b/gcc/fortran/expr.cc
@@ -1846,6 +1846,7 @@ find_inquiry_ref (gfc_expr *p, gfc_expr **newp)
gfc_ref *ref;
gfc_ref *inquiry = NULL;
gfc_ref *inquiry_head;
+ gfc_ref *ref_ss = NULL;
gfc_expr *tmp;
tmp = gfc_copy_expr (p);
@@ -1862,6 +1863,9 @@ find_inquiry_ref (gfc_expr *p, gfc_expr **newp)
{
inquiry = ref->next;
ref->next = NULL;
+ if (ref->type == REF_SUBSTRING)
+ ref_ss = ref;
+ break;
}
}
@@ -1891,6 +1895,28 @@ find_inquiry_ref (gfc_expr *p, gfc_expr **newp)
if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C"))
goto cleanup;
+ /* Inquire length of substring? */
+ if (ref_ss)
+ {
+ if (ref_ss->u.ss.start->expr_type == EXPR_CONSTANT
+ && ref_ss->u.ss.end->expr_type == EXPR_CONSTANT)
+ {
+ HOST_WIDE_INT istart, iend, length;
+ istart = gfc_mpz_get_hwi (ref_ss->u.ss.start->value.integer);
+ iend = gfc_mpz_get_hwi (ref_ss->u.ss.end->value.integer);
+
+ if (istart <= iend)
+ length = iend - istart + 1;
+ else
+ length = 0;
+ *newp = gfc_get_int_expr (gfc_default_integer_kind,
+ NULL, length);
+ break;
+ }
+ else
+ goto cleanup;
+ }
+
if (tmp->ts.u.cl->length
&& tmp->ts.u.cl->length->expr_type == EXPR_CONSTANT)
*newp = gfc_copy_expr (tmp->ts.u.cl->length);
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 4740c36..e461aa6 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -721,6 +721,14 @@ enum gfc_isym_id
remains compatible. */
GFC_ISYM_SU_KIND,
GFC_ISYM_UINT,
+
+ GFC_ISYM_ACOSPI,
+ GFC_ISYM_ASINPI,
+ GFC_ISYM_ATANPI,
+ GFC_ISYM_ATAN2PI,
+ GFC_ISYM_COSPI,
+ GFC_ISYM_SINPI,
+ GFC_ISYM_TANPI,
};
enum init_local_logical
diff --git a/gcc/fortran/intrinsic.cc b/gcc/fortran/intrinsic.cc
index 908e1da..9e07627 100644
--- a/gcc/fortran/intrinsic.cc
+++ b/gcc/fortran/intrinsic.cc
@@ -3452,37 +3452,37 @@ add_functions (void)
add_sym_1 ("acosd", GFC_ISYM_ACOSD, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_fn_r, gfc_simplify_acosd, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_acosd, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
make_generic ("acosd", GFC_ISYM_ACOSD, GFC_STD_F2023);
add_sym_1 ("dacosd", GFC_ISYM_ACOSD, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_acosd, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_acosd, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
add_sym_1 ("asind", GFC_ISYM_ASIND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_fn_r, gfc_simplify_asind, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_asind, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
make_generic ("asind", GFC_ISYM_ASIND, GFC_STD_F2023);
add_sym_1 ("dasind", GFC_ISYM_ASIND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_asind, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_asind, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
add_sym_1 ("atand", GFC_ISYM_ATAND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_fn_r, gfc_simplify_atand, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_atand, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
/* Two-argument version of atand, equivalent to atan2d. */
add_sym_2 ("atand", GFC_ISYM_ATAN2D, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_atan2, gfc_simplify_atan2d, gfc_resolve_trigd2,
+ gfc_check_atan2, gfc_simplify_atan2d, gfc_resolve_trig2,
y, BT_REAL, dr, REQUIRED,
x, BT_REAL, dr, REQUIRED);
@@ -3490,12 +3490,12 @@ add_functions (void)
add_sym_1 ("datand", GFC_ISYM_ATAND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_atand, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_atand, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
add_sym_2 ("atan2d", GFC_ISYM_ATAN2D, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_atan2, gfc_simplify_atan2d, gfc_resolve_trigd2,
+ gfc_check_atan2, gfc_simplify_atan2d, gfc_resolve_trig2,
y, BT_REAL, dr, REQUIRED,
x, BT_REAL, dr, REQUIRED);
@@ -3503,78 +3503,78 @@ add_functions (void)
add_sym_2 ("datan2d", GFC_ISYM_ATAN2D, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_datan2, gfc_simplify_atan2d, gfc_resolve_trigd2,
+ gfc_check_datan2, gfc_simplify_atan2d, gfc_resolve_trig2,
y, BT_REAL, dd, REQUIRED,
x, BT_REAL, dd, REQUIRED);
add_sym_1 ("cosd", GFC_ISYM_COSD, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_fn_r, gfc_simplify_cosd, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_cosd, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
make_generic ("cosd", GFC_ISYM_COSD, GFC_STD_F2023);
add_sym_1 ("dcosd", GFC_ISYM_COSD, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_cosd, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_cosd, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
add_sym_1 ("cotan", GFC_ISYM_COTAN, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_GNU,
- gfc_check_fn_rc2008, gfc_simplify_cotan, gfc_resolve_trigd,
+ gfc_check_fn_rc2008, gfc_simplify_cotan, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
add_sym_1 ("dcotan", GFC_ISYM_COTAN, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_cotan, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_cotan, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
add_sym_1 ("ccotan", GFC_ISYM_COTAN, CLASS_ELEMENTAL, ACTUAL_YES,
BT_COMPLEX, dz, GFC_STD_GNU,
- NULL, gfc_simplify_cotan, gfc_resolve_trigd,
+ NULL, gfc_simplify_cotan, gfc_resolve_trig,
x, BT_COMPLEX, dz, REQUIRED);
add_sym_1 ("zcotan", GFC_ISYM_COTAN, CLASS_ELEMENTAL, ACTUAL_YES,
BT_COMPLEX, dd, GFC_STD_GNU,
- NULL, gfc_simplify_cotan, gfc_resolve_trigd,
+ NULL, gfc_simplify_cotan, gfc_resolve_trig,
x, BT_COMPLEX, dd, REQUIRED);
make_generic ("cotan", GFC_ISYM_COTAN, GFC_STD_GNU);
add_sym_1 ("cotand", GFC_ISYM_COTAND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_GNU,
- gfc_check_fn_r, gfc_simplify_cotand, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_cotand, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
add_sym_1 ("dcotand", GFC_ISYM_COTAND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_cotand, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_cotand, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
make_generic ("cotand", GFC_ISYM_COTAND, GFC_STD_GNU);
add_sym_1 ("sind", GFC_ISYM_SIND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_fn_r, gfc_simplify_sind, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_sind, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
make_generic ("sind", GFC_ISYM_SIND, GFC_STD_F2023);
add_sym_1 ("dsind", GFC_ISYM_SIND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_sind, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_sind, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
add_sym_1 ("tand", GFC_ISYM_TAND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dr, GFC_STD_F2023,
- gfc_check_fn_r, gfc_simplify_tand, gfc_resolve_trigd,
+ gfc_check_fn_r, gfc_simplify_tand, gfc_resolve_trig,
x, BT_REAL, dr, REQUIRED);
make_generic ("tand", GFC_ISYM_TAND, GFC_STD_F2023);
add_sym_1 ("dtand", GFC_ISYM_TAND, CLASS_ELEMENTAL, ACTUAL_YES,
BT_REAL, dd, GFC_STD_GNU,
- gfc_check_fn_d, gfc_simplify_tand, gfc_resolve_trigd,
+ gfc_check_fn_d, gfc_simplify_tand, gfc_resolve_trig,
x, BT_REAL, dd, REQUIRED);
/* The following function is internally used for coarray libray functions.
@@ -3590,6 +3590,57 @@ add_functions (void)
REQUIRED, val, BT_INTEGER, di, REQUIRED, i, BT_INTEGER, di,
REQUIRED);
make_from_module ();
+
+ /* The half-cycle trigonometric functions were added by Fortran 2023. */
+
+ add_sym_1 ("acospi", GFC_ISYM_ACOSPI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr,
+ GFC_STD_F2023, gfc_check_fn_r, gfc_simplify_acospi,
+ gfc_resolve_trig, x, BT_REAL, dr, REQUIRED);
+
+ make_generic ("acospi", GFC_ISYM_ACOSPI, GFC_STD_F2023);
+
+ add_sym_1 ("asinpi", GFC_ISYM_ASINPI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr,
+ GFC_STD_F2023, gfc_check_fn_r, gfc_simplify_asinpi,
+ gfc_resolve_trig, x, BT_REAL, dr, REQUIRED);
+
+ make_generic ("asinpi", GFC_ISYM_ASINPI, GFC_STD_F2023);
+
+ add_sym_1 ("atanpi", GFC_ISYM_ATANPI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr,
+ GFC_STD_F2023, gfc_check_fn_r, gfc_simplify_atanpi,
+ gfc_resolve_trig, x, BT_REAL, dr, REQUIRED);
+
+ /* Two-argument version of atanpi, equivalent to atan2pi. */
+ add_sym_2 ("atanpi", GFC_ISYM_ATAN2PI, CLASS_ELEMENTAL, ACTUAL_YES, BT_REAL,
+ dr, GFC_STD_F2023, gfc_check_atan2, gfc_simplify_atan2pi,
+ gfc_resolve_trig2, y, BT_REAL, dr, REQUIRED, x, BT_REAL, dr,
+ REQUIRED);
+
+ make_generic ("atanpi", GFC_ISYM_ATANPI, GFC_STD_F2023);
+
+ add_sym_2 ("atan2pi", GFC_ISYM_ATAN2PI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL,
+ dr, GFC_STD_F2023, gfc_check_atan2, gfc_simplify_atan2pi,
+ gfc_resolve_trig2, y, BT_REAL, dr, REQUIRED, x, BT_REAL, dr,
+ REQUIRED);
+
+ make_generic ("atan2pi", GFC_ISYM_ATAN2PI, GFC_STD_F2023);
+
+ add_sym_1 ("cospi", GFC_ISYM_COSPI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr,
+ GFC_STD_F2023, gfc_check_fn_r, gfc_simplify_cospi,
+ gfc_resolve_trig, x, BT_REAL, dr, REQUIRED);
+
+ make_generic ("cospi", GFC_ISYM_COSPI, GFC_STD_F2023);
+
+ add_sym_1 ("sinpi", GFC_ISYM_SINPI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr,
+ GFC_STD_F2023, gfc_check_fn_r, gfc_simplify_sinpi,
+ gfc_resolve_trig, x, BT_REAL, dr, REQUIRED);
+
+ make_generic ("sinpi", GFC_ISYM_SINPI, GFC_STD_F2023);
+
+ add_sym_1 ("tanpi", GFC_ISYM_TANPI, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr,
+ GFC_STD_F2023, gfc_check_fn_r, gfc_simplify_tanpi,
+ gfc_resolve_trig, x, BT_REAL, dr, REQUIRED);
+
+ make_generic ("tanpi", GFC_ISYM_TANPI, GFC_STD_F2023);
}
diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h
index 767792c..fd54588 100644
--- a/gcc/fortran/intrinsic.h
+++ b/gcc/fortran/intrinsic.h
@@ -246,6 +246,7 @@ gfc_expr *gfc_simplify_achar (gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_acos (gfc_expr *);
gfc_expr *gfc_simplify_acosd (gfc_expr *);
gfc_expr *gfc_simplify_acosh (gfc_expr *);
+gfc_expr *gfc_simplify_acospi (gfc_expr *);
gfc_expr *gfc_simplify_adjustl (gfc_expr *);
gfc_expr *gfc_simplify_adjustr (gfc_expr *);
gfc_expr *gfc_simplify_aimag (gfc_expr *);
@@ -259,11 +260,14 @@ gfc_expr *gfc_simplify_and (gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_any (gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_asin (gfc_expr *);
gfc_expr *gfc_simplify_asinh (gfc_expr *);
+gfc_expr *gfc_simplify_asinpi (gfc_expr *);
gfc_expr *gfc_simplify_atan (gfc_expr *);
gfc_expr *gfc_simplify_atand (gfc_expr *);
gfc_expr *gfc_simplify_atanh (gfc_expr *);
+gfc_expr *gfc_simplify_atanpi (gfc_expr *);
gfc_expr *gfc_simplify_atan2 (gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_atan2d (gfc_expr *, gfc_expr *);
+gfc_expr *gfc_simplify_atan2pi (gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_bessel_j0 (gfc_expr *);
gfc_expr *gfc_simplify_bessel_j1 (gfc_expr *);
gfc_expr *gfc_simplify_bessel_jn (gfc_expr *, gfc_expr *);
@@ -288,6 +292,7 @@ gfc_expr *gfc_simplify_conjg (gfc_expr *);
gfc_expr *gfc_simplify_cos (gfc_expr *);
gfc_expr *gfc_simplify_cosd (gfc_expr *);
gfc_expr *gfc_simplify_cosh (gfc_expr *);
+gfc_expr *gfc_simplify_cospi (gfc_expr *);
gfc_expr *gfc_simplify_cotan (gfc_expr *);
gfc_expr *gfc_simplify_cotand (gfc_expr *);
gfc_expr *gfc_simplify_count (gfc_expr *, gfc_expr *, gfc_expr *);
@@ -421,6 +426,7 @@ gfc_expr *gfc_simplify_shiftr (gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_sin (gfc_expr *);
gfc_expr *gfc_simplify_sind (gfc_expr *);
gfc_expr *gfc_simplify_sinh (gfc_expr *);
+gfc_expr *gfc_simplify_sinpi (gfc_expr *);
gfc_expr *gfc_simplify_size (gfc_expr *, gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_sizeof (gfc_expr *);
gfc_expr *gfc_simplify_storage_size (gfc_expr *, gfc_expr *);
@@ -432,6 +438,7 @@ gfc_expr *gfc_simplify_sum (gfc_expr *, gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_tan (gfc_expr *);
gfc_expr *gfc_simplify_tand (gfc_expr *);
gfc_expr *gfc_simplify_tanh (gfc_expr *);
+gfc_expr *gfc_simplify_tanpi (gfc_expr *);
gfc_expr *gfc_simplify_this_image (gfc_expr *, gfc_expr *, gfc_expr *);
gfc_expr *gfc_simplify_tiny (gfc_expr *);
gfc_expr *gfc_simplify_trailz (gfc_expr *);
@@ -631,8 +638,8 @@ void gfc_resolve_time (gfc_expr *);
void gfc_resolve_time8 (gfc_expr *);
void gfc_resolve_transfer (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *);
void gfc_resolve_transpose (gfc_expr *, gfc_expr *);
-void gfc_resolve_trigd (gfc_expr *, gfc_expr *);
-void gfc_resolve_trigd2 (gfc_expr *, gfc_expr *, gfc_expr *);
+void gfc_resolve_trig (gfc_expr *, gfc_expr *);
+void gfc_resolve_trig2 (gfc_expr *, gfc_expr *, gfc_expr *);
void gfc_resolve_trim (gfc_expr *, gfc_expr *);
void gfc_resolve_ttynam (gfc_expr *, gfc_expr *);
void gfc_resolve_ubound (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *);
diff --git a/gcc/fortran/io.cc b/gcc/fortran/io.cc
index b5c9d33..7466d8f 100644
--- a/gcc/fortran/io.cc
+++ b/gcc/fortran/io.cc
@@ -1228,7 +1228,8 @@ between_desc:
default:
if (mode != MODE_FORMAT)
format_locus.nextc += format_string_pos - 1;
- if (!gfc_notify_std (GFC_STD_GNU, "Missing comma at %L", &format_locus))
+ if (!gfc_notify_std (GFC_STD_LEGACY,
+ "Missing comma in FORMAT string at %L", &format_locus))
return false;
/* If we do not actually return a failure, we need to unwind this
before the next round. */
@@ -1290,7 +1291,8 @@ extension_optional_comma:
default:
if (mode != MODE_FORMAT)
format_locus.nextc += format_string_pos;
- if (!gfc_notify_std (GFC_STD_GNU, "Missing comma at %L", &format_locus))
+ if (!gfc_notify_std (GFC_STD_LEGACY,
+ "Missing comma in FORMAT string at %L", &format_locus))
return false;
/* If we do not actually return a failure, we need to unwind this
before the next round. */
diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc
index 6930e2c..1001309 100644
--- a/gcc/fortran/iresolve.cc
+++ b/gcc/fortran/iresolve.cc
@@ -3435,13 +3435,12 @@ gfc_resolve_trim (gfc_expr *f, gfc_expr *string)
f->value.function.name = gfc_get_string ("__trim_%d", string->ts.kind);
}
-
-/* Resolve the degree trigonometric functions. This amounts to setting
+/* Resolve the trigonometric functions. This amounts to setting
the function return type-spec from its argument and building a
library function names of the form _gfortran_sind_r4. */
void
-gfc_resolve_trigd (gfc_expr *f, gfc_expr *x)
+gfc_resolve_trig (gfc_expr *f, gfc_expr *x)
{
f->ts = x->ts;
f->value.function.name
@@ -3450,9 +3449,8 @@ gfc_resolve_trigd (gfc_expr *f, gfc_expr *x)
gfc_type_abi_kind (&x->ts));
}
-
void
-gfc_resolve_trigd2 (gfc_expr *f, gfc_expr *y, gfc_expr *x)
+gfc_resolve_trig2 (gfc_expr *f, gfc_expr *y, gfc_expr *x)
{
f->ts = y->ts;
f->value.function.name
diff --git a/gcc/fortran/mathbuiltins.def b/gcc/fortran/mathbuiltins.def
index 2d475a2..bdc9058 100644
--- a/gcc/fortran/mathbuiltins.def
+++ b/gcc/fortran/mathbuiltins.def
@@ -23,34 +23,41 @@ along with GCC; see the file COPYING3. If not see
Use DEFINE_MATH_BUILTIN_C if the complex versions of the builtin are
also available. */
-DEFINE_MATH_BUILTIN_C (ACOS, "acos", 0)
-DEFINE_MATH_BUILTIN_C (ACOSH, "acosh", 0)
-DEFINE_MATH_BUILTIN_C (ASIN, "asin", 0)
-DEFINE_MATH_BUILTIN_C (ASINH, "asinh", 0)
-DEFINE_MATH_BUILTIN_C (ATAN, "atan", 0)
-DEFINE_MATH_BUILTIN_C (ATANH, "atanh", 0)
-DEFINE_MATH_BUILTIN (ATAN2, "atan2", 1)
-DEFINE_MATH_BUILTIN_C (COS, "cos", 0)
-DEFINE_MATH_BUILTIN_C (COSH, "cosh", 0)
-DEFINE_MATH_BUILTIN_C (EXP, "exp", 0)
-DEFINE_MATH_BUILTIN_C (LOG, "log", 0)
-DEFINE_MATH_BUILTIN_C (LOG10, "log10", 0)
-DEFINE_MATH_BUILTIN_C (SIN, "sin", 0)
-DEFINE_MATH_BUILTIN_C (SINH, "sinh", 0)
-DEFINE_MATH_BUILTIN_C (SQRT, "sqrt", 0)
-DEFINE_MATH_BUILTIN_C (TAN, "tan", 0)
-DEFINE_MATH_BUILTIN_C (TANH, "tanh", 0)
-DEFINE_MATH_BUILTIN (J0, "j0", 0)
-DEFINE_MATH_BUILTIN (J1, "j1", 0)
-DEFINE_MATH_BUILTIN (JN, "jn", 5)
-DEFINE_MATH_BUILTIN (Y0, "y0", 0)
-DEFINE_MATH_BUILTIN (Y1, "y1", 0)
-DEFINE_MATH_BUILTIN (YN, "yn", 5)
-DEFINE_MATH_BUILTIN (ERF, "erf", 0)
-DEFINE_MATH_BUILTIN (ERFC, "erfc", 0)
-DEFINE_MATH_BUILTIN (TGAMMA,"tgamma", 0)
-DEFINE_MATH_BUILTIN (LGAMMA,"lgamma", 0)
-DEFINE_MATH_BUILTIN (HYPOT, "hypot", 1)
+DEFINE_MATH_BUILTIN_C (ACOS, "acos", 0)
+DEFINE_MATH_BUILTIN_C (ACOSH, "acosh", 0)
+DEFINE_MATH_BUILTIN (ACOSPI, "acospi", 0)
+DEFINE_MATH_BUILTIN_C (ASIN, "asin", 0)
+DEFINE_MATH_BUILTIN_C (ASINH, "asinh", 0)
+DEFINE_MATH_BUILTIN (ASINPI, "asinpi", 0)
+DEFINE_MATH_BUILTIN_C (ATAN, "atan", 0)
+DEFINE_MATH_BUILTIN (ATAN2, "atan2", 1)
+DEFINE_MATH_BUILTIN (ATAN2PI, "atan2pi", 1)
+DEFINE_MATH_BUILTIN_C (ATANH, "atanh", 0)
+DEFINE_MATH_BUILTIN (ATANPI, "atanpi", 0)
+DEFINE_MATH_BUILTIN_C (COS, "cos", 0)
+DEFINE_MATH_BUILTIN_C (COSH, "cosh", 0)
+DEFINE_MATH_BUILTIN (COSPI, "cospi", 0)
+DEFINE_MATH_BUILTIN (ERF, "erf", 0)
+DEFINE_MATH_BUILTIN (ERFC, "erfc", 0)
+DEFINE_MATH_BUILTIN_C (EXP, "exp", 0)
+DEFINE_MATH_BUILTIN (HYPOT, "hypot", 1)
+DEFINE_MATH_BUILTIN (J0, "j0", 0)
+DEFINE_MATH_BUILTIN (J1, "j1", 0)
+DEFINE_MATH_BUILTIN (JN, "jn", 5)
+DEFINE_MATH_BUILTIN (LGAMMA, "lgamma", 0)
+DEFINE_MATH_BUILTIN_C (LOG, "log", 0)
+DEFINE_MATH_BUILTIN_C (LOG10, "log10", 0)
+DEFINE_MATH_BUILTIN_C (SIN, "sin", 0)
+DEFINE_MATH_BUILTIN_C (SINH, "sinh", 0)
+DEFINE_MATH_BUILTIN (SINPI, "sinpi", 0)
+DEFINE_MATH_BUILTIN_C (SQRT, "sqrt", 0)
+DEFINE_MATH_BUILTIN_C (TAN, "tan", 0)
+DEFINE_MATH_BUILTIN_C (TANH, "tanh", 0)
+DEFINE_MATH_BUILTIN (TANPI, "tanpi", 0)
+DEFINE_MATH_BUILTIN (TGAMMA, "tgamma", 0)
+DEFINE_MATH_BUILTIN (Y0, "y0", 0)
+DEFINE_MATH_BUILTIN (Y1, "y1", 0)
+DEFINE_MATH_BUILTIN (YN, "yn", 5)
/* OTHER_BUILTIN (CODE, NAME, PROTOTYPE_TYPE, CONST)
For floating-point builtins that do not directly correspond to a
diff --git a/gcc/fortran/misc.cc b/gcc/fortran/misc.cc
index 893c40f..b8bdf75 100644
--- a/gcc/fortran/misc.cc
+++ b/gcc/fortran/misc.cc
@@ -214,6 +214,9 @@ gfc_typename (gfc_typespec *ts, bool for_hash)
case BT_UNKNOWN:
strcpy (buffer, "UNKNOWN");
break;
+ case BT_VOID:
+ strcpy (buffer, "VOID");
+ break;
default:
gfc_internal_error ("gfc_typename(): Undefined type");
}
diff --git a/gcc/fortran/primary.cc b/gcc/fortran/primary.cc
index ec4e135..db5fc5d 100644
--- a/gcc/fortran/primary.cc
+++ b/gcc/fortran/primary.cc
@@ -2102,10 +2102,18 @@ extend_ref (gfc_expr *primary, gfc_ref *tail)
{
if (primary->ref == NULL)
primary->ref = tail = gfc_get_ref ();
+ else if (tail == NULL)
+ {
+ /* Set tail to end of reference chain. */
+ for (gfc_ref *ref = primary->ref; ref; ref = ref->next)
+ if (ref->next == NULL)
+ {
+ tail = ref;
+ break;
+ }
+ }
else
{
- if (tail == NULL)
- gfc_internal_error ("extend_ref(): Bad tail");
tail->next = gfc_get_ref ();
tail = tail->next;
}
@@ -2302,9 +2310,22 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
gfc_array_spec *as;
bool coarray_only = sym->attr.codimension && !sym->attr.dimension
&& sym->ts.type == BT_CHARACTER;
+ gfc_ref *ref, *strarr = NULL;
tail = extend_ref (primary, tail);
- tail->type = REF_ARRAY;
+ if (sym->ts.type == BT_CHARACTER && tail->type == REF_SUBSTRING)
+ {
+ gcc_assert (sym->attr.dimension);
+ /* Find array reference for substrings of character arrays. */
+ for (ref = primary->ref; ref && ref->next; ref = ref->next)
+ if (ref->type == REF_ARRAY && ref->next->type == REF_SUBSTRING)
+ {
+ strarr = ref;
+ break;
+ }
+ }
+ else
+ tail->type = REF_ARRAY;
/* In EQUIVALENCE, we don't know yet whether we are seeing
an array, character variable or array of character
@@ -2317,7 +2338,8 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
else
as = sym->as;
- m = gfc_match_array_ref (&tail->u.ar, as, equiv_flag, as ? as->corank : 0,
+ ref = strarr ? strarr : tail;
+ m = gfc_match_array_ref (&ref->u.ar, as, equiv_flag, as ? as->corank : 0,
coarray_only);
if (m != MATCH_YES)
return m;
@@ -2483,6 +2505,7 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
{
bool t;
gfc_symtree *tbp;
+ gfc_typespec *ts = &primary->ts;
m = gfc_match_name (name);
if (m == MATCH_NO)
@@ -2490,8 +2513,18 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
if (m != MATCH_YES)
return MATCH_ERROR;
+ /* For derived type components find typespec of ultimate component. */
+ if (ts->type == BT_DERIVED && primary->ref)
+ {
+ for (gfc_ref *ref = primary->ref; ref; ref = ref->next)
+ {
+ if (ref->type == REF_COMPONENT && ref->u.c.component)
+ ts = &ref->u.c.component->ts;
+ }
+ }
+
intrinsic = false;
- if (primary->ts.type != BT_CLASS && primary->ts.type != BT_DERIVED)
+ if (ts->type != BT_CLASS && ts->type != BT_DERIVED)
{
inquiry = is_inquiry_ref (name, &tmp);
if (inquiry)
@@ -2564,7 +2597,7 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
return MATCH_ERROR;
}
else if (tmp->u.i == INQUIRY_LEN
- && primary->ts.type != BT_CHARACTER)
+ && ts->type != BT_CHARACTER)
{
gfc_error ("The LEN part_ref at %C must be applied "
"to a CHARACTER expression");
@@ -2659,6 +2692,11 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag,
primary->ref = tmp;
else
{
+ /* Find end of reference chain if inquiry reference and tail not
+ set. */
+ if (tail == NULL && inquiry && tmp)
+ tail = extend_ref (primary, tail);
+
/* Set by the for loop below for the last component ref. */
gcc_assert (tail != NULL);
tail->next = tmp;
@@ -2828,6 +2866,7 @@ check_substring:
if (substring)
primary->ts.u.cl = NULL;
+ gfc_gobble_whitespace ();
if (gfc_peek_ascii_char () == '(')
{
gfc_error_now ("Unexpected array/substring ref at %C");
@@ -4271,6 +4310,16 @@ gfc_match_rvalue (gfc_expr **result)
return MATCH_ERROR;
}
+ /* Scan for possible inquiry references. */
+ if (m == MATCH_YES
+ && e->expr_type == EXPR_VARIABLE
+ && gfc_peek_ascii_char () == '%')
+ {
+ m = gfc_match_varspec (e, 0, false, false);
+ if (m == MATCH_NO)
+ m = MATCH_YES;
+ }
+
if (m == MATCH_YES)
{
e->where = where;
diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc
index 1927097..b25cd2c 100644
--- a/gcc/fortran/simplify.cc
+++ b/gcc/fortran/simplify.cc
@@ -885,7 +885,8 @@ gfc_simplify_acos (gfc_expr *x)
if (mpfr_cmp_si (x->value.real, 1) > 0
|| mpfr_cmp_si (x->value.real, -1) < 0)
{
- gfc_error ("Argument of ACOS at %L must be between -1 and 1",
+ gfc_error ("Argument of ACOS at %L must be within the closed "
+ "interval [-1, 1]",
&x->where);
return &gfc_bad_expr;
}
@@ -1162,7 +1163,8 @@ gfc_simplify_asin (gfc_expr *x)
if (mpfr_cmp_si (x->value.real, 1) > 0
|| mpfr_cmp_si (x->value.real, -1) < 0)
{
- gfc_error ("Argument of ASIN at %L must be between -1 and 1",
+ gfc_error ("Argument of ASIN at %L must be within the closed "
+ "interval [-1, 1]",
&x->where);
return &gfc_bad_expr;
}
@@ -1213,8 +1215,9 @@ gfc_simplify_acosd (gfc_expr *x)
if (mpfr_cmp_si (x->value.real, 1) > 0
|| mpfr_cmp_si (x->value.real, -1) < 0)
{
- gfc_error ("Argument of ACOSD at %L must be between -1 and 1",
- &x->where);
+ gfc_error (
+ "Argument of ACOSD at %L must be within the closed interval [-1, 1]",
+ &x->where);
return &gfc_bad_expr;
}
@@ -1243,8 +1246,9 @@ gfc_simplify_asind (gfc_expr *x)
if (mpfr_cmp_si (x->value.real, 1) > 0
|| mpfr_cmp_si (x->value.real, -1) < 0)
{
- gfc_error ("Argument of ASIND at %L must be between -1 and 1",
- &x->where);
+ gfc_error (
+ "Argument of ASIND at %L must be within the closed interval [-1, 1]",
+ &x->where);
return &gfc_bad_expr;
}
@@ -1383,7 +1387,7 @@ gfc_simplify_atan2 (gfc_expr *y, gfc_expr *x)
if (mpfr_zero_p (y->value.real) && mpfr_zero_p (x->value.real))
{
- gfc_error ("If first argument of ATAN2 at %L is zero, then the "
+ gfc_error ("If the first argument of ATAN2 at %L is zero, then the "
"second argument must not be zero", &y->where);
return &gfc_bad_expr;
}
@@ -1962,7 +1966,7 @@ gfc_simplify_atan2d (gfc_expr *y, gfc_expr *x)
if (mpfr_zero_p (y->value.real) && mpfr_zero_p (x->value.real))
{
- gfc_error ("If first argument of ATAN2D at %L is zero, then the "
+ gfc_error ("If the first argument of ATAN2D at %L is zero, then the "
"second argument must not be zero", &y->where);
return &gfc_bad_expr;
}
@@ -2151,6 +2155,250 @@ gfc_simplify_cosh (gfc_expr *x)
return range_check (result, "COSH");
}
+gfc_expr *
+gfc_simplify_acospi (gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ if (mpfr_cmp_si (x->value.real, 1) > 0 || mpfr_cmp_si (x->value.real, -1) < 0)
+ {
+ gfc_error (
+ "Argument of ACOSPI at %L must be within the closed interval [-1, 1]",
+ &x->where);
+ return &gfc_bad_expr;
+ }
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_acospi (result->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t pi, tmp;
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), pi, tmp, NULL);
+ mpfr_const_pi (pi, GFC_RND_MODE);
+ mpfr_acos (tmp, x->value.real, GFC_RND_MODE);
+ mpfr_div (result->value.real, tmp, pi, GFC_RND_MODE);
+ mpfr_clears (pi, tmp, NULL);
+#endif
+
+ return result;
+}
+
+gfc_expr *
+gfc_simplify_asinpi (gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ if (mpfr_cmp_si (x->value.real, 1) > 0 || mpfr_cmp_si (x->value.real, -1) < 0)
+ {
+ gfc_error (
+ "Argument of ASINPI at %L must be within the closed interval [-1, 1]",
+ &x->where);
+ return &gfc_bad_expr;
+ }
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_asinpi (result->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t pi, tmp;
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), pi, tmp, NULL);
+ mpfr_const_pi (pi, GFC_RND_MODE);
+ mpfr_asin (tmp, x->value.real, GFC_RND_MODE);
+ mpfr_div (result->value.real, tmp, pi, GFC_RND_MODE);
+ mpfr_clears (pi, tmp, NULL);
+#endif
+
+ return result;
+}
+
+gfc_expr *
+gfc_simplify_atanpi (gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_atanpi (result->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t pi, tmp;
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), pi, tmp, NULL);
+ mpfr_const_pi (pi, GFC_RND_MODE);
+ mpfr_atan (tmp, x->value.real, GFC_RND_MODE);
+ mpfr_div (result->value.real, tmp, pi, GFC_RND_MODE);
+ mpfr_clears (pi, tmp, NULL);
+#endif
+
+ return range_check (result, "ATANPI");
+}
+
+gfc_expr *
+gfc_simplify_atan2pi (gfc_expr *y, gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ if (mpfr_zero_p (y->value.real) && mpfr_zero_p (x->value.real))
+ {
+ gfc_error ("If the first argument of ATAN2PI at %L is zero, then the "
+ "second argument must not be zero",
+ &y->where);
+ return &gfc_bad_expr;
+ }
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_atan2pi (result->value.real, y->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t pi, tmp;
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), pi, tmp, NULL);
+ mpfr_const_pi (pi, GFC_RND_MODE);
+ mpfr_atan2 (tmp, y->value.real, x->value.real, GFC_RND_MODE);
+ mpfr_div (result->value.real, tmp, pi, GFC_RND_MODE);
+ mpfr_clears (pi, tmp, NULL);
+#endif
+
+ return range_check (result, "ATAN2PI");
+}
+
+gfc_expr *
+gfc_simplify_cospi (gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_cospi (result->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t cs, n, r, two;
+ int s;
+
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), cs, n, r, two, NULL);
+
+ mpfr_abs (r, x->value.real, GFC_RND_MODE);
+ mpfr_modf (n, r, r, GFC_RND_MODE);
+
+ if (mpfr_cmp_d (r, 0.5) == 0)
+ {
+ mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
+ return result;
+ }
+
+ mpfr_set_ui (two, 2, GFC_RND_MODE);
+ mpfr_fmod (cs, n, two, GFC_RND_MODE);
+ s = mpfr_cmp_ui (cs, 0) == 0 ? 1 : -1;
+
+ mpfr_const_pi (cs, GFC_RND_MODE);
+ mpfr_mul (cs, cs, r, GFC_RND_MODE);
+ mpfr_cos (cs, cs, GFC_RND_MODE);
+ mpfr_mul_si (result->value.real, cs, s, GFC_RND_MODE);
+
+ mpfr_clears (cs, n, r, two, NULL);
+#endif
+
+ return range_check (result, "COSPI");
+}
+
+gfc_expr *
+gfc_simplify_sinpi (gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_sinpi (result->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t sn, n, r, two;
+ int s;
+
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), sn, n, r, two, NULL);
+
+ mpfr_abs (r, x->value.real, GFC_RND_MODE);
+ mpfr_modf (n, r, r, GFC_RND_MODE);
+
+ if (mpfr_cmp_d (r, 0.0) == 0)
+ {
+ mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
+ return result;
+ }
+
+ mpfr_set_ui (two, 2, GFC_RND_MODE);
+ mpfr_fmod (sn, n, two, GFC_RND_MODE);
+ s = mpfr_cmp_si (x->value.real, 0) < 0 ? -1 : 1;
+ s *= mpfr_cmp_ui (sn, 0) == 0 ? 1 : -1;
+
+ mpfr_const_pi (sn, GFC_RND_MODE);
+ mpfr_mul (sn, sn, r, GFC_RND_MODE);
+ mpfr_sin (sn, sn, GFC_RND_MODE);
+ mpfr_mul_si (result->value.real, sn, s, GFC_RND_MODE);
+
+ mpfr_clears (sn, n, r, two, NULL);
+#endif
+
+ return range_check (result, "SINPI");
+}
+
+gfc_expr *
+gfc_simplify_tanpi (gfc_expr *x)
+{
+ gfc_expr *result;
+
+ if (x->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ result = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
+
+#if MPFR_VERSION >= MPFR_VERSION_NUM(4, 2, 0)
+ mpfr_tanpi (result->value.real, x->value.real, GFC_RND_MODE);
+#else
+ mpfr_t tn, n, r;
+ int s;
+
+ mpfr_inits2 (2 * mpfr_get_prec (x->value.real), tn, n, r, NULL);
+
+ mpfr_abs (r, x->value.real, GFC_RND_MODE);
+ mpfr_modf (n, r, r, GFC_RND_MODE);
+
+ if (mpfr_cmp_d (r, 0.0) == 0)
+ {
+ mpfr_set_ui (result->value.real, 0, GFC_RND_MODE);
+ return result;
+ }
+
+ s = mpfr_cmp_si (x->value.real, 0) < 0 ? -1 : 1;
+
+ mpfr_const_pi (tn, GFC_RND_MODE);
+ mpfr_mul (tn, tn, r, GFC_RND_MODE);
+ mpfr_tan (tn, tn, GFC_RND_MODE);
+ mpfr_mul_si (result->value.real, tn, s, GFC_RND_MODE);
+
+ mpfr_clears (tn, n, r, NULL);
+#endif
+
+ return range_check (result, "TANPI");
+}
gfc_expr *
gfc_simplify_count (gfc_expr *mask, gfc_expr *dim, gfc_expr *kind)
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 4fd87f2..4e61de2 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -9747,6 +9747,103 @@ default_arg (const char *p, int len)
return 0;
}
+/* Use multilib_dir as key to find corresponding multilib_os_dir and
+ multiarch_dir. */
+
+static void
+find_multilib_os_dir_by_multilib_dir (const char *multilib_dir,
+ const char **p_multilib_os_dir,
+ const char **p_multiarch_dir)
+{
+ const char *p = multilib_select;
+ unsigned int this_path_len;
+ const char *this_path;
+ int ok = 0;
+
+ while (*p != '\0')
+ {
+ /* Ignore newlines. */
+ if (*p == '\n')
+ {
+ ++p;
+ continue;
+ }
+
+ /* Get the initial path. */
+ this_path = p;
+ while (*p != ' ')
+ {
+ if (*p == '\0')
+ {
+ fatal_error (input_location, "multilib select %qs %qs is invalid",
+ multilib_select, multilib_reuse);
+ }
+ ++p;
+ }
+ this_path_len = p - this_path;
+
+ ok = 0;
+
+ /* Skip any arguments, we don't care at this stage. */
+ while (*++p != ';');
+
+ if (this_path_len != 1
+ || this_path[0] != '.')
+ {
+ char *new_multilib_dir = XNEWVEC (char, this_path_len + 1);
+ char *q;
+
+ strncpy (new_multilib_dir, this_path, this_path_len);
+ new_multilib_dir[this_path_len] = '\0';
+ q = strchr (new_multilib_dir, ':');
+ if (q != NULL)
+ *q = '\0';
+
+ if (strcmp (new_multilib_dir, multilib_dir) == 0)
+ ok = 1;
+ }
+
+ /* Found matched multilib_dir, update multilib_os_dir and
+ multiarch_dir. */
+ if (ok)
+ {
+ const char *q = this_path, *end = this_path + this_path_len;
+
+ while (q < end && *q != ':')
+ q++;
+ if (q < end)
+ {
+ const char *q2 = q + 1, *ml_end = end;
+ char *new_multilib_os_dir;
+
+ while (q2 < end && *q2 != ':')
+ q2++;
+ if (*q2 == ':')
+ ml_end = q2;
+ if (ml_end - q == 1)
+ *p_multilib_os_dir = xstrdup (".");
+ else
+ {
+ new_multilib_os_dir = XNEWVEC (char, ml_end - q);
+ memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1);
+ new_multilib_os_dir[ml_end - q - 1] = '\0';
+ *p_multilib_os_dir = new_multilib_os_dir;
+ }
+
+ if (q2 < end && *q2 == ':')
+ {
+ char *new_multiarch_dir = XNEWVEC (char, end - q2);
+ memcpy (new_multiarch_dir, q2 + 1, end - q2 - 1);
+ new_multiarch_dir[end - q2 - 1] = '\0';
+ *p_multiarch_dir = new_multiarch_dir;
+ }
+ break;
+ }
+ }
+ ++p;
+ }
+}
+
/* Work out the subdirectory to use based on the options. The format of
multilib_select is a list of elements. Each element is a subdirectory
name followed by a list of options followed by a semicolon. The format
@@ -10025,7 +10122,16 @@ set_multilib_dir (void)
multilib_os_dir = NULL;
}
else if (multilib_dir != NULL && multilib_os_dir == NULL)
- multilib_os_dir = multilib_dir;
+ {
+ /* Give second chance to search matched multilib_os_dir again by matching
+ the multilib_dir since some target may use TARGET_COMPUTE_MULTILIB
+ hook rather than the builtin way. */
+ find_multilib_os_dir_by_multilib_dir (multilib_dir, &multilib_os_dir,
+ &multiarch_dir);
+
+ if (multilib_os_dir == NULL)
+ multilib_os_dir = multilib_dir;
+ }
}
/* Print out the multiple library subdirectory selection
diff --git a/gcc/ginclude/stdcountof.h b/gcc/ginclude/stdcountof.h
new file mode 100644
index 0000000..1d914f4
--- /dev/null
+++ b/gcc/ginclude/stdcountof.h
@@ -0,0 +1,31 @@
+/* Copyright (C) 2025 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+<http://www.gnu.org/licenses/>. */
+
+/* ISO C2Y: 7.21 Array count <stdcountof.h>. */
+
+#ifndef _STDCOUNTOF_H
+#define _STDCOUNTOF_H
+
+#define countof _Countof
+
+#endif /* stdcountof.h */
diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index f06ac46..73cf904 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -544,8 +544,12 @@ cs_interesting_for_ipcp_p (cgraph_edge *e)
if (e->count.ipa ().nonzero_p ())
return true;
/* If local (possibly guseed or adjusted 0 profile) claims edge is
- not executed, do not propagate. */
- if (e->count.initialized_p () && !e->count.nonzero_p ())
+ not executed, do not propagate.
+ Do not trust AFDO since branch needs to be executed multiple
+ time to count while we want to propagate even call called
+ once during the train run if callee is important. */
+ if (e->count.initialized_p () && !e->count.nonzero_p ()
+ && e->count.quality () != AFDO)
return false;
/* If we have zero IPA profile, still consider edge for cloning
in case we do partial training. */
diff --git a/gcc/ipa-split.cc b/gcc/ipa-split.cc
index 729fb79..933ca16 100644
--- a/gcc/ipa-split.cc
+++ b/gcc/ipa-split.cc
@@ -1992,6 +1992,10 @@ public:
return execute_feedback_split_functions ();
}
+ opt_pass * clone () final override
+ {
+ return new pass_feedback_split_functions (m_ctxt);
+ }
}; // class pass_feedback_split_functions
bool
diff --git a/gcc/ipa-sra.cc b/gcc/ipa-sra.cc
index 88bfae9..6e6cf89 100644
--- a/gcc/ipa-sra.cc
+++ b/gcc/ipa-sra.cc
@@ -1848,6 +1848,12 @@ scan_expr_access (tree expr, gimple *stmt, isra_scan_context ctx,
if (!desc || !desc->split_candidate)
return;
+ if (storage_order_barrier_p (expr))
+ {
+ disqualify_split_candidate (desc, "Encountered a storage order barrier.");
+ return;
+ }
+
if (!poffset.is_constant (&offset)
|| !psize.is_constant (&size)
|| !pmax_size.is_constant (&max_size))
diff --git a/gcc/match.pd b/gcc/match.pd
index 27f662f..bde9bd6 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -3438,6 +3438,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(signed_integer_sat_val @0)
@2))
(match (signed_integer_sat_add @0 @1)
+ /* T SUM = (T)((UT)X + (UT)IMM)
+ SAT_S_ADD = (X ^ SUM) < 0 && (X ^ IMM) >= 0 ? (-(T)(X < 0) ^ MAX) : SUM */
+ (cond^ (bit_and:c (lt (bit_xor @0 (nop_convert@2 (plus (nop_convert @0)
+ INTEGER_CST@1)))
+ integer_zerop)
+ (ge (bit_xor:c @0 INTEGER_CST@3) integer_zerop))
+ (signed_integer_sat_val @0)
+ @2)
+ (if (wi::eq_p (wi::to_wide (@1), wi::to_wide (@3)))))
+ (match (signed_integer_sat_add @0 @1)
/* SUM = .ADD_OVERFLOW (X, Y)
SAT_S_ADD = IMAGPART_EXPR (SUM) != 0 ? (-(T)(X < 0) ^ MAX) : SUM */
(cond^ (ne (imagpart (IFN_ADD_OVERFLOW:c@2 @0 @1)) integer_zerop)
@@ -3461,7 +3471,24 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(bit_xor:c @0 INTEGER_CST@3)) integer_zerop)
(signed_integer_sat_val @0)
@2)
- (if (wi::bit_and (wi::to_wide (@1), wi::to_wide (@3)) == 0))))
+ (if (wi::bit_and (wi::to_wide (@1), wi::to_wide (@3)) == 0)))
+
+(match (signed_integer_sat_add @0 @1)
+ /* T SUM = (T)((UT)X + (UT)-1);
+ SAT_S_ADD = (X ^ -1) < 0 ? SUM : (X ^ SUM) >= 0 ? SUM
+ : (x < 0) ? MIN : MAX */
+ (convert (cond^ (lt (bit_and:c @0 (nop_convert (negate (nop_convert @0))))
+ integer_zerop)
+ INTEGER_CST@2
+ (plus (nop_convert @0) integer_all_onesp@1)))
+ (with
+ {
+ unsigned precision = TYPE_PRECISION (type);
+ wide_int c1 = wi::to_wide (@1);
+ wide_int c2 = wi::to_wide (@2);
+ wide_int sum = wi::add (c1, c2);
+ }
+ (if (wi::eq_p (sum, wi::max_value (precision, SIGNED)))))))
/* Saturation sub for signed integer. */
(if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type))
diff --git a/gcc/opts-diagnostic.cc b/gcc/opts-diagnostic.cc
index 34c3906..3a1dc52 100644
--- a/gcc/opts-diagnostic.cc
+++ b/gcc/opts-diagnostic.cc
@@ -545,21 +545,40 @@ html_scheme_handler::make_sink (const context &ctxt,
const char *unparsed_arg,
const scheme_name_and_params &parsed_arg) const
{
+ bool css = true;
label_text filename;
+ bool javascript = true;
for (auto& iter : parsed_arg.m_kvs)
{
const std::string &key = iter.first;
const std::string &value = iter.second;
+ if (key == "css")
+ {
+ if (!parse_bool_value (ctxt, unparsed_arg, key, value,
+ css))
+ return nullptr;
+ continue;
+ }
if (key == "file")
{
filename = label_text::take (xstrdup (value.c_str ()));
continue;
}
+ if (key == "javascript")
+ {
+ if (!parse_bool_value (ctxt, unparsed_arg, key, value,
+ javascript))
+ return nullptr;
+ continue;
+ }
/* Key not found. */
auto_vec<const char *> known_keys;
+ known_keys.safe_push ("css");
known_keys.safe_push ("file");
- ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (), known_keys);
+ known_keys.safe_push ("javascript");
+ ctxt.report_unknown_key (unparsed_arg, key, get_scheme_name (),
+ known_keys);
return nullptr;
}
@@ -579,8 +598,13 @@ html_scheme_handler::make_sink (const context &ctxt,
if (!output_file)
return nullptr;
+ html_generation_options html_gen_opts;
+ html_gen_opts.m_css = css;
+ html_gen_opts.m_javascript = javascript;
+
auto sink = make_html_sink (ctxt.m_dc,
*line_table,
+ html_gen_opts,
std::move (output_file));
return sink;
}
diff --git a/gcc/passes.def b/gcc/passes.def
index 3b25105..0f7a659 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -140,6 +140,9 @@ along with GCC; see the file COPYING3. If not see
NEXT_PASS (pass_target_clone);
NEXT_PASS (pass_ipa_auto_profile);
+ PUSH_INSERT_PASSES_WITHIN (pass_ipa_auto_profile)
+ NEXT_PASS (pass_feedback_split_functions);
+ POP_INSERT_PASSES ()
NEXT_PASS (pass_ipa_tree_profile);
PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile)
NEXT_PASS (pass_feedback_split_functions);
diff --git a/gcc/predict.cc b/gcc/predict.cc
index ef31c48..872f54d 100644
--- a/gcc/predict.cc
+++ b/gcc/predict.cc
@@ -961,7 +961,7 @@ set_even_probabilities (basic_block bb,
if (unlikely_edges != NULL && unlikely_edges->contains (e))
e->probability = profile_probability::very_unlikely ();
else
- e->probability = all / scale;
+ e->probability = (all / scale).guessed ();
}
else
e->probability = profile_probability::never ();
@@ -4444,11 +4444,14 @@ rebuild_frequencies (void)
bool inconsistency_found = false;
bool uninitialized_probablity_found = false;
bool uninitialized_count_found = false;
+ bool feedback_found = false;
cfun->cfg->count_max = profile_count::uninitialized ();
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun), NULL, next_bb)
{
cfun->cfg->count_max = cfun->cfg->count_max.max (bb->count);
+ if (bb->count.nonzero_p () && bb->count.quality () >= AFDO)
+ feedback_found = true;
/* Uninitialized count may be result of inlining or an omision in an
optimization pass. */
if (!bb->count.initialized_p ())
@@ -4516,8 +4519,7 @@ rebuild_frequencies (void)
Propagating from probabilities would make profile look consistent, but
because probablities after code duplication may not be representative
for a given run, we would only propagate the error further. */
- if (ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.ipa ().nonzero_p ()
- && !uninitialized_count_found)
+ if (feedback_found && !uninitialized_count_found)
{
if (dump_file)
fprintf (dump_file,
diff --git a/gcc/profile-count.cc b/gcc/profile-count.cc
index 374f06f..2d9c778 100644
--- a/gcc/profile-count.cc
+++ b/gcc/profile-count.cc
@@ -364,8 +364,12 @@ profile_count::adjust_for_ipa_scaling (profile_count *num,
/* Scaling to zero is always zero. */
if (*num == zero ())
return;
- /* If den is non-zero we are safe. */
- if (den->force_nonzero () == *den)
+ /* If den is non-zero we are safe.
+ However take care of zeros in AFDO profiles since
+ they simply means that no useful samples were collected.
+ Called function still may contain important loop. */
+ if (den->force_nonzero () == *den
+ && num->quality () != AFDO)
return;
/* Force both to non-zero so we do not push profiles to 0 when
both num == 0 and den == 0. */
@@ -417,17 +421,17 @@ profile_count::combine_with_ipa_count_within (profile_count ipa,
profile_count
profile_count::from_gcov_type (gcov_type v, profile_quality quality)
- {
- profile_count ret;
- gcc_checking_assert (v >= 0);
- if (dump_file && v >= (gcov_type)max_count)
- fprintf (dump_file,
- "Capping gcov count %" PRId64 " to max_count %" PRId64 "\n",
- (int64_t) v, (int64_t) max_count);
- ret.m_val = MIN (v, (gcov_type)max_count);
- ret.m_quality = quality;
- return ret;
- }
+{
+ profile_count ret;
+ gcc_checking_assert (v >= 0);
+ if (dump_file && v >= (gcov_type)max_count)
+ fprintf (dump_file,
+ "Capping gcov count %" PRId64 " to max_count %" PRId64 "\n",
+ (int64_t) v, (int64_t) max_count);
+ ret.m_val = MIN (v, (gcov_type)max_count);
+ ret.m_quality = quality;
+ return ret;
+}
/* COUNT1 times event happens with *THIS probability, COUNT2 times OTHER
happens with COUNT2 probability. Return probability that either *THIS or
diff --git a/gcc/sbitmap.cc b/gcc/sbitmap.cc
index df2e1aa..075d0d3 100644
--- a/gcc/sbitmap.cc
+++ b/gcc/sbitmap.cc
@@ -326,11 +326,13 @@ bitmap_set_range (sbitmap bmap, unsigned int start, unsigned int count)
bmap->elms[start_word] |= mask;
}
-/* Return TRUE if any bit between START and END inclusive is set within
- the simple bitmap BMAP. Return FALSE otherwise. */
+/* Helper function for bitmap_any_bit_in_range_p and
+ bitmap_all_bits_in_range_p. If ANY_INVERTED is true, the function checks
+ if any bit in the range is unset. */
-bool
-bitmap_bit_in_range_p (const_sbitmap bmap, unsigned int start, unsigned int end)
+static bool
+bitmap_bit_in_range_p (const_sbitmap bmap, unsigned int start,
+ unsigned int end, bool any_inverted)
{
gcc_checking_assert (start <= end);
bitmap_check_index (bmap, end);
@@ -350,7 +352,8 @@ bitmap_bit_in_range_p (const_sbitmap bmap, unsigned int start, unsigned int end)
SBITMAP_ELT_TYPE low_mask = ((SBITMAP_ELT_TYPE)1 << start_bitno) - 1;
SBITMAP_ELT_TYPE mask = high_mask - low_mask;
- if (bmap->elms[start_word] & mask)
+ const SBITMAP_ELT_TYPE expected_partial = any_inverted ? mask : 0;
+ if ((bmap->elms[start_word] & mask) != expected_partial)
return true;
start_word++;
}
@@ -360,9 +363,10 @@ bitmap_bit_in_range_p (const_sbitmap bmap, unsigned int start, unsigned int end)
/* Now test words at a time until we hit a partial word. */
unsigned int nwords = (end_word - start_word);
+ const SBITMAP_ELT_TYPE expected = any_inverted ? ~(SBITMAP_ELT_TYPE)0 : 0;
while (nwords)
{
- if (bmap->elms[start_word])
+ if (bmap->elms[start_word] != expected)
return true;
start_word++;
nwords--;
@@ -372,7 +376,28 @@ bitmap_bit_in_range_p (const_sbitmap bmap, unsigned int start, unsigned int end)
SBITMAP_ELT_TYPE mask = ~(SBITMAP_ELT_TYPE)0;
if (end_bitno + 1 < SBITMAP_ELT_BITS)
mask = ((SBITMAP_ELT_TYPE)1 << (end_bitno + 1)) - 1;
- return (bmap->elms[start_word] & mask) != 0;
+ const SBITMAP_ELT_TYPE expected_partial = any_inverted ? mask : 0;
+ return (bmap->elms[start_word] & mask) != expected_partial;
+}
+
+/* Return TRUE if all bits between START and END inclusive are set within
+ the simple bitmap BMAP. Return FALSE otherwise. */
+
+bool
+bitmap_all_bits_in_range_p (const_sbitmap bmap, unsigned int start,
+ unsigned int end)
+{
+ return !bitmap_bit_in_range_p (bmap, start, end, true);
+}
+
+/* Return TRUE if any bit between START and END inclusive is set within
+ the simple bitmap BMAP. Return FALSE otherwise. */
+
+bool
+bitmap_any_bit_in_range_p (const_sbitmap bmap, unsigned int start,
+ unsigned int end)
+{
+ return bitmap_bit_in_range_p (bmap, start, end, false);
}
#if GCC_VERSION < 3400
@@ -863,14 +888,14 @@ namespace selftest {
/* Selftests for sbitmaps. */
-/* Checking function that uses both bitmap_bit_in_range_p and
+/* Checking function that uses both bitmap_any_bit_in_range_p and
loop of bitmap_bit_p and verifies consistent results. */
static bool
-bitmap_bit_in_range_p_checking (sbitmap s, unsigned int start,
+bitmap_any_bit_in_range_p_checking (sbitmap s, unsigned int start,
unsigned end)
{
- bool r1 = bitmap_bit_in_range_p (s, start, end);
+ bool r1 = bitmap_any_bit_in_range_p (s, start, end);
bool r2 = false;
for (unsigned int i = start; i <= end; i++)
@@ -893,33 +918,33 @@ test_set_range ()
bitmap_clear (s);
bitmap_set_range (s, 0, 1);
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 0, 0));
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 1, 15));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 0, 0));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 1, 15));
bitmap_set_range (s, 15, 1);
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 1, 14));
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 15, 15));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 1, 14));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 15, 15));
sbitmap_free (s);
s = sbitmap_alloc (1024);
bitmap_clear (s);
bitmap_set_range (s, 512, 1);
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 0, 511));
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 513, 1023));
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 512, 512));
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 508, 512));
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 508, 513));
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 508, 511));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 0, 511));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 513, 1023));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 512, 512));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 508, 512));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 508, 513));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 508, 511));
bitmap_clear (s);
bitmap_set_range (s, 512, 64);
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 0, 511));
- ASSERT_FALSE (bitmap_bit_in_range_p_checking (s, 512 + 64, 1023));
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 512, 512));
- ASSERT_TRUE (bitmap_bit_in_range_p_checking (s, 512 + 63, 512 + 63));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 0, 511));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p_checking (s, 512 + 64, 1023));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 512, 512));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p_checking (s, 512 + 63, 512 + 63));
sbitmap_free (s);
}
-/* Verify bitmap_bit_in_range_p functions for sbitmap. */
+/* Verify bitmap_any_bit_in_range_p functions for sbitmap. */
static void
test_bit_in_range ()
@@ -927,15 +952,15 @@ test_bit_in_range ()
sbitmap s = sbitmap_alloc (1024);
bitmap_clear (s);
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 512, 1023));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 512, 1023));
bitmap_set_bit (s, 100);
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 512, 1023));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 0, 99));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 101, 1023));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 1, 100));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 64, 100));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 100, 100));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 512, 1023));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 0, 99));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 101, 1023));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 1, 100));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 64, 100));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 100, 100));
ASSERT_TRUE (bitmap_bit_p (s, 100));
sbitmap_free (s);
@@ -943,54 +968,54 @@ test_bit_in_range ()
s = sbitmap_alloc (64);
bitmap_clear (s);
bitmap_set_bit (s, 63);
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 63));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 1, 63));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 63, 63));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 63));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 1, 63));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 63, 63));
ASSERT_TRUE (bitmap_bit_p (s, 63));
sbitmap_free (s);
s = sbitmap_alloc (1024);
bitmap_clear (s);
bitmap_set_bit (s, 128);
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 0, 127));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 129, 1023));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 0, 127));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 129, 1023));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 128));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 1, 128));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 128, 255));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 128, 254));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 128));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 1, 128));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 128, 255));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 128, 254));
ASSERT_TRUE (bitmap_bit_p (s, 128));
bitmap_clear (s);
bitmap_set_bit (s, 8);
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 8));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 12));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 63));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 127));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 512));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 8, 8));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 8));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 12));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 63));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 127));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 512));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 8, 8));
ASSERT_TRUE (bitmap_bit_p (s, 8));
bitmap_clear (s);
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 0, 0));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 0, 8));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 0, 63));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 1, 63));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 0, 256));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 0, 0));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 0, 8));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 0, 63));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 1, 63));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 0, 256));
bitmap_set_bit (s, 0);
bitmap_set_bit (s, 16);
bitmap_set_bit (s, 32);
bitmap_set_bit (s, 48);
bitmap_set_bit (s, 64);
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 0, 0));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 1, 16));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 48, 63));
- ASSERT_TRUE (bitmap_bit_in_range_p (s, 64, 64));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 1, 15));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 17, 31));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 49, 63));
- ASSERT_FALSE (bitmap_bit_in_range_p (s, 65, 1023));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 0, 0));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 1, 16));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 48, 63));
+ ASSERT_TRUE (bitmap_any_bit_in_range_p (s, 64, 64));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 1, 15));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 17, 31));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 49, 63));
+ ASSERT_FALSE (bitmap_any_bit_in_range_p (s, 65, 1023));
sbitmap_free (s);
}
diff --git a/gcc/sbitmap.h b/gcc/sbitmap.h
index 66f9e13..633d84f 100644
--- a/gcc/sbitmap.h
+++ b/gcc/sbitmap.h
@@ -51,7 +51,7 @@ along with GCC; see the file COPYING3. If not see
* set_difference : bitmap_and_compl
* set_disjuction : (not implemented)
* set_compare : bitmap_equal_p
- * bit_in_range_p : bitmap_bit_in_range_p
+ * any_bit_in_range_p : bitmap_any_bit_in_range_p
Some operations on 3 sets that occur frequently in data flow problems
are also implemented:
@@ -287,7 +287,10 @@ extern bool bitmap_and (sbitmap, const_sbitmap, const_sbitmap);
extern bool bitmap_ior (sbitmap, const_sbitmap, const_sbitmap);
extern bool bitmap_xor (sbitmap, const_sbitmap, const_sbitmap);
extern bool bitmap_subset_p (const_sbitmap, const_sbitmap);
-extern bool bitmap_bit_in_range_p (const_sbitmap, unsigned int, unsigned int);
+extern bool bitmap_any_bit_in_range_p (const_sbitmap, unsigned int,
+ unsigned int);
+extern bool bitmap_all_bits_in_range_p (const_sbitmap, unsigned int,
+ unsigned int);
extern int bitmap_first_set_bit (const_sbitmap);
extern int bitmap_last_set_bit (const_sbitmap);
diff --git a/gcc/selftest-diagnostic.cc b/gcc/selftest-diagnostic.cc
index 1a10807..eeee2eb 100644
--- a/gcc/selftest-diagnostic.cc
+++ b/gcc/selftest-diagnostic.cc
@@ -58,11 +58,11 @@ test_diagnostic_context::~test_diagnostic_context ()
void
test_diagnostic_context::
start_span_cb (const diagnostic_location_print_policy &loc_policy,
- pretty_printer *pp,
+ to_text &sink,
expanded_location exploc)
{
exploc.file = "FILENAME";
- default_diagnostic_start_span_fn (loc_policy, pp, exploc);
+ default_diagnostic_start_span_fn<to_text> (loc_policy, sink, exploc);
}
bool
diff --git a/gcc/selftest-diagnostic.h b/gcc/selftest-diagnostic.h
index c8f67a0..4a43310 100644
--- a/gcc/selftest-diagnostic.h
+++ b/gcc/selftest-diagnostic.h
@@ -40,7 +40,7 @@ class test_diagnostic_context : public diagnostic_context
real filename (to avoid printing the names of tempfiles). */
static void
start_span_cb (const diagnostic_location_print_policy &,
- pretty_printer *,
+ to_text &sink,
expanded_location exploc);
/* Report a diagnostic to this context. For a selftest, this
diff --git a/gcc/selftest-run-tests.cc b/gcc/selftest-run-tests.cc
index 959e5d0..0090e56 100644
--- a/gcc/selftest-run-tests.cc
+++ b/gcc/selftest-run-tests.cc
@@ -106,7 +106,7 @@ selftest::run_tests ()
spellcheck_cc_tests ();
spellcheck_tree_cc_tests ();
tree_cfg_cc_tests ();
- diagnostic_path_cc_tests ();
+ diagnostic_path_output_cc_tests ();
simple_diagnostic_path_cc_tests ();
lazy_diagnostic_path_cc_tests ();
attribs_cc_tests ();
diff --git a/gcc/selftest.h b/gcc/selftest.h
index 7e1d94c..cd85840 100644
--- a/gcc/selftest.h
+++ b/gcc/selftest.h
@@ -224,7 +224,7 @@ extern void diagnostic_color_cc_tests ();
extern void diagnostic_format_html_cc_tests ();
extern void diagnostic_format_json_cc_tests ();
extern void diagnostic_format_sarif_cc_tests ();
-extern void diagnostic_path_cc_tests ();
+extern void diagnostic_path_output_cc_tests ();
extern void diagnostic_show_locus_cc_tests ();
extern void digraph_cc_tests ();
extern void dumpfile_cc_tests ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 06fcdf4..9b97c4a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8614 @@
+2025-05-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/119586
+ * gfortran.dg/comma_format_extension_1.f: Update dg-options to
+ "-std=legacy".
+ * gfortran.dg/comma_format_extension_3.f: Likewise.
+ * gfortran.dg/continuation_13.f90: Likewise.
+
+2025-05-28 Yuao Ma <c8ef@outlook.com>
+ Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/113152
+ * gfortran.dg/dec_math_3.f90: Test invalid input.
+ * gfortran.dg/dec_math_5.f90: Test valid output.
+ * gfortran.dg/dec_math_6.f90: New test.
+
+2025-05-28 Robin Dapp <rdapp@ventanamicro.com>
+
+ PR target/120436
+ * gcc.target/riscv/rvv/base/pr120436.c: New test.
+
+2025-05-28 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/modules/namespace-8_a.C: New test.
+ * g++.dg/modules/namespace-8_b.C: New test.
+ * g++.dg/modules/namespace-9_a.C: New test.
+ * g++.dg/modules/namespace-9_b.C: New test.
+ * g++.dg/modules/namespace-10_a.C: New test.
+ * g++.dg/modules/namespace-10_b.C: New test.
+ * g++.dg/modules/namespace-10_c.C: New test.
+ * g++.dg/modules/namespace-11_a.C: New test.
+ * g++.dg/modules/namespace-11_b.C: New test.
+ * g++.dg/modules/namespace-11_c.C: New test.
+
+2025-05-28 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/avg.h: New test.
+ * gcc.target/riscv/rvv/autovec/avg_data.h: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/avg_run.h: New test.
+
+2025-05-28 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/vls/avg-1.c: Update asm check
+ to vaadd.
+ * gcc.target/riscv/rvv/autovec/vls/avg-2.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vls/avg-3.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c: Ditto.
+
+2025-05-28 liuhongt <hongtao.liu@intel.com>
+
+ * gcc.dg/vect/bb-slp-pr119181.c: New test.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+
+ PR c/117025
+ * gcc.dg/countof-compat.c: New test.
+ * gcc.dg/countof-no-compat.c: New test.
+ * gcc.dg/countof-pedantic.c: New test.
+ * gcc.dg/countof-pedantic-errors.c: New test.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+
+ PR c/117025
+ * gcc.dg/countof-stdcountof.c: New test.
+
+2025-05-27 Alejandro Colomar <alx@kernel.org>
+ Martin Uecker <uecker@tugraz.at>
+
+ PR c/117025
+ * gcc.dg/countof-compile.c: New test.
+ * gcc.dg/countof-vla.c: New test.
+ * gcc.dg/countof-vmt.c: New test.
+ * gcc.dg/countof-zero-compile.c: New test.
+ * gcc.dg/countof-zero.c: New test.
+ * gcc.dg/countof.c: New test.
+
+2025-05-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/120049
+ * gfortran.dg/pr120049_a.f90: Update test directives.
+ * gfortran.dg/pr120049_b.f90: Update test directives
+ * gfortran.dg/pr120049_2.f90: New test.
+ Co-Authored-By: Steve Kargl <kargl@gcc.gnu.org>
+
+2025-05-27 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/101735
+ * gfortran.dg/inquiry_type_ref_7.f90: New test.
+
+2025-05-27 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/sso19.adb: New test.
+ * gnat.dg/sso19_pkg.ads, gnat.dg/sso19_pkg.adb: New helper.
+
+2025-05-27 David Malcolm <dmalcolm@redhat.com>
+
+ PR other/116792
+ * gcc.dg/html-output/missing-semicolon.c: Add ":javascript=no" to
+ html output.
+ * gcc.dg/html-output/missing-semicolon.py: Move repeated
+ definitions into lib/htmltest.py.
+ * gcc.dg/plugin/diagnostic_group_plugin.cc: Update for template
+ changes.
+ * gcc.dg/plugin/diagnostic-test-metadata-html.c: Add
+ ":javascript=no" to html output. Add
+ "-fdiagnostics-show-line-numbers".
+ * gcc.dg/plugin/diagnostic-test-metadata-html.py: Move repeated
+ definitions into lib/htmltest.py. Add checks of annotated source.
+ * gcc.dg/plugin/diagnostic-test-paths-2.c: Add ":javascript=no" to
+ html output.
+ * gcc.dg/plugin/diagnostic-test-paths-2.py: Move repeated
+ definitions into lib/htmltest.py. Add checks of execution path.
+ * gcc.dg/plugin/diagnostic-test-paths-4.c: Add
+ -fdiagnostics-add-output=experimental-html:javascript=no. Add
+ invocation ot diagnostic-test-paths-4.py.
+ * gcc.dg/plugin/diagnostic-test-paths-4.py: New test script.
+ * gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c: Add
+ -fdiagnostics-add-output=experimental-html:javascript=no. Add
+ invocation of diagnostic-test-show-locus.py.
+ * gcc.dg/plugin/diagnostic-test-show-locus.py: New test script.
+ * lib/htmltest.py: New test support script.
+
+2025-05-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/117965
+ * g++.dg/tree-ssa/pr117965-1.C: New testcase.
+ * g++.dg/tree-ssa/pr117965-2.C: Likewise.
+
+2025-05-27 Konstantinos Eleftheriou <konstantinos.eleftheriou@vrull.eu>
+
+ PR rtl-optimization/119884
+ * gcc.target/i386/pr119884.c: New test.
+
+2025-05-27 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c: Add asm check
+ for vxor.vx combine.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c: Ditto.
+
+2025-05-27 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add asm check
+ for vxor.vx combine.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ data for vxor run test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i8.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u16.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c: New test.
+
+2025-05-27 Juergen Christ <jchrist@linux.ibm.com>
+
+ * gcc.target/s390/vector/vec-extract-1.c: New test.
+ * gcc.target/s390/vector/vec-set-1.c: New test.
+
+2025-05-27 xuli <xuli1@eswincomputing.com>
+
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h: add signed vec SAT_ADD IMM form1.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h: add sat_s_add_imm data.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c: New test.
+
+2025-05-27 xuli <xuli1@eswincomputing.com>
+
+ * gcc.target/riscv/sat/sat_s_add_imm-2.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-1-i16.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-3.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-1-i32.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-4.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-1-i64.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-1.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-1-i8.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-run-2.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-run-3.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-run-4.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-run-1.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-2-1.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-3-1.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c: ...here.
+ * gcc.target/riscv/sat/sat_s_add_imm-1-1.c: Move to...
+ * gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c: ...here.
+
+2025-05-26 Tobias Burnus <tburnus@baylibre.com>
+
+ PR middle-end/118694
+ * c-c++-common/gomp/attrs-metadirective-3.c: Change to never
+ expect 'omp metadirective' in the dump. If !offload_nvptx, check
+ that no 'teams' shows up in the dump; for offload_nvptx, expect
+ OMP_NEXT_VARIANT and an error about directive between 'target'
+ and 'teams'.
+ * c-c++-common/gomp/metadirective-3.c: Likewise.
+
+2025-05-26 Tobias Burnus <tburnus@baylibre.com>
+
+ PR c++/120413
+ * g++.dg/gomp/target-4.C: New test.
+
+2025-05-26 Richard Biener <rguenther@suse.de>
+
+ * gcc.target/i386/vect-epilogues-5.c: Adjust.
+
+2025-05-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ada/acats-4/elabd.lst: New file.
+ * ada/acats-4/floatstore.lst: Likewise.
+ * ada/acats-4/norun.lst: Likewise.
+ * ada/acats-4/run_acats.sh: Likewise.
+ * ada/acats-4/run_all.sh: Likewise.
+ * ada/acats-4/run_test.exp: Likewise.
+ * ada/acats-4/stackcheck.lst: Likewise.
+ * ada/acats-4/support/acats42.lst: Likewise.
+ * ada/acats-4/support/checkfil.ada: Likewise.
+ * ada/acats-4/support/enumchek.ada: Likewise.
+ * ada/acats-4/support/f340a000.a: Likewise.
+ * ada/acats-4/support/f340a001.a: Likewise.
+ * ada/acats-4/support/f341a00.a: Likewise.
+ * ada/acats-4/support/f350a00.a: Likewise.
+ * ada/acats-4/support/f350b00.a: Likewise.
+ * ada/acats-4/support/f360a00.a: Likewise.
+ * ada/acats-4/support/f360b00.a: Likewise.
+ * ada/acats-4/support/f390a00.a: Likewise.
+ * ada/acats-4/support/f392a00.a: Likewise.
+ * ada/acats-4/support/f392c00.a: Likewise.
+ * ada/acats-4/support/f392d00.a: Likewise.
+ * ada/acats-4/support/f393a00.a: Likewise.
+ * ada/acats-4/support/f393b00.a: Likewise.
+ * ada/acats-4/support/f394a00.a: Likewise.
+ * ada/acats-4/support/f3a1a00.a: Likewise.
+ * ada/acats-4/support/f3a2a00.a: Likewise.
+ * ada/acats-4/support/f416a00.a: Likewise.
+ * ada/acats-4/support/f431a00.a: Likewise.
+ * ada/acats-4/support/f433a00.a: Likewise.
+ * ada/acats-4/support/f452a00.a: Likewise.
+ * ada/acats-4/support/f458a00.a: Likewise.
+ * ada/acats-4/support/f460a00.a: Likewise.
+ * ada/acats-4/support/f552a00.a: Likewise.
+ * ada/acats-4/support/f611a00.a: Likewise.
+ * ada/acats-4/support/f611b00.a: Likewise.
+ * ada/acats-4/support/f650a00.a: Likewise.
+ * ada/acats-4/support/f650b00.a: Likewise.
+ * ada/acats-4/support/f730a000.a: Likewise.
+ * ada/acats-4/support/f730a001.a: Likewise.
+ * ada/acats-4/support/f731a00.a: Likewise.
+ * ada/acats-4/support/f732a00.a: Likewise.
+ * ada/acats-4/support/f732b00.a: Likewise.
+ * ada/acats-4/support/f732c00.a: Likewise.
+ * ada/acats-4/support/f750a00.a: Likewise.
+ * ada/acats-4/support/f760a00.a: Likewise.
+ * ada/acats-4/support/f940a00.a: Likewise.
+ * ada/acats-4/support/f954a00.a: Likewise.
+ * ada/acats-4/support/fa11a00.a: Likewise.
+ * ada/acats-4/support/fa11b00.a: Likewise.
+ * ada/acats-4/support/fa11c00.a: Likewise.
+ * ada/acats-4/support/fa11d00.a: Likewise.
+ * ada/acats-4/support/fa13a00.a: Likewise.
+ * ada/acats-4/support/fa13b00.a: Likewise.
+ * ada/acats-4/support/fa21a00.a: Likewise.
+ * ada/acats-4/support/fb20a00.a: Likewise.
+ * ada/acats-4/support/fb40a00.a: Likewise.
+ * ada/acats-4/support/fc50a00.a: Likewise.
+ * ada/acats-4/support/fc51a00.a: Likewise.
+ * ada/acats-4/support/fc51b00.a: Likewise.
+ * ada/acats-4/support/fc51c00.a: Likewise.
+ * ada/acats-4/support/fc51d00.a: Likewise.
+ * ada/acats-4/support/fc54a00.a: Likewise.
+ * ada/acats-4/support/fc70a00.a: Likewise.
+ * ada/acats-4/support/fc70b00.a: Likewise.
+ * ada/acats-4/support/fc70c00.a: Likewise.
+ * ada/acats-4/support/fcndecl.ada: Likewise.
+ * ada/acats-4/support/fd72a00.a: Likewise.
+ * ada/acats-4/support/fdb0a00.a: Likewise.
+ * ada/acats-4/support/fdb3a00.a: Likewise.
+ * ada/acats-4/support/fdd2a00.a: Likewise.
+ * ada/acats-4/support/fdd2b00.a: Likewise.
+ * ada/acats-4/support/fxa5a00.a: Likewise.
+ * ada/acats-4/support/fxaca00.a: Likewise.
+ * ada/acats-4/support/fxacb00.a: Likewise.
+ * ada/acats-4/support/fxacc00.a: Likewise.
+ * ada/acats-4/support/fxaia00.a: Likewise.
+ * ada/acats-4/support/fxaib00.a: Likewise.
+ * ada/acats-4/support/fxc6a00.a: Likewise.
+ * ada/acats-4/support/fxe2a00.a: Likewise.
+ * ada/acats-4/support/fxf2a00.a: Likewise.
+ * ada/acats-4/support/fxf3a00.a: Likewise.
+ * ada/acats-4/support/grade.a: Likewise.
+ * ada/acats-4/support/grd_data.a: Likewise.
+ * ada/acats-4/support/impbit.adb: Likewise.
+ * ada/acats-4/support/impdef.a: Likewise.
+ * ada/acats-4/support/impdefc.a: Likewise.
+ * ada/acats-4/support/impdefd.a: Likewise.
+ * ada/acats-4/support/impdefe.a: Likewise.
+ * ada/acats-4/support/impdefg.a: Likewise.
+ * ada/acats-4/support/impdefh.a: Likewise.
+ * ada/acats-4/support/lencheck.ada: Likewise.
+ * ada/acats-4/support/macro.dfs: Likewise.
+ * ada/acats-4/support/macrodef.adb: Likewise.
+ * ada/acats-4/support/macrosub.ada: Likewise.
+ * ada/acats-4/support/report.a: Likewise.
+ * ada/acats-4/support/special.a: Likewise.
+ * ada/acats-4/support/spprt13s.tst: Likewise.
+ * ada/acats-4/support/summary.a: Likewise.
+ * ada/acats-4/support/tctouch.ada: Likewise.
+ * ada/acats-4/support/trace.a: Likewise.
+ * ada/acats-4/support/tst_sum.a: Likewise.
+ * ada/acats-4/support/tsttests.dat: Likewise.
+ * ada/acats-4/support/version.a: Likewise.
+ * ada/acats-4/tests/a/a22006b.ada: Likewise.
+ * ada/acats-4/tests/a/a22006c.ada: Likewise.
+ * ada/acats-4/tests/a/a22006d.ada: Likewise.
+ * ada/acats-4/tests/a/a26007a.tst: Likewise.
+ * ada/acats-4/tests/a/a27003a.ada: Likewise.
+ * ada/acats-4/tests/a/a29003a.ada: Likewise.
+ * ada/acats-4/tests/a/a2a031a.ada: Likewise.
+ * ada/acats-4/tests/a/a33003a.ada: Likewise.
+ * ada/acats-4/tests/a/a34017c.ada: Likewise.
+ * ada/acats-4/tests/a/a35101b.ada: Likewise.
+ * ada/acats-4/tests/a/a35402a.ada: Likewise.
+ * ada/acats-4/tests/a/a35801f.ada: Likewise.
+ * ada/acats-4/tests/a/a35902c.ada: Likewise.
+ * ada/acats-4/tests/a/a38106d.ada: Likewise.
+ * ada/acats-4/tests/a/a38106e.ada: Likewise.
+ * ada/acats-4/tests/a/a49027a.ada: Likewise.
+ * ada/acats-4/tests/a/a49027b.ada: Likewise.
+ * ada/acats-4/tests/a/a49027c.ada: Likewise.
+ * ada/acats-4/tests/a/a54b01a.ada: Likewise.
+ * ada/acats-4/tests/a/a54b02a.ada: Likewise.
+ * ada/acats-4/tests/a/a55b12a.ada: Likewise.
+ * ada/acats-4/tests/a/a55b13a.ada: Likewise.
+ * ada/acats-4/tests/a/a55b14a.ada: Likewise.
+ * ada/acats-4/tests/a/a71004a.ada: Likewise.
+ * ada/acats-4/tests/a/a73001i.ada: Likewise.
+ * ada/acats-4/tests/a/a73001j.ada: Likewise.
+ * ada/acats-4/tests/a/a74105b.ada: Likewise.
+ * ada/acats-4/tests/a/a74106a.ada: Likewise.
+ * ada/acats-4/tests/a/a74106b.ada: Likewise.
+ * ada/acats-4/tests/a/a74106c.ada: Likewise.
+ * ada/acats-4/tests/a/a74205e.ada: Likewise.
+ * ada/acats-4/tests/a/a74205f.ada: Likewise.
+ * ada/acats-4/tests/a/a83009a.ada: Likewise.
+ * ada/acats-4/tests/a/a83009b.ada: Likewise.
+ * ada/acats-4/tests/a/a83a02a.ada: Likewise.
+ * ada/acats-4/tests/a/a83a02b.ada: Likewise.
+ * ada/acats-4/tests/a/a83a06a.ada: Likewise.
+ * ada/acats-4/tests/a/a83a08a.ada: Likewise.
+ * ada/acats-4/tests/a/a83c01c.ada: Likewise.
+ * ada/acats-4/tests/a/a83c01h.ada: Likewise.
+ * ada/acats-4/tests/a/a83c01i.ada: Likewise.
+ * ada/acats-4/tests/a/a85007d.ada: Likewise.
+ * ada/acats-4/tests/a/a85013b.ada: Likewise.
+ * ada/acats-4/tests/a/a87b59a.ada: Likewise.
+ * ada/acats-4/tests/a/a95001c.ada: Likewise.
+ * ada/acats-4/tests/a/a95074d.ada: Likewise.
+ * ada/acats-4/tests/a/a97106a.ada: Likewise.
+ * ada/acats-4/tests/a/a99006a.ada: Likewise.
+ * ada/acats-4/tests/a/aa2010a.ada: Likewise.
+ * ada/acats-4/tests/a/aa2012a.ada: Likewise.
+ * ada/acats-4/tests/a/ac1015b.ada: Likewise.
+ * ada/acats-4/tests/a/ac3106a.ada: Likewise.
+ * ada/acats-4/tests/a/ac3206a.ada: Likewise.
+ * ada/acats-4/tests/a/ac3207a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7001b.ada: Likewise.
+ * ada/acats-4/tests/a/ad7001c0.ada: Likewise.
+ * ada/acats-4/tests/a/ad7001c1.ada: Likewise.
+ * ada/acats-4/tests/a/ad7001d0.ada: Likewise.
+ * ada/acats-4/tests/a/ad7001d1.ada: Likewise.
+ * ada/acats-4/tests/a/ad7006a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7101a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7101c.ada: Likewise.
+ * ada/acats-4/tests/a/ad7102a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7103a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7103c.ada: Likewise.
+ * ada/acats-4/tests/a/ad7104a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7201a.ada: Likewise.
+ * ada/acats-4/tests/a/ad7203b.ada: Likewise.
+ * ada/acats-4/tests/a/ad7205b.ada: Likewise.
+ * ada/acats-4/tests/a/ad8011a.tst: Likewise.
+ * ada/acats-4/tests/a/ada101a.ada: Likewise.
+ * ada/acats-4/tests/a/ae2113a.ada: Likewise.
+ * ada/acats-4/tests/a/ae2113b.ada: Likewise.
+ * ada/acats-4/tests/a/ae3002g.ada: Likewise.
+ * ada/acats-4/tests/a/ae3101a.ada: Likewise.
+ * ada/acats-4/tests/a/ae3702a.ada: Likewise.
+ * ada/acats-4/tests/a/ae3709a.ada: Likewise.
+ * ada/acats-4/tests/c2/c23001a.ada: Likewise.
+ * ada/acats-4/tests/c2/c23003a.tst: Likewise.
+ * ada/acats-4/tests/c2/c23003b.tst: Likewise.
+ * ada/acats-4/tests/c2/c23003g.tst: Likewise.
+ * ada/acats-4/tests/c2/c23003i.tst: Likewise.
+ * ada/acats-4/tests/c2/c23006a.ada: Likewise.
+ * ada/acats-4/tests/c2/c23006b.ada: Likewise.
+ * ada/acats-4/tests/c2/c23006c.ada: Likewise.
+ * ada/acats-4/tests/c2/c23006d.ada: Likewise.
+ * ada/acats-4/tests/c2/c23006e.ada: Likewise.
+ * ada/acats-4/tests/c2/c23006f.ada: Likewise.
+ * ada/acats-4/tests/c2/c23006g.ada: Likewise.
+ * ada/acats-4/tests/c2/c24002d.ada: Likewise.
+ * ada/acats-4/tests/c2/c24003a.ada: Likewise.
+ * ada/acats-4/tests/c2/c24003b.ada: Likewise.
+ * ada/acats-4/tests/c2/c24003c.ada: Likewise.
+ * ada/acats-4/tests/c2/c24106a.ada: Likewise.
+ * ada/acats-4/tests/c2/c24202d.ada: Likewise.
+ * ada/acats-4/tests/c2/c24203a.ada: Likewise.
+ * ada/acats-4/tests/c2/c24203b.ada: Likewise.
+ * ada/acats-4/tests/c2/c24207a.ada: Likewise.
+ * ada/acats-4/tests/c2/c24211a.ada: Likewise.
+ * ada/acats-4/tests/c2/c250001.au: Likewise.
+ * ada/acats-4/tests/c2/c250002.au: Likewise.
+ * ada/acats-4/tests/c2/c25001a.ada: Likewise.
+ * ada/acats-4/tests/c2/c25001b.ada: Likewise.
+ * ada/acats-4/tests/c2/c26006a.ada: Likewise.
+ * ada/acats-4/tests/c2/c26008a.ada: Likewise.
+ * ada/acats-4/tests/c2/c2a001a.ada: Likewise.
+ * ada/acats-4/tests/c2/c2a001b.ada: Likewise.
+ * ada/acats-4/tests/c2/c2a001c.ada: Likewise.
+ * ada/acats-4/tests/c2/c2a002a.ada: Likewise.
+ * ada/acats-4/tests/c2/c2a008a.ada: Likewise.
+ * ada/acats-4/tests/c2/c2a021b.ada: Likewise.
+ * ada/acats-4/tests/c3/c32001a.ada: Likewise.
+ * ada/acats-4/tests/c3/c32001b.ada: Likewise.
+ * ada/acats-4/tests/c3/c32001c.ada: Likewise.
+ * ada/acats-4/tests/c3/c32001d.ada: Likewise.
+ * ada/acats-4/tests/c3/c32001e.ada: Likewise.
+ * ada/acats-4/tests/c3/c32107a.ada: Likewise.
+ * ada/acats-4/tests/c3/c32107c.ada: Likewise.
+ * ada/acats-4/tests/c3/c32108a.ada: Likewise.
+ * ada/acats-4/tests/c3/c32108b.ada: Likewise.
+ * ada/acats-4/tests/c3/c32111a.ada: Likewise.
+ * ada/acats-4/tests/c3/c32111b.ada: Likewise.
+ * ada/acats-4/tests/c3/c32112b.ada: Likewise.
+ * ada/acats-4/tests/c3/c32113a.ada: Likewise.
+ * ada/acats-4/tests/c3/c32115a.ada: Likewise.
+ * ada/acats-4/tests/c3/c32115b.ada: Likewise.
+ * ada/acats-4/tests/c3/c324001.a: Likewise.
+ * ada/acats-4/tests/c3/c324002.a: Likewise.
+ * ada/acats-4/tests/c3/c324003.a: Likewise.
+ * ada/acats-4/tests/c3/c324004.a: Likewise.
+ * ada/acats-4/tests/c3/c324005.a: Likewise.
+ * ada/acats-4/tests/c3/c324006.a: Likewise.
+ * ada/acats-4/tests/c3/c330001.a: Likewise.
+ * ada/acats-4/tests/c3/c330002.a: Likewise.
+ * ada/acats-4/tests/c3/c332001.a: Likewise.
+ * ada/acats-4/tests/c3/c340001.a: Likewise.
+ * ada/acats-4/tests/c3/c34001a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34001c.ada: Likewise.
+ * ada/acats-4/tests/c3/c34001d.ada: Likewise.
+ * ada/acats-4/tests/c3/c34001f.ada: Likewise.
+ * ada/acats-4/tests/c3/c34002a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34002c.ada: Likewise.
+ * ada/acats-4/tests/c3/c34003a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34003c.ada: Likewise.
+ * ada/acats-4/tests/c3/c34004a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34004c.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005c.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005d.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005f.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005g.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005i.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005j.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005l.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005m.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005o.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005p.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005r.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005s.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005u.ada: Likewise.
+ * ada/acats-4/tests/c3/c34005v.ada: Likewise.
+ * ada/acats-4/tests/c3/c34006a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34006d.ada: Likewise.
+ * ada/acats-4/tests/c3/c34006f.ada: Likewise.
+ * ada/acats-4/tests/c3/c34006g.ada: Likewise.
+ * ada/acats-4/tests/c3/c34006j.ada: Likewise.
+ * ada/acats-4/tests/c3/c34006l.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007d.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007f.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007g.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007i.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007j.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007m.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007p.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007r.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007s.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007u.ada: Likewise.
+ * ada/acats-4/tests/c3/c34007v.ada: Likewise.
+ * ada/acats-4/tests/c3/c34008a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34009a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34009d.ada: Likewise.
+ * ada/acats-4/tests/c3/c34009f.ada: Likewise.
+ * ada/acats-4/tests/c3/c34009g.ada: Likewise.
+ * ada/acats-4/tests/c3/c34009j.ada: Likewise.
+ * ada/acats-4/tests/c3/c34009l.ada: Likewise.
+ * ada/acats-4/tests/c3/c34011b.ada: Likewise.
+ * ada/acats-4/tests/c3/c34012a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014a.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014c.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014e.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014g.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014h.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014n.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014p.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014r.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014t.ada: Likewise.
+ * ada/acats-4/tests/c3/c34014u.ada: Likewise.
+ * ada/acats-4/tests/c3/c34018a.ada: Likewise.
+ * ada/acats-4/tests/c3/c340a01.a: Likewise.
+ * ada/acats-4/tests/c3/c340a02.a: Likewise.
+ * ada/acats-4/tests/c3/c341a01.a: Likewise.
+ * ada/acats-4/tests/c3/c341a02.a: Likewise.
+ * ada/acats-4/tests/c3/c341a03.a: Likewise.
+ * ada/acats-4/tests/c3/c341a04.a: Likewise.
+ * ada/acats-4/tests/c3/c350001.a: Likewise.
+ * ada/acats-4/tests/c3/c35003a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35003b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35003d.ada: Likewise.
+ * ada/acats-4/tests/c3/c350a01.a: Likewise.
+ * ada/acats-4/tests/c3/c350a02.a: Likewise.
+ * ada/acats-4/tests/c3/c350b01.a: Likewise.
+ * ada/acats-4/tests/c3/c350b02.a: Likewise.
+ * ada/acats-4/tests/c3/c35102a.ada: Likewise.
+ * ada/acats-4/tests/c3/c352001.a: Likewise.
+ * ada/acats-4/tests/c3/c354002.a: Likewise.
+ * ada/acats-4/tests/c3/c354003.a: Likewise.
+ * ada/acats-4/tests/c3/c354004.a: Likewise.
+ * ada/acats-4/tests/c3/c35502a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502c.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502d.tst: Likewise.
+ * ada/acats-4/tests/c3/c35502e.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502f.tst: Likewise.
+ * ada/acats-4/tests/c3/c35502g.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502h.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502i.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502j.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502k.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502l.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502m.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502n.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502o.ada: Likewise.
+ * ada/acats-4/tests/c3/c35502p.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503c.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503d.tst: Likewise.
+ * ada/acats-4/tests/c3/c35503e.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503f.tst: Likewise.
+ * ada/acats-4/tests/c3/c35503g.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503h.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503k.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503l.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503o.ada: Likewise.
+ * ada/acats-4/tests/c3/c35503p.ada: Likewise.
+ * ada/acats-4/tests/c3/c35504a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35504b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35505c.ada: Likewise.
+ * ada/acats-4/tests/c3/c35505e.ada: Likewise.
+ * ada/acats-4/tests/c3/c35505f.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507c.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507e.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507g.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507h.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507i.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507j.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507k.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507l.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507m.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507n.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507o.ada: Likewise.
+ * ada/acats-4/tests/c3/c35507p.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508c.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508e.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508g.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508h.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508k.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508l.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508o.ada: Likewise.
+ * ada/acats-4/tests/c3/c35508p.ada: Likewise.
+ * ada/acats-4/tests/c3/c35703a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35704a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35704b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35704c.ada: Likewise.
+ * ada/acats-4/tests/c3/c35704d.ada: Likewise.
+ * ada/acats-4/tests/c3/c35801d.ada: Likewise.
+ * ada/acats-4/tests/c3/c35902d.ada: Likewise.
+ * ada/acats-4/tests/c3/c35904a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35904b.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a001.a: Likewise.
+ * ada/acats-4/tests/c3/c35a02a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a05a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a05d.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a05n.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a05q.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a07a.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a07d.ada: Likewise.
+ * ada/acats-4/tests/c3/c35a08b.ada: Likewise.
+ * ada/acats-4/tests/c3/c360002.a: Likewise.
+ * ada/acats-4/tests/c3/c360a01.a: Likewise.
+ * ada/acats-4/tests/c3/c360a02.a: Likewise.
+ * ada/acats-4/tests/c3/c360b01.a: Likewise.
+ * ada/acats-4/tests/c3/c360b02.a: Likewise.
+ * ada/acats-4/tests/c3/c36104a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36104b.ada: Likewise.
+ * ada/acats-4/tests/c3/c36172a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36172b.ada: Likewise.
+ * ada/acats-4/tests/c3/c36172c.ada: Likewise.
+ * ada/acats-4/tests/c3/c36174a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36180a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36202c.ada: Likewise.
+ * ada/acats-4/tests/c3/c36203a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36204a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36204b.ada: Likewise.
+ * ada/acats-4/tests/c3/c36204c.ada: Likewise.
+ * ada/acats-4/tests/c3/c36204d.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205b.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205c.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205d.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205e.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205f.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205g.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205h.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205i.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205j.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205k.ada: Likewise.
+ * ada/acats-4/tests/c3/c36205l.ada: Likewise.
+ * ada/acats-4/tests/c3/c36301a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36301b.ada: Likewise.
+ * ada/acats-4/tests/c3/c36302a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36304a.ada: Likewise.
+ * ada/acats-4/tests/c3/c36305a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37002a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37003a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37003b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37005a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37006a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37008a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37008b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37009a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37010a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37010b.ada: Likewise.
+ * ada/acats-4/tests/c3/c371001.a: Likewise.
+ * ada/acats-4/tests/c3/c371002.a: Likewise.
+ * ada/acats-4/tests/c3/c371003.a: Likewise.
+ * ada/acats-4/tests/c3/c37102b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37103a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37105a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37107a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37108b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37206a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37207a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37208a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37208b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37209a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37209b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37210a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37211a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37211b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37211c.ada: Likewise.
+ * ada/acats-4/tests/c3/c37211d.ada: Likewise.
+ * ada/acats-4/tests/c3/c37211e.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213d.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213f.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213h.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213j.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213k.ada: Likewise.
+ * ada/acats-4/tests/c3/c37213l.ada: Likewise.
+ * ada/acats-4/tests/c3/c37215b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37215d.ada: Likewise.
+ * ada/acats-4/tests/c3/c37215f.ada: Likewise.
+ * ada/acats-4/tests/c3/c37215h.ada: Likewise.
+ * ada/acats-4/tests/c3/c37217a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37217b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37217c.ada: Likewise.
+ * ada/acats-4/tests/c3/c37304a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37305a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37306a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37309a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37310a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37312a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37402a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37403a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37404a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37404b.ada: Likewise.
+ * ada/acats-4/tests/c3/c37405a.ada: Likewise.
+ * ada/acats-4/tests/c3/c37411a.ada: Likewise.
+ * ada/acats-4/tests/c3/c380001.a: Likewise.
+ * ada/acats-4/tests/c3/c380002.a: Likewise.
+ * ada/acats-4/tests/c3/c380003.a: Likewise.
+ * ada/acats-4/tests/c3/c380004.a: Likewise.
+ * ada/acats-4/tests/c3/c38002a.ada: Likewise.
+ * ada/acats-4/tests/c3/c38002b.ada: Likewise.
+ * ada/acats-4/tests/c3/c38005a.ada: Likewise.
+ * ada/acats-4/tests/c3/c38005b.ada: Likewise.
+ * ada/acats-4/tests/c3/c38005c.ada: Likewise.
+ * ada/acats-4/tests/c3/c38102a.ada: Likewise.
+ * ada/acats-4/tests/c3/c38102b.ada: Likewise.
+ * ada/acats-4/tests/c3/c38102c.ada: Likewise.
+ * ada/acats-4/tests/c3/c38102d.ada: Likewise.
+ * ada/acats-4/tests/c3/c38102e.ada: Likewise.
+ * ada/acats-4/tests/c3/c38104a.ada: Likewise.
+ * ada/acats-4/tests/c3/c38107a.ada: Likewise.
+ * ada/acats-4/tests/c3/c38107b.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108a.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108b.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108c0.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108c1.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108c2.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108d0.ada: Likewise.
+ * ada/acats-4/tests/c3/c38108d1.ada: Likewise.
+ * ada/acats-4/tests/c3/c3900010.a: Likewise.
+ * ada/acats-4/tests/c3/c3900011.am: Likewise.
+ * ada/acats-4/tests/c3/c390002.a: Likewise.
+ * ada/acats-4/tests/c3/c390003.a: Likewise.
+ * ada/acats-4/tests/c3/c390004.a: Likewise.
+ * ada/acats-4/tests/c3/c3900050.a: Likewise.
+ * ada/acats-4/tests/c3/c3900051.a: Likewise.
+ * ada/acats-4/tests/c3/c3900052.a: Likewise.
+ * ada/acats-4/tests/c3/c3900053.am: Likewise.
+ * ada/acats-4/tests/c3/c3900060.a: Likewise.
+ * ada/acats-4/tests/c3/c3900061.a: Likewise.
+ * ada/acats-4/tests/c3/c3900062.a: Likewise.
+ * ada/acats-4/tests/c3/c3900063.am: Likewise.
+ * ada/acats-4/tests/c3/c390007.a: Likewise.
+ * ada/acats-4/tests/c3/c390010.a: Likewise.
+ * ada/acats-4/tests/c3/c390011.a: Likewise.
+ * ada/acats-4/tests/c3/c390012.a: Likewise.
+ * ada/acats-4/tests/c3/c39006a.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006b.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006c0.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006c1.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006d.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006e.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006f0.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006f1.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006f2.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006f3.ada: Likewise.
+ * ada/acats-4/tests/c3/c39006g.ada: Likewise.
+ * ada/acats-4/tests/c3/c39007a.ada: Likewise.
+ * ada/acats-4/tests/c3/c39007b.ada: Likewise.
+ * ada/acats-4/tests/c3/c39008a.ada: Likewise.
+ * ada/acats-4/tests/c3/c39008b.ada: Likewise.
+ * ada/acats-4/tests/c3/c39008c.ada: Likewise.
+ * ada/acats-4/tests/c3/c390a010.a: Likewise.
+ * ada/acats-4/tests/c3/c390a011.am: Likewise.
+ * ada/acats-4/tests/c3/c390a020.a: Likewise.
+ * ada/acats-4/tests/c3/c390a021.a: Likewise.
+ * ada/acats-4/tests/c3/c390a022.am: Likewise.
+ * ada/acats-4/tests/c3/c390a030.a: Likewise.
+ * ada/acats-4/tests/c3/c390a031.am: Likewise.
+ * ada/acats-4/tests/c3/c391001.a: Likewise.
+ * ada/acats-4/tests/c3/c391002.a: Likewise.
+ * ada/acats-4/tests/c3/c391003.a: Likewise.
+ * ada/acats-4/tests/c3/c392002.a: Likewise.
+ * ada/acats-4/tests/c3/c392003.a: Likewise.
+ * ada/acats-4/tests/c3/c392004.a: Likewise.
+ * ada/acats-4/tests/c3/c392005.a: Likewise.
+ * ada/acats-4/tests/c3/c392008.a: Likewise.
+ * ada/acats-4/tests/c3/c392010.a: Likewise.
+ * ada/acats-4/tests/c3/c392011.a: Likewise.
+ * ada/acats-4/tests/c3/c392013.a: Likewise.
+ * ada/acats-4/tests/c3/c392014.a: Likewise.
+ * ada/acats-4/tests/c3/c392015.a: Likewise.
+ * ada/acats-4/tests/c3/c392a01.a: Likewise.
+ * ada/acats-4/tests/c3/c392c05.a: Likewise.
+ * ada/acats-4/tests/c3/c392c07.a: Likewise.
+ * ada/acats-4/tests/c3/c392d01.a: Likewise.
+ * ada/acats-4/tests/c3/c392d02.a: Likewise.
+ * ada/acats-4/tests/c3/c392d03.a: Likewise.
+ * ada/acats-4/tests/c3/c393001.a: Likewise.
+ * ada/acats-4/tests/c3/c393007.a: Likewise.
+ * ada/acats-4/tests/c3/c393008.a: Likewise.
+ * ada/acats-4/tests/c3/c393009.a: Likewise.
+ * ada/acats-4/tests/c3/c393010.a: Likewise.
+ * ada/acats-4/tests/c3/c393011.a: Likewise.
+ * ada/acats-4/tests/c3/c393012.a: Likewise.
+ * ada/acats-4/tests/c3/c393013.a: Likewise.
+ * ada/acats-4/tests/c3/c393a02.a: Likewise.
+ * ada/acats-4/tests/c3/c393a03.a: Likewise.
+ * ada/acats-4/tests/c3/c393a05.a: Likewise.
+ * ada/acats-4/tests/c3/c393a06.a: Likewise.
+ * ada/acats-4/tests/c3/c393b12.a: Likewise.
+ * ada/acats-4/tests/c3/c393b13.a: Likewise.
+ * ada/acats-4/tests/c3/c393b14.a: Likewise.
+ * ada/acats-4/tests/c3/c394001.a: Likewise.
+ * ada/acats-4/tests/c3/c394002.a: Likewise.
+ * ada/acats-4/tests/c3/c394003.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0001.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0002.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0003.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0004.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0005.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0006.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0007.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0008.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0009.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0010.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0011.a: Likewise.
+ * ada/acats-4/tests/c3/c3a00120.a: Likewise.
+ * ada/acats-4/tests/c3/c3a00121.a: Likewise.
+ * ada/acats-4/tests/c3/c3a00122.am: Likewise.
+ * ada/acats-4/tests/c3/c3a0013.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0014.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0015.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0016.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0017.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0018.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0019.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0020.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0021.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0022.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0023.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0024.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0025.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0026.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0027.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0028.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0029.a: Likewise.
+ * ada/acats-4/tests/c3/c3a0030.a: Likewise.
+ * ada/acats-4/tests/c3/c3a1001.a: Likewise.
+ * ada/acats-4/tests/c3/c3a1002.a: Likewise.
+ * ada/acats-4/tests/c3/c3a10030.a: Likewise.
+ * ada/acats-4/tests/c3/c3a10031.a: Likewise.
+ * ada/acats-4/tests/c3/c3a10032.am: Likewise.
+ * ada/acats-4/tests/c3/c3a10040.a: Likewise.
+ * ada/acats-4/tests/c3/c3a10041.a: Likewise.
+ * ada/acats-4/tests/c3/c3a10042.am: Likewise.
+ * ada/acats-4/tests/c3/c3a1005.a: Likewise.
+ * ada/acats-4/tests/c3/c3a2001.a: Likewise.
+ * ada/acats-4/tests/c3/c3a2002.a: Likewise.
+ * ada/acats-4/tests/c3/c3a2003.a: Likewise.
+ * ada/acats-4/tests/c3/c3a2004.a: Likewise.
+ * ada/acats-4/tests/c3/c3a2a01.a: Likewise.
+ * ada/acats-4/tests/c3/c3a2a02.a: Likewise.
+ * ada/acats-4/tests/c4/c410001.a: Likewise.
+ * ada/acats-4/tests/c4/c41101d.ada: Likewise.
+ * ada/acats-4/tests/c4/c41103a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41103b.ada: Likewise.
+ * ada/acats-4/tests/c4/c41104a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41105a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41107a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41201d.ada: Likewise.
+ * ada/acats-4/tests/c4/c41203a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41203b.ada: Likewise.
+ * ada/acats-4/tests/c4/c41204a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41205a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41206a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41207a.ada: Likewise.
+ * ada/acats-4/tests/c4/c413001.a: Likewise.
+ * ada/acats-4/tests/c4/c413002.a: Likewise.
+ * ada/acats-4/tests/c4/c413003.a: Likewise.
+ * ada/acats-4/tests/c4/c413004.a: Likewise.
+ * ada/acats-4/tests/c4/c413005.a: Likewise.
+ * ada/acats-4/tests/c4/c413006.a: Likewise.
+ * ada/acats-4/tests/c4/c413007.a: Likewise.
+ * ada/acats-4/tests/c4/c41301a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303b.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303c.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303e.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303f.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303g.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303i.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303j.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303k.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303m.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303n.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303o.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303q.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303r.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303s.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303u.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303v.ada: Likewise.
+ * ada/acats-4/tests/c4/c41303w.ada: Likewise.
+ * ada/acats-4/tests/c4/c41304a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41304b.ada: Likewise.
+ * ada/acats-4/tests/c4/c41306b.ada: Likewise.
+ * ada/acats-4/tests/c4/c41306c.ada: Likewise.
+ * ada/acats-4/tests/c4/c41307d.ada: Likewise.
+ * ada/acats-4/tests/c4/c41309a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41320a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41321a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41322a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41323a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41324a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41325a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41326a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41327a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41328a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41401a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41402a.ada: Likewise.
+ * ada/acats-4/tests/c4/c41404a.ada: Likewise.
+ * ada/acats-4/tests/c4/c416a01.a: Likewise.
+ * ada/acats-4/tests/c4/c416a02.a: Likewise.
+ * ada/acats-4/tests/c4/c420001.a: Likewise.
+ * ada/acats-4/tests/c4/c42006a.ada: Likewise.
+ * ada/acats-4/tests/c4/c42007e.ada: Likewise.
+ * ada/acats-4/tests/c4/c43003a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43004a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43004c.ada: Likewise.
+ * ada/acats-4/tests/c4/c431001.a: Likewise.
+ * ada/acats-4/tests/c4/c431002.a: Likewise.
+ * ada/acats-4/tests/c4/c431003.a: Likewise.
+ * ada/acats-4/tests/c4/c431004.a: Likewise.
+ * ada/acats-4/tests/c4/c43103a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43103b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43104a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43105a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43105b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43106a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43107a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43108a.ada: Likewise.
+ * ada/acats-4/tests/c4/c431a01.a: Likewise.
+ * ada/acats-4/tests/c4/c431a02.a: Likewise.
+ * ada/acats-4/tests/c4/c431a03.a: Likewise.
+ * ada/acats-4/tests/c4/c432001.a: Likewise.
+ * ada/acats-4/tests/c4/c432002.a: Likewise.
+ * ada/acats-4/tests/c4/c432003.a: Likewise.
+ * ada/acats-4/tests/c4/c432004.a: Likewise.
+ * ada/acats-4/tests/c4/c432005.a: Likewise.
+ * ada/acats-4/tests/c4/c43204a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43204c.ada: Likewise.
+ * ada/acats-4/tests/c4/c43204e.ada: Likewise.
+ * ada/acats-4/tests/c4/c43204f.ada: Likewise.
+ * ada/acats-4/tests/c4/c43204g.ada: Likewise.
+ * ada/acats-4/tests/c4/c43204h.ada: Likewise.
+ * ada/acats-4/tests/c4/c43204i.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205c.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205d.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205e.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205g.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205h.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205i.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205j.ada: Likewise.
+ * ada/acats-4/tests/c4/c43205k.ada: Likewise.
+ * ada/acats-4/tests/c4/c43206a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43207b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43207d.ada: Likewise.
+ * ada/acats-4/tests/c4/c43208a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43208b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43209a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43210a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43211a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43212a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43212c.ada: Likewise.
+ * ada/acats-4/tests/c4/c43214a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43214b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43214c.ada: Likewise.
+ * ada/acats-4/tests/c4/c43214d.ada: Likewise.
+ * ada/acats-4/tests/c4/c43214e.ada: Likewise.
+ * ada/acats-4/tests/c4/c43214f.ada: Likewise.
+ * ada/acats-4/tests/c4/c43215a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43215b.ada: Likewise.
+ * ada/acats-4/tests/c4/c43222a.ada: Likewise.
+ * ada/acats-4/tests/c4/c43224a.ada: Likewise.
+ * ada/acats-4/tests/c4/c433001.a: Likewise.
+ * ada/acats-4/tests/c4/c433002.a: Likewise.
+ * ada/acats-4/tests/c4/c433003.a: Likewise.
+ * ada/acats-4/tests/c4/c433004.a: Likewise.
+ * ada/acats-4/tests/c4/c433005.a: Likewise.
+ * ada/acats-4/tests/c4/c433006.a: Likewise.
+ * ada/acats-4/tests/c4/c433007.a: Likewise.
+ * ada/acats-4/tests/c4/c433008.a: Likewise.
+ * ada/acats-4/tests/c4/c433a01.a: Likewise.
+ * ada/acats-4/tests/c4/c433a02.a: Likewise.
+ * ada/acats-4/tests/c4/c433a03.a: Likewise.
+ * ada/acats-4/tests/c4/c433a04.a: Likewise.
+ * ada/acats-4/tests/c4/c44003d.ada: Likewise.
+ * ada/acats-4/tests/c4/c44003f.ada: Likewise.
+ * ada/acats-4/tests/c4/c44003g.ada: Likewise.
+ * ada/acats-4/tests/c4/c450001.a: Likewise.
+ * ada/acats-4/tests/c4/c45112a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45112b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45113a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45114b.ada: Likewise.
+ * ada/acats-4/tests/c4/c452001.a: Likewise.
+ * ada/acats-4/tests/c4/c452002.a: Likewise.
+ * ada/acats-4/tests/c4/c452003.a: Likewise.
+ * ada/acats-4/tests/c4/c452004.a: Likewise.
+ * ada/acats-4/tests/c4/c452005.a: Likewise.
+ * ada/acats-4/tests/c4/c452006.a: Likewise.
+ * ada/acats-4/tests/c4/c45201a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45201b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45202b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45210a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45211a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45220a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45220b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45220c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45220d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45220e.ada: Likewise.
+ * ada/acats-4/tests/c4/c45220f.ada: Likewise.
+ * ada/acats-4/tests/c4/c45231a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45231b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45231c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45231d.tst: Likewise.
+ * ada/acats-4/tests/c4/c45232b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45242b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45251a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45252a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45252b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45253a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45262a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45262b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45262c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45262d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45264a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45264b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45264c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45265a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45271a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45272a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45273a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45274a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45274b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45274c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45281a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45282a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45282b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45291a.ada: Likewise.
+ * ada/acats-4/tests/c4/c452a01.a: Likewise.
+ * ada/acats-4/tests/c4/c452a02.a: Likewise.
+ * ada/acats-4/tests/c4/c452a03.a: Likewise.
+ * ada/acats-4/tests/c4/c453001.a: Likewise.
+ * ada/acats-4/tests/c4/c45303a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45304a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45304b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45304c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45322a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45323a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45331a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45342a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45343a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45344a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45345b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45347a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45347b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45347c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45347d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45411a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45411b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45411c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45411d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45413a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45431a.ada: Likewise.
+ * ada/acats-4/tests/c4/c455001.a: Likewise.
+ * ada/acats-4/tests/c4/c45502b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45502c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45503a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45503b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45503c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45504a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45504b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45504c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45504d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45504e.dep: Likewise.
+ * ada/acats-4/tests/c4/c45504f.dep: Likewise.
+ * ada/acats-4/tests/c4/c45505a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45523a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531e.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531f.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531g.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531h.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531i.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531j.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531k.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531l.ada: Likewise.
+ * ada/acats-4/tests/c4/c45531m.dep: Likewise.
+ * ada/acats-4/tests/c4/c45531n.dep: Likewise.
+ * ada/acats-4/tests/c4/c45531o.dep: Likewise.
+ * ada/acats-4/tests/c4/c45531p.dep: Likewise.
+ * ada/acats-4/tests/c4/c45532a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532c.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532d.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532e.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532f.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532g.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532h.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532i.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532j.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532k.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532l.ada: Likewise.
+ * ada/acats-4/tests/c4/c45532m.dep: Likewise.
+ * ada/acats-4/tests/c4/c45532n.dep: Likewise.
+ * ada/acats-4/tests/c4/c45532o.dep: Likewise.
+ * ada/acats-4/tests/c4/c45532p.dep: Likewise.
+ * ada/acats-4/tests/c4/c45534b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45536a.dep: Likewise.
+ * ada/acats-4/tests/c4/c456001.a: Likewise.
+ * ada/acats-4/tests/c4/c45611a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45611b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45611c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45613a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45613b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45613c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45614a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45614b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45614c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45631a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45631b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45631c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45632a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45632b.dep: Likewise.
+ * ada/acats-4/tests/c4/c45632c.dep: Likewise.
+ * ada/acats-4/tests/c4/c45651a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45662a.ada: Likewise.
+ * ada/acats-4/tests/c4/c45662b.ada: Likewise.
+ * ada/acats-4/tests/c4/c45672a.ada: Likewise.
+ * ada/acats-4/tests/c4/c457001.a: Likewise.
+ * ada/acats-4/tests/c4/c457002.a: Likewise.
+ * ada/acats-4/tests/c4/c457003.a: Likewise.
+ * ada/acats-4/tests/c4/c457004.a: Likewise.
+ * ada/acats-4/tests/c4/c457005.a: Likewise.
+ * ada/acats-4/tests/c4/c457006.a: Likewise.
+ * ada/acats-4/tests/c4/c457007.a: Likewise.
+ * ada/acats-4/tests/c4/c458001.a: Likewise.
+ * ada/acats-4/tests/c4/c458002.a: Likewise.
+ * ada/acats-4/tests/c4/c458003.a: Likewise.
+ * ada/acats-4/tests/c4/c458a01.a: Likewise.
+ * ada/acats-4/tests/c4/c458a02.a: Likewise.
+ * ada/acats-4/tests/c4/c460001.a: Likewise.
+ * ada/acats-4/tests/c4/c460002.a: Likewise.
+ * ada/acats-4/tests/c4/c460004.a: Likewise.
+ * ada/acats-4/tests/c4/c460005.a: Likewise.
+ * ada/acats-4/tests/c4/c460006.a: Likewise.
+ * ada/acats-4/tests/c4/c460007.a: Likewise.
+ * ada/acats-4/tests/c4/c460008.a: Likewise.
+ * ada/acats-4/tests/c4/c460009.a: Likewise.
+ * ada/acats-4/tests/c4/c460010.a: Likewise.
+ * ada/acats-4/tests/c4/c460011.a: Likewise.
+ * ada/acats-4/tests/c4/c460012.a: Likewise.
+ * ada/acats-4/tests/c4/c460013.a: Likewise.
+ * ada/acats-4/tests/c4/c460014.a: Likewise.
+ * ada/acats-4/tests/c4/c460015.a: Likewise.
+ * ada/acats-4/tests/c4/c46011a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46013a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46014a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46021a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46024a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46031a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46032a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46033a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46041a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46042a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46043b.ada: Likewise.
+ * ada/acats-4/tests/c4/c46044b.ada: Likewise.
+ * ada/acats-4/tests/c4/c46051a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46051b.ada: Likewise.
+ * ada/acats-4/tests/c4/c46051c.ada: Likewise.
+ * ada/acats-4/tests/c4/c46052a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46053a.ada: Likewise.
+ * ada/acats-4/tests/c4/c46054a.ada: Likewise.
+ * ada/acats-4/tests/c4/c460a01.a: Likewise.
+ * ada/acats-4/tests/c4/c460a02.a: Likewise.
+ * ada/acats-4/tests/c4/c470001.a: Likewise.
+ * ada/acats-4/tests/c4/c47002a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47002b.ada: Likewise.
+ * ada/acats-4/tests/c4/c47002c.ada: Likewise.
+ * ada/acats-4/tests/c4/c47002d.ada: Likewise.
+ * ada/acats-4/tests/c4/c47003a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47004a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47005a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47006a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47007a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47008a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47009a.ada: Likewise.
+ * ada/acats-4/tests/c4/c47009b.ada: Likewise.
+ * ada/acats-4/tests/c4/c480001.a: Likewise.
+ * ada/acats-4/tests/c4/c48004a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48004b.ada: Likewise.
+ * ada/acats-4/tests/c4/c48004c.ada: Likewise.
+ * ada/acats-4/tests/c4/c48004d.ada: Likewise.
+ * ada/acats-4/tests/c4/c48004e.ada: Likewise.
+ * ada/acats-4/tests/c4/c48004f.ada: Likewise.
+ * ada/acats-4/tests/c4/c48005a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48005b.ada: Likewise.
+ * ada/acats-4/tests/c4/c48006a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48006b.ada: Likewise.
+ * ada/acats-4/tests/c4/c48007a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48007b.ada: Likewise.
+ * ada/acats-4/tests/c4/c48007c.ada: Likewise.
+ * ada/acats-4/tests/c4/c48008a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48008c.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009b.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009c.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009d.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009e.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009f.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009g.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009h.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009i.ada: Likewise.
+ * ada/acats-4/tests/c4/c48009j.ada: Likewise.
+ * ada/acats-4/tests/c4/c48010a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48011a.ada: Likewise.
+ * ada/acats-4/tests/c4/c48012a.ada: Likewise.
+ * ada/acats-4/tests/c4/c490001.a: Likewise.
+ * ada/acats-4/tests/c4/c490002.a: Likewise.
+ * ada/acats-4/tests/c4/c490003.a: Likewise.
+ * ada/acats-4/tests/c4/c49020a.ada: Likewise.
+ * ada/acats-4/tests/c4/c49021a.ada: Likewise.
+ * ada/acats-4/tests/c4/c49022a.ada: Likewise.
+ * ada/acats-4/tests/c4/c49022b.ada: Likewise.
+ * ada/acats-4/tests/c4/c49022c.ada: Likewise.
+ * ada/acats-4/tests/c4/c49023a.ada: Likewise.
+ * ada/acats-4/tests/c4/c49024a.ada: Likewise.
+ * ada/acats-4/tests/c4/c49025a.ada: Likewise.
+ * ada/acats-4/tests/c4/c49026a.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a005b.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a006a.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a007a.tst: Likewise.
+ * ada/acats-4/tests/c4/c4a010a.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a010b.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a011a.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a012b.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a013a.ada: Likewise.
+ * ada/acats-4/tests/c4/c4a014a.ada: Likewise.
+ * ada/acats-4/tests/c5/c51004a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52005a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52005b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52005c.ada: Likewise.
+ * ada/acats-4/tests/c5/c52005d.ada: Likewise.
+ * ada/acats-4/tests/c5/c52005e.ada: Likewise.
+ * ada/acats-4/tests/c5/c52005f.ada: Likewise.
+ * ada/acats-4/tests/c5/c52008a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52008b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52009a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52009b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52010a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52011a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52011b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52101a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52102a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52102b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52102c.ada: Likewise.
+ * ada/acats-4/tests/c5/c52102d.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103c.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103f.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103g.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103h.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103k.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103l.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103m.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103p.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103q.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103r.ada: Likewise.
+ * ada/acats-4/tests/c5/c52103x.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104a.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104b.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104c.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104f.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104g.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104h.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104k.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104l.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104m.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104p.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104q.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104r.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104x.ada: Likewise.
+ * ada/acats-4/tests/c5/c52104y.ada: Likewise.
+ * ada/acats-4/tests/c5/c53007a.ada: Likewise.
+ * ada/acats-4/tests/c5/c540001.a: Likewise.
+ * ada/acats-4/tests/c5/c540002.a: Likewise.
+ * ada/acats-4/tests/c5/c540003.a: Likewise.
+ * ada/acats-4/tests/c5/c54a03a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a04a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a07a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a13a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a13b.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a13c.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a13d.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a22a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a23a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a24a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a24b.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42a.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42b.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42c.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42d.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42e.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42f.ada: Likewise.
+ * ada/acats-4/tests/c5/c54a42g.ada: Likewise.
+ * ada/acats-4/tests/c5/c550001.a: Likewise.
+ * ada/acats-4/tests/c5/c552001.a: Likewise.
+ * ada/acats-4/tests/c5/c552002.a: Likewise.
+ * ada/acats-4/tests/c5/c552a01.a: Likewise.
+ * ada/acats-4/tests/c5/c552a02.a: Likewise.
+ * ada/acats-4/tests/c5/c55b03a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b04a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b05a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b06a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b06b.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b07a.dep: Likewise.
+ * ada/acats-4/tests/c5/c55b07b.dep: Likewise.
+ * ada/acats-4/tests/c5/c55b10a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b11a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b11b.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b15a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55b16a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55c02a.ada: Likewise.
+ * ada/acats-4/tests/c5/c55c02b.ada: Likewise.
+ * ada/acats-4/tests/c5/c56002a.ada: Likewise.
+ * ada/acats-4/tests/c5/c57003a.ada: Likewise.
+ * ada/acats-4/tests/c5/c57004a.ada: Likewise.
+ * ada/acats-4/tests/c5/c57004b.ada: Likewise.
+ * ada/acats-4/tests/c5/c58004c.ada: Likewise.
+ * ada/acats-4/tests/c5/c58004d.ada: Likewise.
+ * ada/acats-4/tests/c5/c58004g.ada: Likewise.
+ * ada/acats-4/tests/c5/c58005a.ada: Likewise.
+ * ada/acats-4/tests/c5/c58005b.ada: Likewise.
+ * ada/acats-4/tests/c5/c58005h.ada: Likewise.
+ * ada/acats-4/tests/c5/c58006a.ada: Likewise.
+ * ada/acats-4/tests/c5/c58006b.ada: Likewise.
+ * ada/acats-4/tests/c5/c59002a.ada: Likewise.
+ * ada/acats-4/tests/c5/c59002b.ada: Likewise.
+ * ada/acats-4/tests/c5/c59002c.ada: Likewise.
+ * ada/acats-4/tests/c6/c61008a.ada: Likewise.
+ * ada/acats-4/tests/c6/c61009a.ada: Likewise.
+ * ada/acats-4/tests/c6/c61010a.ada: Likewise.
+ * ada/acats-4/tests/c6/c611001.a: Likewise.
+ * ada/acats-4/tests/c6/c611a01.a: Likewise.
+ * ada/acats-4/tests/c6/c611a020.a: Likewise.
+ * ada/acats-4/tests/c6/c611a021.a: Likewise.
+ * ada/acats-4/tests/c6/c611a022.am: Likewise.
+ * ada/acats-4/tests/c6/c611a030.a: Likewise.
+ * ada/acats-4/tests/c6/c611a031.a: Likewise.
+ * ada/acats-4/tests/c6/c611a032.am: Likewise.
+ * ada/acats-4/tests/c6/c611a040.a: Likewise.
+ * ada/acats-4/tests/c6/c611a041.a: Likewise.
+ * ada/acats-4/tests/c6/c611a042.a: Likewise.
+ * ada/acats-4/tests/c6/c611a043.am: Likewise.
+ * ada/acats-4/tests/c6/c611b010.a: Likewise.
+ * ada/acats-4/tests/c6/c611b011.a: Likewise.
+ * ada/acats-4/tests/c6/c611b012.am: Likewise.
+ * ada/acats-4/tests/c6/c611b020.a: Likewise.
+ * ada/acats-4/tests/c6/c611b021.a: Likewise.
+ * ada/acats-4/tests/c6/c611b022.am: Likewise.
+ * ada/acats-4/tests/c6/c611b030.a: Likewise.
+ * ada/acats-4/tests/c6/c611b031.a: Likewise.
+ * ada/acats-4/tests/c6/c611b032.a: Likewise.
+ * ada/acats-4/tests/c6/c611b033.am: Likewise.
+ * ada/acats-4/tests/c6/c620001.a: Likewise.
+ * ada/acats-4/tests/c6/c620002.a: Likewise.
+ * ada/acats-4/tests/c6/c62002a.ada: Likewise.
+ * ada/acats-4/tests/c6/c62003b.ada: Likewise.
+ * ada/acats-4/tests/c6/c62004a.ada: Likewise.
+ * ada/acats-4/tests/c6/c62006a.ada: Likewise.
+ * ada/acats-4/tests/c6/c631001.a: Likewise.
+ * ada/acats-4/tests/c6/c640001.a: Likewise.
+ * ada/acats-4/tests/c6/c640002.a: Likewise.
+ * ada/acats-4/tests/c6/c64002b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64004g.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005d0.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005da.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005db.ada: Likewise.
+ * ada/acats-4/tests/c6/c64005dc.ada: Likewise.
+ * ada/acats-4/tests/c6/c641001.a: Likewise.
+ * ada/acats-4/tests/c6/c641002.a: Likewise.
+ * ada/acats-4/tests/c6/c641003.a: Likewise.
+ * ada/acats-4/tests/c6/c64103b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64103c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64103d.ada: Likewise.
+ * ada/acats-4/tests/c6/c64103e.ada: Likewise.
+ * ada/acats-4/tests/c6/c64103f.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104d.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104e.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104f.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104g.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104h.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104i.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104j.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104k.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104l.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104m.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104n.ada: Likewise.
+ * ada/acats-4/tests/c6/c64104o.ada: Likewise.
+ * ada/acats-4/tests/c6/c64105a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64105b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64105c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64105d.ada: Likewise.
+ * ada/acats-4/tests/c6/c64106a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64106b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64106c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64106d.ada: Likewise.
+ * ada/acats-4/tests/c6/c64107a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64108a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109a.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109d.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109e.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109f.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109g.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109h.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109i.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109j.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109k.ada: Likewise.
+ * ada/acats-4/tests/c6/c64109l.ada: Likewise.
+ * ada/acats-4/tests/c6/c64201b.ada: Likewise.
+ * ada/acats-4/tests/c6/c64201c.ada: Likewise.
+ * ada/acats-4/tests/c6/c64202a.ada: Likewise.
+ * ada/acats-4/tests/c6/c650002.a: Likewise.
+ * ada/acats-4/tests/c6/c650003.a: Likewise.
+ * ada/acats-4/tests/c6/c65003a.ada: Likewise.
+ * ada/acats-4/tests/c6/c65003b.ada: Likewise.
+ * ada/acats-4/tests/c6/c650a01.a: Likewise.
+ * ada/acats-4/tests/c6/c650a02.a: Likewise.
+ * ada/acats-4/tests/c6/c650b01.a: Likewise.
+ * ada/acats-4/tests/c6/c650b02.a: Likewise.
+ * ada/acats-4/tests/c6/c650b03.a: Likewise.
+ * ada/acats-4/tests/c6/c650b04.a: Likewise.
+ * ada/acats-4/tests/c6/c651001.a: Likewise.
+ * ada/acats-4/tests/c6/c651002.a: Likewise.
+ * ada/acats-4/tests/c6/c660001.a: Likewise.
+ * ada/acats-4/tests/c6/c66002a.ada: Likewise.
+ * ada/acats-4/tests/c6/c66002c.ada: Likewise.
+ * ada/acats-4/tests/c6/c66002d.ada: Likewise.
+ * ada/acats-4/tests/c6/c66002e.ada: Likewise.
+ * ada/acats-4/tests/c6/c66002f.ada: Likewise.
+ * ada/acats-4/tests/c6/c66002g.ada: Likewise.
+ * ada/acats-4/tests/c6/c67002a.ada: Likewise.
+ * ada/acats-4/tests/c6/c67002b.ada: Likewise.
+ * ada/acats-4/tests/c6/c67002c.ada: Likewise.
+ * ada/acats-4/tests/c6/c67002d.ada: Likewise.
+ * ada/acats-4/tests/c6/c67002e.ada: Likewise.
+ * ada/acats-4/tests/c6/c67003f.ada: Likewise.
+ * ada/acats-4/tests/c6/c67005a.ada: Likewise.
+ * ada/acats-4/tests/c6/c67005b.ada: Likewise.
+ * ada/acats-4/tests/c6/c67005c.ada: Likewise.
+ * ada/acats-4/tests/c6/c67005d.ada: Likewise.
+ * ada/acats-4/tests/c6/c680001.a: Likewise.
+ * ada/acats-4/tests/c7/c72001b.ada: Likewise.
+ * ada/acats-4/tests/c7/c72002a.ada: Likewise.
+ * ada/acats-4/tests/c7/c730001.a: Likewise.
+ * ada/acats-4/tests/c7/c730002.a: Likewise.
+ * ada/acats-4/tests/c7/c730003.a: Likewise.
+ * ada/acats-4/tests/c7/c730004.a: Likewise.
+ * ada/acats-4/tests/c7/c73002a.ada: Likewise.
+ * ada/acats-4/tests/c7/c730a01.a: Likewise.
+ * ada/acats-4/tests/c7/c730a02.a: Likewise.
+ * ada/acats-4/tests/c7/c731001.a: Likewise.
+ * ada/acats-4/tests/c7/c7320010.a: Likewise.
+ * ada/acats-4/tests/c7/c7320011.a: Likewise.
+ * ada/acats-4/tests/c7/c7320012.am: Likewise.
+ * ada/acats-4/tests/c7/c732002.a: Likewise.
+ * ada/acats-4/tests/c7/c732a01.a: Likewise.
+ * ada/acats-4/tests/c7/c732a02.a: Likewise.
+ * ada/acats-4/tests/c7/c732b01.a: Likewise.
+ * ada/acats-4/tests/c7/c732b02.a: Likewise.
+ * ada/acats-4/tests/c7/c732c01.a: Likewise.
+ * ada/acats-4/tests/c7/c74004a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74203a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74206a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74207b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74208a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74208b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74209a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74210a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74211a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74211b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74302a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74302b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74305a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74305b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74306a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74307a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74401d.ada: Likewise.
+ * ada/acats-4/tests/c7/c74401e.ada: Likewise.
+ * ada/acats-4/tests/c7/c74401k.ada: Likewise.
+ * ada/acats-4/tests/c7/c74401q.ada: Likewise.
+ * ada/acats-4/tests/c7/c74402a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74402b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74406a.ada: Likewise.
+ * ada/acats-4/tests/c7/c74407b.ada: Likewise.
+ * ada/acats-4/tests/c7/c74409b.ada: Likewise.
+ * ada/acats-4/tests/c7/c760001.a: Likewise.
+ * ada/acats-4/tests/c7/c760002.a: Likewise.
+ * ada/acats-4/tests/c7/c760007.a: Likewise.
+ * ada/acats-4/tests/c7/c760009.a: Likewise.
+ * ada/acats-4/tests/c7/c760010.a: Likewise.
+ * ada/acats-4/tests/c7/c760011.a: Likewise.
+ * ada/acats-4/tests/c7/c760012.a: Likewise.
+ * ada/acats-4/tests/c7/c760013.a: Likewise.
+ * ada/acats-4/tests/c7/c760014.a: Likewise.
+ * ada/acats-4/tests/c7/c760015.a: Likewise.
+ * ada/acats-4/tests/c7/c760a01.a: Likewise.
+ * ada/acats-4/tests/c7/c760a02.a: Likewise.
+ * ada/acats-4/tests/c7/c760a03.a: Likewise.
+ * ada/acats-4/tests/c7/c761001.a: Likewise.
+ * ada/acats-4/tests/c7/c761002.a: Likewise.
+ * ada/acats-4/tests/c7/c761003.a: Likewise.
+ * ada/acats-4/tests/c7/c761004.a: Likewise.
+ * ada/acats-4/tests/c7/c761005.a: Likewise.
+ * ada/acats-4/tests/c7/c761006.a: Likewise.
+ * ada/acats-4/tests/c7/c761007.a: Likewise.
+ * ada/acats-4/tests/c7/c761010.a: Likewise.
+ * ada/acats-4/tests/c7/c761011.a: Likewise.
+ * ada/acats-4/tests/c7/c761012.a: Likewise.
+ * ada/acats-4/tests/c7/c761013.a: Likewise.
+ * ada/acats-4/tests/c8/c83007a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83012d.ada: Likewise.
+ * ada/acats-4/tests/c8/c83022a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83022g0.ada: Likewise.
+ * ada/acats-4/tests/c8/c83022g1.ada: Likewise.
+ * ada/acats-4/tests/c8/c83023a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83024a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83024e0.ada: Likewise.
+ * ada/acats-4/tests/c8/c83024e1.ada: Likewise.
+ * ada/acats-4/tests/c8/c83025a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83025c.ada: Likewise.
+ * ada/acats-4/tests/c8/c83027a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83027c.ada: Likewise.
+ * ada/acats-4/tests/c8/c83028a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83029a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83030a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83030c.ada: Likewise.
+ * ada/acats-4/tests/c8/c83031a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83031c.ada: Likewise.
+ * ada/acats-4/tests/c8/c83031e.ada: Likewise.
+ * ada/acats-4/tests/c8/c83032a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83033a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83051a.ada: Likewise.
+ * ada/acats-4/tests/c8/c831001.a: Likewise.
+ * ada/acats-4/tests/c8/c83b02a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83b02b.ada: Likewise.
+ * ada/acats-4/tests/c8/c83e02a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83e02b.ada: Likewise.
+ * ada/acats-4/tests/c8/c83e03a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01b.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01c0.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01c1.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01c2.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01d0.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f01d1.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03a.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03b.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03c0.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03c1.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03c2.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03d0.ada: Likewise.
+ * ada/acats-4/tests/c8/c83f03d1.ada: Likewise.
+ * ada/acats-4/tests/c8/c840001.a: Likewise.
+ * ada/acats-4/tests/c8/c840002.a: Likewise.
+ * ada/acats-4/tests/c8/c84002a.ada: Likewise.
+ * ada/acats-4/tests/c8/c84005a.ada: Likewise.
+ * ada/acats-4/tests/c8/c84008a.ada: Likewise.
+ * ada/acats-4/tests/c8/c84009a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85004b.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005b.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005c.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005d.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005e.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005f.ada: Likewise.
+ * ada/acats-4/tests/c8/c85005g.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006b.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006c.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006d.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006e.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006f.ada: Likewise.
+ * ada/acats-4/tests/c8/c85006g.ada: Likewise.
+ * ada/acats-4/tests/c8/c85007a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85007e.ada: Likewise.
+ * ada/acats-4/tests/c8/c85009a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85011a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85013a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85014a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85014b.ada: Likewise.
+ * ada/acats-4/tests/c8/c85014c.ada: Likewise.
+ * ada/acats-4/tests/c8/c85017a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85018a.ada: Likewise.
+ * ada/acats-4/tests/c8/c85018b.ada: Likewise.
+ * ada/acats-4/tests/c8/c85019a.ada: Likewise.
+ * ada/acats-4/tests/c8/c851001.a: Likewise.
+ * ada/acats-4/tests/c8/c851002.a: Likewise.
+ * ada/acats-4/tests/c8/c854001.a: Likewise.
+ * ada/acats-4/tests/c8/c854002.a: Likewise.
+ * ada/acats-4/tests/c8/c854003.a: Likewise.
+ * ada/acats-4/tests/c8/c86003a.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004a.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004b0.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004b1.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004b2.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004c0.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004c1.ada: Likewise.
+ * ada/acats-4/tests/c8/c86004c2.ada: Likewise.
+ * ada/acats-4/tests/c8/c86006i.ada: Likewise.
+ * ada/acats-4/tests/c8/c86007a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87a05a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87a05b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b02a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b02b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b03a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b04a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b04b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b04c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b05a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b06a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b07a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b07b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b07c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b07d.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b07e.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b08a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b09a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b09c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b10a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b11a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b11b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b13a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b14a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b14b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b14c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b14d.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b15a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b16a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b17a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b18a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b18b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b19a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b23a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b24a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b24b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b26b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b27a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b28a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b29a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b30a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b31a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b32a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b33a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b34a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b34b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b34c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b35c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b38a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b39a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b40a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b41a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b42a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b43a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b44a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b45a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b45c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b47a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b48a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b48b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b50a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b54a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b57a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b62a.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b62b.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b62c.ada: Likewise.
+ * ada/acats-4/tests/c8/c87b62d.tst: Likewise.
+ * ada/acats-4/tests/c9/c910001.a: Likewise.
+ * ada/acats-4/tests/c9/c910002.a: Likewise.
+ * ada/acats-4/tests/c9/c910003.a: Likewise.
+ * ada/acats-4/tests/c9/c91004b.ada: Likewise.
+ * ada/acats-4/tests/c9/c91004c.ada: Likewise.
+ * ada/acats-4/tests/c9/c91006a.ada: Likewise.
+ * ada/acats-4/tests/c9/c91007a.ada: Likewise.
+ * ada/acats-4/tests/c9/c920001.a: Likewise.
+ * ada/acats-4/tests/c9/c92002a.ada: Likewise.
+ * ada/acats-4/tests/c9/c92003a.ada: Likewise.
+ * ada/acats-4/tests/c9/c92005a.ada: Likewise.
+ * ada/acats-4/tests/c9/c92005b.ada: Likewise.
+ * ada/acats-4/tests/c9/c92006a.ada: Likewise.
+ * ada/acats-4/tests/c9/c930001.a: Likewise.
+ * ada/acats-4/tests/c9/c93001a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93002a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93003a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93004a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93004b.ada: Likewise.
+ * ada/acats-4/tests/c9/c93004c.ada: Likewise.
+ * ada/acats-4/tests/c9/c93004d.ada: Likewise.
+ * ada/acats-4/tests/c9/c93004f.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005b.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005c.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005d.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005e.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005f.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005g.ada: Likewise.
+ * ada/acats-4/tests/c9/c93005h.ada: Likewise.
+ * ada/acats-4/tests/c9/c93006a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93007a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93008a.ada: Likewise.
+ * ada/acats-4/tests/c9/c93008b.ada: Likewise.
+ * ada/acats-4/tests/c9/c940001.a: Likewise.
+ * ada/acats-4/tests/c9/c940002.a: Likewise.
+ * ada/acats-4/tests/c9/c940004.a: Likewise.
+ * ada/acats-4/tests/c9/c940005.a: Likewise.
+ * ada/acats-4/tests/c9/c940006.a: Likewise.
+ * ada/acats-4/tests/c9/c940007.a: Likewise.
+ * ada/acats-4/tests/c9/c940010.a: Likewise.
+ * ada/acats-4/tests/c9/c940011.a: Likewise.
+ * ada/acats-4/tests/c9/c940012.a: Likewise.
+ * ada/acats-4/tests/c9/c940013.a: Likewise.
+ * ada/acats-4/tests/c9/c940014.a: Likewise.
+ * ada/acats-4/tests/c9/c940015.a: Likewise.
+ * ada/acats-4/tests/c9/c940016.a: Likewise.
+ * ada/acats-4/tests/c9/c940017.a: Likewise.
+ * ada/acats-4/tests/c9/c94001a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94001b.ada: Likewise.
+ * ada/acats-4/tests/c9/c94001c.ada: Likewise.
+ * ada/acats-4/tests/c9/c94001e.ada: Likewise.
+ * ada/acats-4/tests/c9/c94001f.ada: Likewise.
+ * ada/acats-4/tests/c9/c94001g.ada: Likewise.
+ * ada/acats-4/tests/c9/c94002a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94002b.ada: Likewise.
+ * ada/acats-4/tests/c9/c94002d.ada: Likewise.
+ * ada/acats-4/tests/c9/c94002e.ada: Likewise.
+ * ada/acats-4/tests/c9/c94002f.ada: Likewise.
+ * ada/acats-4/tests/c9/c94002g.ada: Likewise.
+ * ada/acats-4/tests/c9/c94004a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94004b.ada: Likewise.
+ * ada/acats-4/tests/c9/c94004c.ada: Likewise.
+ * ada/acats-4/tests/c9/c94005a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94005b.ada: Likewise.
+ * ada/acats-4/tests/c9/c94006a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94007a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94007b.ada: Likewise.
+ * ada/acats-4/tests/c9/c94008a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94008b.ada: Likewise.
+ * ada/acats-4/tests/c9/c94008c.ada: Likewise.
+ * ada/acats-4/tests/c9/c94008d.ada: Likewise.
+ * ada/acats-4/tests/c9/c94010a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94011a.ada: Likewise.
+ * ada/acats-4/tests/c9/c94020a.ada: Likewise.
+ * ada/acats-4/tests/c9/c940a03.a: Likewise.
+ * ada/acats-4/tests/c9/c950001.a: Likewise.
+ * ada/acats-4/tests/c9/c95008a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95009a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95010a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95011a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95012a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95021a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95022a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95022b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95033a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95033b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95034a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95034b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95035a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95040a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95040b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95040c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95040d.ada: Likewise.
+ * ada/acats-4/tests/c9/c95041a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95065a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95065b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95065c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95065d.ada: Likewise.
+ * ada/acats-4/tests/c9/c95065e.ada: Likewise.
+ * ada/acats-4/tests/c9/c95065f.ada: Likewise.
+ * ada/acats-4/tests/c9/c95066a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95067a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95071a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95072b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95073a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95074c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95076a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95078a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95080b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95082g.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085d.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085e.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085f.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085g.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085h.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085i.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085j.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085k.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085l.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085m.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085n.ada: Likewise.
+ * ada/acats-4/tests/c9/c95085o.ada: Likewise.
+ * ada/acats-4/tests/c9/c95086a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95086b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95086c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95086d.ada: Likewise.
+ * ada/acats-4/tests/c9/c95086e.ada: Likewise.
+ * ada/acats-4/tests/c9/c95086f.ada: Likewise.
+ * ada/acats-4/tests/c9/c95087a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95087b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95087c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95087d.ada: Likewise.
+ * ada/acats-4/tests/c9/c95088a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95089a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95090a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95092a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95093a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95095a.ada: Likewise.
+ * ada/acats-4/tests/c9/c95095b.ada: Likewise.
+ * ada/acats-4/tests/c9/c95095c.ada: Likewise.
+ * ada/acats-4/tests/c9/c95095d.ada: Likewise.
+ * ada/acats-4/tests/c9/c95095e.ada: Likewise.
+ * ada/acats-4/tests/c9/c951001.a: Likewise.
+ * ada/acats-4/tests/c9/c951002.a: Likewise.
+ * ada/acats-4/tests/c9/c953001.a: Likewise.
+ * ada/acats-4/tests/c9/c953002.a: Likewise.
+ * ada/acats-4/tests/c9/c953003.a: Likewise.
+ * ada/acats-4/tests/c9/c954001.a: Likewise.
+ * ada/acats-4/tests/c9/c954010.a: Likewise.
+ * ada/acats-4/tests/c9/c954011.a: Likewise.
+ * ada/acats-4/tests/c9/c954012.a: Likewise.
+ * ada/acats-4/tests/c9/c954013.a: Likewise.
+ * ada/acats-4/tests/c9/c954014.a: Likewise.
+ * ada/acats-4/tests/c9/c954015.a: Likewise.
+ * ada/acats-4/tests/c9/c954016.a: Likewise.
+ * ada/acats-4/tests/c9/c954017.a: Likewise.
+ * ada/acats-4/tests/c9/c954018.a: Likewise.
+ * ada/acats-4/tests/c9/c954019.a: Likewise.
+ * ada/acats-4/tests/c9/c954020.a: Likewise.
+ * ada/acats-4/tests/c9/c954021.a: Likewise.
+ * ada/acats-4/tests/c9/c954022.a: Likewise.
+ * ada/acats-4/tests/c9/c954023.a: Likewise.
+ * ada/acats-4/tests/c9/c954024.a: Likewise.
+ * ada/acats-4/tests/c9/c954025.a: Likewise.
+ * ada/acats-4/tests/c9/c954026.a: Likewise.
+ * ada/acats-4/tests/c9/c954027.a: Likewise.
+ * ada/acats-4/tests/c9/c954a01.a: Likewise.
+ * ada/acats-4/tests/c9/c954a02.a: Likewise.
+ * ada/acats-4/tests/c9/c954a03.a: Likewise.
+ * ada/acats-4/tests/c9/c960001.a: Likewise.
+ * ada/acats-4/tests/c9/c960002.a: Likewise.
+ * ada/acats-4/tests/c9/c960004.a: Likewise.
+ * ada/acats-4/tests/c9/c96001a.ada: Likewise.
+ * ada/acats-4/tests/c9/c96004a.ada: Likewise.
+ * ada/acats-4/tests/c9/c96005a.ada: Likewise.
+ * ada/acats-4/tests/c9/c96005b.tst: Likewise.
+ * ada/acats-4/tests/c9/c96005d.ada: Likewise.
+ * ada/acats-4/tests/c9/c96005f.ada: Likewise.
+ * ada/acats-4/tests/c9/c96006a.ada: Likewise.
+ * ada/acats-4/tests/c9/c96007a.ada: Likewise.
+ * ada/acats-4/tests/c9/c96008a.ada: Likewise.
+ * ada/acats-4/tests/c9/c96008b.ada: Likewise.
+ * ada/acats-4/tests/c9/c961001.a: Likewise.
+ * ada/acats-4/tests/c9/c97112a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97113a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97114a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97115a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97116a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97117a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97117b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97117c.ada: Likewise.
+ * ada/acats-4/tests/c9/c97118a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97120a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97120b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201c.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201d.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201e.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201g.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201h.ada: Likewise.
+ * ada/acats-4/tests/c9/c97201x.ada: Likewise.
+ * ada/acats-4/tests/c9/c97202a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97203a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97203b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97203c.ada: Likewise.
+ * ada/acats-4/tests/c9/c97204a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97204b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97205a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97205b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97301a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97301b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97301c.ada: Likewise.
+ * ada/acats-4/tests/c9/c97301d.ada: Likewise.
+ * ada/acats-4/tests/c9/c97301e.ada: Likewise.
+ * ada/acats-4/tests/c9/c97302a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97303a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97303b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97303c.ada: Likewise.
+ * ada/acats-4/tests/c9/c97304a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97304b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97305a.ada: Likewise.
+ * ada/acats-4/tests/c9/c97305b.ada: Likewise.
+ * ada/acats-4/tests/c9/c97305c.ada: Likewise.
+ * ada/acats-4/tests/c9/c97305d.ada: Likewise.
+ * ada/acats-4/tests/c9/c97307a.ada: Likewise.
+ * ada/acats-4/tests/c9/c974001.a: Likewise.
+ * ada/acats-4/tests/c9/c974002.a: Likewise.
+ * ada/acats-4/tests/c9/c974003.a: Likewise.
+ * ada/acats-4/tests/c9/c974004.a: Likewise.
+ * ada/acats-4/tests/c9/c974005.a: Likewise.
+ * ada/acats-4/tests/c9/c974006.a: Likewise.
+ * ada/acats-4/tests/c9/c974007.a: Likewise.
+ * ada/acats-4/tests/c9/c974008.a: Likewise.
+ * ada/acats-4/tests/c9/c974009.a: Likewise.
+ * ada/acats-4/tests/c9/c974010.a: Likewise.
+ * ada/acats-4/tests/c9/c974011.a: Likewise.
+ * ada/acats-4/tests/c9/c974012.a: Likewise.
+ * ada/acats-4/tests/c9/c974013.a: Likewise.
+ * ada/acats-4/tests/c9/c974014.a: Likewise.
+ * ada/acats-4/tests/c9/c980001.a: Likewise.
+ * ada/acats-4/tests/c9/c980002.a: Likewise.
+ * ada/acats-4/tests/c9/c980003.a: Likewise.
+ * ada/acats-4/tests/c9/c990001.a: Likewise.
+ * ada/acats-4/tests/c9/c99005a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a003a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a004a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a007a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a009a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a009c.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a009f.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a009g.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a009h.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a010a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a011a.ada: Likewise.
+ * ada/acats-4/tests/c9/c9a011b.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1003a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1004a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1005a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1006a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a5.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1011a6.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012b0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012b2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1012b4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a5.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1013a6.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1014a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1014a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1014a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1014a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1020e0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1020e1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1020e2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1020e3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a5.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1022a6.ada: Likewise.
+ * ada/acats-4/tests/ca/ca11001.a: Likewise.
+ * ada/acats-4/tests/ca/ca11002.a: Likewise.
+ * ada/acats-4/tests/ca/ca11003.a: Likewise.
+ * ada/acats-4/tests/ca/ca110040.a: Likewise.
+ * ada/acats-4/tests/ca/ca110041.a: Likewise.
+ * ada/acats-4/tests/ca/ca110042.am: Likewise.
+ * ada/acats-4/tests/ca/ca110050.a: Likewise.
+ * ada/acats-4/tests/ca/ca110051.am: Likewise.
+ * ada/acats-4/tests/ca/ca11006.a: Likewise.
+ * ada/acats-4/tests/ca/ca11007.a: Likewise.
+ * ada/acats-4/tests/ca/ca11008.a: Likewise.
+ * ada/acats-4/tests/ca/ca11009.a: Likewise.
+ * ada/acats-4/tests/ca/ca11010.a: Likewise.
+ * ada/acats-4/tests/ca/ca11011.a: Likewise.
+ * ada/acats-4/tests/ca/ca11012.a: Likewise.
+ * ada/acats-4/tests/ca/ca11013.a: Likewise.
+ * ada/acats-4/tests/ca/ca11014.a: Likewise.
+ * ada/acats-4/tests/ca/ca11015.a: Likewise.
+ * ada/acats-4/tests/ca/ca11016.a: Likewise.
+ * ada/acats-4/tests/ca/ca11017.a: Likewise.
+ * ada/acats-4/tests/ca/ca11018.a: Likewise.
+ * ada/acats-4/tests/ca/ca11019.a: Likewise.
+ * ada/acats-4/tests/ca/ca11020.a: Likewise.
+ * ada/acats-4/tests/ca/ca11021.a: Likewise.
+ * ada/acats-4/tests/ca/ca11022.a: Likewise.
+ * ada/acats-4/tests/ca/ca110230.a: Likewise.
+ * ada/acats-4/tests/ca/ca110231.a: Likewise.
+ * ada/acats-4/tests/ca/ca110232.am: Likewise.
+ * ada/acats-4/tests/ca/ca1102a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1102a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1102a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1106a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1108a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca1108b.ada: Likewise.
+ * ada/acats-4/tests/ca/ca11a01.a: Likewise.
+ * ada/acats-4/tests/ca/ca11a02.a: Likewise.
+ * ada/acats-4/tests/ca/ca11b01.a: Likewise.
+ * ada/acats-4/tests/ca/ca11b02.a: Likewise.
+ * ada/acats-4/tests/ca/ca11c01.a: Likewise.
+ * ada/acats-4/tests/ca/ca11c02.a: Likewise.
+ * ada/acats-4/tests/ca/ca11c03.a: Likewise.
+ * ada/acats-4/tests/ca/ca11d010.a: Likewise.
+ * ada/acats-4/tests/ca/ca11d011.a: Likewise.
+ * ada/acats-4/tests/ca/ca11d012.a: Likewise.
+ * ada/acats-4/tests/ca/ca11d013.am: Likewise.
+ * ada/acats-4/tests/ca/ca11d02.a: Likewise.
+ * ada/acats-4/tests/ca/ca11d03.a: Likewise.
+ * ada/acats-4/tests/ca/ca120010.a: Likewise.
+ * ada/acats-4/tests/ca/ca120011.a: Likewise.
+ * ada/acats-4/tests/ca/ca120012.am: Likewise.
+ * ada/acats-4/tests/ca/ca12002.a: Likewise.
+ * ada/acats-4/tests/ca/ca13001.a: Likewise.
+ * ada/acats-4/tests/ca/ca13002.a: Likewise.
+ * ada/acats-4/tests/ca/ca13003.a: Likewise.
+ * ada/acats-4/tests/ca/ca13a01.a: Likewise.
+ * ada/acats-4/tests/ca/ca13a02.a: Likewise.
+ * ada/acats-4/tests/ca/ca140230.a: Likewise.
+ * ada/acats-4/tests/ca/ca140231.a: Likewise.
+ * ada/acats-4/tests/ca/ca140232.am: Likewise.
+ * ada/acats-4/tests/ca/ca140233.a: Likewise.
+ * ada/acats-4/tests/ca/ca140280.a: Likewise.
+ * ada/acats-4/tests/ca/ca140281.a: Likewise.
+ * ada/acats-4/tests/ca/ca140282.a: Likewise.
+ * ada/acats-4/tests/ca/ca140283.am: Likewise.
+ * ada/acats-4/tests/ca/ca15003.a: Likewise.
+ * ada/acats-4/tests/ca/ca200020.a: Likewise.
+ * ada/acats-4/tests/ca/ca200021.a: Likewise.
+ * ada/acats-4/tests/ca/ca200022.am: Likewise.
+ * ada/acats-4/tests/ca/ca200030.a: Likewise.
+ * ada/acats-4/tests/ca/ca200031.am: Likewise.
+ * ada/acats-4/tests/ca/ca2001h0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2001h1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2001h2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2001h3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2002a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2002a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2002a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2003a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2003a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2004a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2004a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2004a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2004a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2004a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2007a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2007a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2007a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2007a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2008a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2008a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2008a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009c0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009c1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009d.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009f0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009f1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2009f2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca2011b.ada: Likewise.
+ * ada/acats-4/tests/ca/ca21001.a: Likewise.
+ * ada/acats-4/tests/ca/ca21002.a: Likewise.
+ * ada/acats-4/tests/ca/ca3011a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca3011a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca3011a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca3011a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca3011a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a5.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003a6.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003b0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003b1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003b2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003b3.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003b4.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5003b5.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5004a.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5004b0.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5004b1.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5004b2.ada: Likewise.
+ * ada/acats-4/tests/ca/ca5006a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb10002.a: Likewise.
+ * ada/acats-4/tests/cb/cb1001a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb1004a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb1005a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb1010a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb1010c.ada: Likewise.
+ * ada/acats-4/tests/cb/cb1010d.ada: Likewise.
+ * ada/acats-4/tests/cb/cb20001.a: Likewise.
+ * ada/acats-4/tests/cb/cb20003.a: Likewise.
+ * ada/acats-4/tests/cb/cb20004.a: Likewise.
+ * ada/acats-4/tests/cb/cb20005.a: Likewise.
+ * ada/acats-4/tests/cb/cb20006.a: Likewise.
+ * ada/acats-4/tests/cb/cb20007.a: Likewise.
+ * ada/acats-4/tests/cb/cb2004a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb2005a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb2006a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb2007a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb20a02.a: Likewise.
+ * ada/acats-4/tests/cb/cb30001.a: Likewise.
+ * ada/acats-4/tests/cb/cb30002.a: Likewise.
+ * ada/acats-4/tests/cb/cb3003a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb3003b.ada: Likewise.
+ * ada/acats-4/tests/cb/cb3004a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb40005.a: Likewise.
+ * ada/acats-4/tests/cb/cb4001a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4002a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4003a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4004a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4005a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4006a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4007a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4008a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4009a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb4013a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb40a01.a: Likewise.
+ * ada/acats-4/tests/cb/cb40a020.a: Likewise.
+ * ada/acats-4/tests/cb/cb40a021.am: Likewise.
+ * ada/acats-4/tests/cb/cb40a030.a: Likewise.
+ * ada/acats-4/tests/cb/cb40a031.am: Likewise.
+ * ada/acats-4/tests/cb/cb40a04.a: Likewise.
+ * ada/acats-4/tests/cb/cb41001.a: Likewise.
+ * ada/acats-4/tests/cb/cb41002.a: Likewise.
+ * ada/acats-4/tests/cb/cb41003.a: Likewise.
+ * ada/acats-4/tests/cb/cb41004.a: Likewise.
+ * ada/acats-4/tests/cb/cb42001.a: Likewise.
+ * ada/acats-4/tests/cb/cb42002.a: Likewise.
+ * ada/acats-4/tests/cb/cb42003.a: Likewise.
+ * ada/acats-4/tests/cb/cb50001.a: Likewise.
+ * ada/acats-4/tests/cb/cb5001a.ada: Likewise.
+ * ada/acats-4/tests/cb/cb5001b.ada: Likewise.
+ * ada/acats-4/tests/cb/cb5002a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1004a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1005b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1010a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1010b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1018a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1104c.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1107b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1111a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1204a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1207b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1220a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1221a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1221b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1221c.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1221d.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1222a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1223a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1224a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1225a.tst: Likewise.
+ * ada/acats-4/tests/cc/cc1226b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1227a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1301a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1302a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1304a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1304b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1307a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1307b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1308a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1310a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1311a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc1311b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc2002a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc30001.a: Likewise.
+ * ada/acats-4/tests/cc/cc30002.a: Likewise.
+ * ada/acats-4/tests/cc/cc30003.a: Likewise.
+ * ada/acats-4/tests/cc/cc30004.a: Likewise.
+ * ada/acats-4/tests/cc/cc3004a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3007a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3007b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3011a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3011d.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3012a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3015a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3016b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3016c.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3016f.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3016i.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3017b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019b0.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019b1.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019b2.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019c0.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019c1.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3019c2.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3106b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3120a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3120b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3121a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3123a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3125a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3125b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3125c.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3125d.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3126a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3127a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3128a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3203a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3207b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3220a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3221a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3222a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3223a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3224a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3225a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3230a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3231a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3232a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3233a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3234a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3235a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3236a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3240a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3305a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3305b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3305c.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3305d.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3601a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3601c.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3602a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3603a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3605a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3606a.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3606b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc3607b.ada: Likewise.
+ * ada/acats-4/tests/cc/cc40001.a: Likewise.
+ * ada/acats-4/tests/cc/cc50001.a: Likewise.
+ * ada/acats-4/tests/cc/cc50a01.a: Likewise.
+ * ada/acats-4/tests/cc/cc50a02.a: Likewise.
+ * ada/acats-4/tests/cc/cc51001.a: Likewise.
+ * ada/acats-4/tests/cc/cc51002.a: Likewise.
+ * ada/acats-4/tests/cc/cc51003.a: Likewise.
+ * ada/acats-4/tests/cc/cc51004.a: Likewise.
+ * ada/acats-4/tests/cc/cc51006.a: Likewise.
+ * ada/acats-4/tests/cc/cc51007.a: Likewise.
+ * ada/acats-4/tests/cc/cc51008.a: Likewise.
+ * ada/acats-4/tests/cc/cc51009.a: Likewise.
+ * ada/acats-4/tests/cc/cc510100.a: Likewise.
+ * ada/acats-4/tests/cc/cc510101.a: Likewise.
+ * ada/acats-4/tests/cc/cc510102.a: Likewise.
+ * ada/acats-4/tests/cc/cc510103.am: Likewise.
+ * ada/acats-4/tests/cc/cc51011.a: Likewise.
+ * ada/acats-4/tests/cc/cc51a01.a: Likewise.
+ * ada/acats-4/tests/cc/cc51b03.a: Likewise.
+ * ada/acats-4/tests/cc/cc51d01.a: Likewise.
+ * ada/acats-4/tests/cc/cc51d02.a: Likewise.
+ * ada/acats-4/tests/cc/cc54001.a: Likewise.
+ * ada/acats-4/tests/cc/cc54002.a: Likewise.
+ * ada/acats-4/tests/cc/cc54003.a: Likewise.
+ * ada/acats-4/tests/cc/cc54004.a: Likewise.
+ * ada/acats-4/tests/cc/cc60001.a: Likewise.
+ * ada/acats-4/tests/cc/cc70001.a: Likewise.
+ * ada/acats-4/tests/cc/cc70002.a: Likewise.
+ * ada/acats-4/tests/cc/cc70003.a: Likewise.
+ * ada/acats-4/tests/cc/cc70a01.a: Likewise.
+ * ada/acats-4/tests/cc/cc70a02.a: Likewise.
+ * ada/acats-4/tests/cc/cc70b01.a: Likewise.
+ * ada/acats-4/tests/cc/cc70b02.a: Likewise.
+ * ada/acats-4/tests/cc/cc70c01.a: Likewise.
+ * ada/acats-4/tests/cc/cc70c02.a: Likewise.
+ * ada/acats-4/tests/cd/cd10001.a: Likewise.
+ * ada/acats-4/tests/cd/cd10002.a: Likewise.
+ * ada/acats-4/tests/cd/cd1009d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009h.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009j.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009k.tst: Likewise.
+ * ada/acats-4/tests/cd/cd1009n.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009o.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009p.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009q.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009r.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009s.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009t.tst: Likewise.
+ * ada/acats-4/tests/cd/cd1009u.tst: Likewise.
+ * ada/acats-4/tests/cd/cd1009v.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009w.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009x.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009y.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1009z.ada: Likewise.
+ * ada/acats-4/tests/cd/cd11001.a: Likewise.
+ * ada/acats-4/tests/cd/cd1c03a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c03b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c03c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c03e.tst: Likewise.
+ * ada/acats-4/tests/cd/cd1c03f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c03g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c03h.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c03i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c04a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c04d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c04e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd1c06a.tst: Likewise.
+ * ada/acats-4/tests/cd/cd20001.a: Likewise.
+ * ada/acats-4/tests/cd/cd2a21a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a21e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a22a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a22e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a22i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a22j.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a23a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a23e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a24a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a24e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a24i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a24j.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a31a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a31e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a32a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a32c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a32e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a32g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a32i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a32j.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a51a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a53a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a53e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2a83c.tst: Likewise.
+ * ada/acats-4/tests/cd/cd2a91c.tst: Likewise.
+ * ada/acats-4/tests/cd/cd2b11b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2b11d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2b11e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2b11f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2b16a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2c11a.tst: Likewise.
+ * ada/acats-4/tests/cd/cd2c11d.tst: Likewise.
+ * ada/acats-4/tests/cd/cd2d11a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd2d13a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd30001.a: Likewise.
+ * ada/acats-4/tests/cd/cd30002.a: Likewise.
+ * ada/acats-4/tests/cd/cd30003.a: Likewise.
+ * ada/acats-4/tests/cd/cd30004.a: Likewise.
+ * ada/acats-4/tests/cd/cd300050.am: Likewise.
+ * ada/acats-4/tests/cd/cd300051.c: Likewise.
+ * ada/acats-4/tests/cd/cd30006.a: Likewise.
+ * ada/acats-4/tests/cd/cd30007.a: Likewise.
+ * ada/acats-4/tests/cd/cd30008.a: Likewise.
+ * ada/acats-4/tests/cd/cd30009.a: Likewise.
+ * ada/acats-4/tests/cd/cd30010.a: Likewise.
+ * ada/acats-4/tests/cd/cd30011.a: Likewise.
+ * ada/acats-4/tests/cd/cd30012.a: Likewise.
+ * ada/acats-4/tests/cd/cd30013.a: Likewise.
+ * ada/acats-4/tests/cd/cd30014.a: Likewise.
+ * ada/acats-4/tests/cd/cd3014a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3014c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3014d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3014f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015h.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3015k.ada: Likewise.
+ * ada/acats-4/tests/cd/cd3021a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd40001.a: Likewise.
+ * ada/acats-4/tests/cd/cd4031a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd4041a.tst: Likewise.
+ * ada/acats-4/tests/cd/cd4051a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd4051b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd4051c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd4051d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003h.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5003i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011k.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011m.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011q.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5011s.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5012a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5012b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5012e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5012f.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5012i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5012m.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013k.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013m.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5013o.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014e.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014g.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014i.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014k.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014m.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014o.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014t.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014v.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014x.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014y.ada: Likewise.
+ * ada/acats-4/tests/cd/cd5014z.ada: Likewise.
+ * ada/acats-4/tests/cd/cd70001.a: Likewise.
+ * ada/acats-4/tests/cd/cd7002a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd7007b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd7101d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd7101e.dep: Likewise.
+ * ada/acats-4/tests/cd/cd7101f.dep: Likewise.
+ * ada/acats-4/tests/cd/cd7101g.tst: Likewise.
+ * ada/acats-4/tests/cd/cd7103d.ada: Likewise.
+ * ada/acats-4/tests/cd/cd7202a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd7204b.ada: Likewise.
+ * ada/acats-4/tests/cd/cd7204c.ada: Likewise.
+ * ada/acats-4/tests/cd/cd72a01.a: Likewise.
+ * ada/acats-4/tests/cd/cd72a02.a: Likewise.
+ * ada/acats-4/tests/cd/cd7305a.ada: Likewise.
+ * ada/acats-4/tests/cd/cd90001.a: Likewise.
+ * ada/acats-4/tests/cd/cd92001.a: Likewise.
+ * ada/acats-4/tests/cd/cda201a.ada: Likewise.
+ * ada/acats-4/tests/cd/cda201b.ada: Likewise.
+ * ada/acats-4/tests/cd/cda201c.ada: Likewise.
+ * ada/acats-4/tests/cd/cda201e.ada: Likewise.
+ * ada/acats-4/tests/cd/cdb0001.a: Likewise.
+ * ada/acats-4/tests/cd/cdb0002.a: Likewise.
+ * ada/acats-4/tests/cd/cdb0a01.a: Likewise.
+ * ada/acats-4/tests/cd/cdb0a02.a: Likewise.
+ * ada/acats-4/tests/cd/cdb3a01.a: Likewise.
+ * ada/acats-4/tests/cd/cdb4001.a: Likewise.
+ * ada/acats-4/tests/cd/cdd1001.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2001.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2a01.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2a02.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2a03.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2b01.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2b02.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2b03.a: Likewise.
+ * ada/acats-4/tests/cd/cdd2b04.a: Likewise.
+ * ada/acats-4/tests/cd/cde0001.a: Likewise.
+ * ada/acats-4/tests/cd/cde0002.a: Likewise.
+ * ada/acats-4/tests/cd/cde0003.a: Likewise.
+ * ada/acats-4/tests/ce/ce2102a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102c.tst: Likewise.
+ * ada/acats-4/tests/ce/ce2102d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102h.tst: Likewise.
+ * ada/acats-4/tests/ce/ce2102i.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102j.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102k.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102l.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102m.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102n.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102o.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102p.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102q.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102r.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102s.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102t.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102u.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102v.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102w.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102x.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2102y.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2103a.tst: Likewise.
+ * ada/acats-4/tests/ce/ce2103b.tst: Likewise.
+ * ada/acats-4/tests/ce/ce2103c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2103d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2104a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2104b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2104c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2104d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2106a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2106b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2108e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2108f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2108g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2108h.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2109a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2109b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2109c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2110a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2110c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2111i.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201d.dep: Likewise.
+ * ada/acats-4/tests/ce/ce2201e.dep: Likewise.
+ * ada/acats-4/tests/ce/ce2201f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201h.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201i.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201j.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201k.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201l.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201m.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2201n.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2202a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2203a.tst: Likewise.
+ * ada/acats-4/tests/ce/ce2204a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2204b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2204c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2204d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2205a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2206a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2208b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401h.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401i.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401j.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401k.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2401l.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2402a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2403a.tst: Likewise.
+ * ada/acats-4/tests/ce/ce2404a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2404b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2405b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2406a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2407a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2407b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2408a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2408b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2409a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2409b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2410a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2410b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce2411a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3002b.tst: Likewise.
+ * ada/acats-4/tests/ce/ce3002c.tst: Likewise.
+ * ada/acats-4/tests/ce/ce3002d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3002f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102b.tst: Likewise.
+ * ada/acats-4/tests/ce/ce3102d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102h.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102i.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102j.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3102k.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3103a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3104a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3104b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3104c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3106a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3106b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3107a.tst: Likewise.
+ * ada/acats-4/tests/ce/ce3107b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3108a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3108b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3110a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3112c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3112d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3114a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3115a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3201a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3202a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3206a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3207a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3301a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3302a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3303a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3304a.tst: Likewise.
+ * ada/acats-4/tests/ce/ce3305a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3306a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3401a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3402a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3402c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3402d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3402e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3403a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3403b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3403c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3403d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3403e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3403f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3404a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3404b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3404c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3404d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3405a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3405c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3405d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3406a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3406b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3406c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3406d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3407a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3407b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3407c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3408a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3408b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3408c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3409a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3409b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3409c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3409d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3409e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3410a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3410b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3410c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3410d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3410e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3411a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3411c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3412a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3413a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3413b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3413c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3414a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3601a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3602a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3602b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3602c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3602d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3603a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3604a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3604b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3605a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3605b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3605c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3605d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3605e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3606a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3606b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3701a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704m.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704n.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3704o.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3705a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3705b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3705c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3705d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3705e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3706c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3706d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3706f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3706g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3707a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3708a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3801a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3801b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804h.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804i.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804j.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804m.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804o.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3804p.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3805a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3805b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806g.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3806h.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3809a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3809b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3810a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3810b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3815a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3901a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3902b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3904a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3904b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3905a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3905b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3905c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3905l.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3906a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3906b.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3906c.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3906d.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3906e.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3906f.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3907a.ada: Likewise.
+ * ada/acats-4/tests/ce/ce3908a.ada: Likewise.
+ * ada/acats-4/tests/cxa/cxa3001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3004.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3005.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3006.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3007.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa3008.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4004.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4005.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4006.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4007.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4008.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4009.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4010.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4011.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4012.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4013.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4014.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4015.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4016.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4017.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4018.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4019.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4020.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4021.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4022.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4023.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4024.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4025.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4026.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4027.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4028.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4029.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4030.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4031.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4032.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4033.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4035.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4036.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4037.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4038.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa4039.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5011.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5012.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5013.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5015.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5016.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a01.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a02.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a03.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a04.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a05.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a06.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a07.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a08.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a09.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa5a10.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa8001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa8002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa8003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa9001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxa9002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa004.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa005.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa006.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa007.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa008.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa009.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa010.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa011.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa012.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa013.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa014.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa015.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa016.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa017.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa018.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa019.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa020.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa021.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaa022.a: Likewise.
+ * ada/acats-4/tests/cxa/cxab001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxab002.au: Likewise.
+ * ada/acats-4/tests/cxa/cxab003.au: Likewise.
+ * ada/acats-4/tests/cxa/cxab004.au: Likewise.
+ * ada/acats-4/tests/cxa/cxab005.au: Likewise.
+ * ada/acats-4/tests/cxa/cxac001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac004.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac005.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac006.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac007.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac008.a: Likewise.
+ * ada/acats-4/tests/cxa/cxac009.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaca01.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaca02.a: Likewise.
+ * ada/acats-4/tests/cxa/cxacb01.a: Likewise.
+ * ada/acats-4/tests/cxa/cxacb02.a: Likewise.
+ * ada/acats-4/tests/cxa/cxacc01.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaf001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxag001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxag002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxag003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxah001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxah002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxah003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai001.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai002.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai003.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai004.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai005.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai006.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai007.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai008.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai009.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai010.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai011.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai012.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai013.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai014.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai015.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai016.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai017.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai018.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai019.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai020.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai021.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai022.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai023.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai024.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai025.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai026.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai027.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai028.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai029.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai030.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai031.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai032.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai033.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai034.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai035.a: Likewise.
+ * ada/acats-4/tests/cxa/cxai036.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia01.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia02.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia03.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia04.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia05.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia06.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia07.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia08.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia09.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia10.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia11.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia12.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia13.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaia14.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib01.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib02.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib03.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib04.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib05.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib06.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib07.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaib08.a: Likewise.
+ * ada/acats-4/tests/cxa/cxaj001.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb2001.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb2002.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb2003.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3001.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3002.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3003.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30040.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30041.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb3005.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30060.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30061.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb3007.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3008.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3009.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3010.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3011.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3012.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30130.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30131.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30132.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb3014.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3015.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3016.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30170.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30171.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30172.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb30180.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30181.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30182.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb3019.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3020.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3021.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb3022.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb30230.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30231.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb30240.c: Likewise.
+ * ada/acats-4/tests/cxb/cxb30241.am: Likewise.
+ * ada/acats-4/tests/cxb/cxb4001.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4002.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4003.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4004.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4005.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4006.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4007.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb4008.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb5001.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb5002.a: Likewise.
+ * ada/acats-4/tests/cxb/cxb5003.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf1001.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2001.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2002.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2003.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2004.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2005.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2a01.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf2a02.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3001.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3002.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3003.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3004.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a01.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a02.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a03.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a04.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a05.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a06.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a07.a: Likewise.
+ * ada/acats-4/tests/cxf/cxf3a08.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg1001.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg1002.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg1003.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg1004.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg1005.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2001.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2002.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2003.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2004.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2005.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2006.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2007.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2008.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2009.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2010.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2011.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2012.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2013.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2014.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2015.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2016.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2017.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2018.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2019.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2020.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2021.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2022.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2023.a: Likewise.
+ * ada/acats-4/tests/cxg/cxg2024.a: Likewise.
+ * ada/acats-4/tests/cxh/cxh3001.a: Likewise.
+ * ada/acats-4/tests/cxh/cxh3002.a: Likewise.
+ * ada/acats-4/tests/cxh/cxh30030.a: Likewise.
+ * ada/acats-4/tests/cxh/cxh30031.am: Likewise.
+ * ada/acats-4/tests/cz/cz1101a.ada: Likewise.
+ * ada/acats-4/tests/cz/cz1102a.ada: Likewise.
+ * ada/acats-4/tests/cz/cz1103a.ada: Likewise.
+ * ada/acats-4/tests/d/d4a002a.ada: Likewise.
+ * ada/acats-4/tests/d/d4a002b.ada: Likewise.
+ * ada/acats-4/tests/d/d4a004a.ada: Likewise.
+ * ada/acats-4/tests/d/d4a004b.ada: Likewise.
+ * ada/acats-4/tests/e/e28002b.ada: Likewise.
+ * ada/acats-4/tests/e/e28005d.ada: Likewise.
+ * ada/acats-4/tests/e/e52103y.ada: Likewise.
+ * ada/acats-4/tests/e/eb4011a.ada: Likewise.
+ * ada/acats-4/tests/e/eb4012a.ada: Likewise.
+ * ada/acats-4/tests/e/eb4014a.ada: Likewise.
+ * ada/acats-4/tests/e/ee3203a.ada: Likewise.
+ * ada/acats-4/tests/e/ee3204a.ada: Likewise.
+ * ada/acats-4/tests/e/ee3402b.ada: Likewise.
+ * ada/acats-4/tests/e/ee3409f.ada: Likewise.
+ * ada/acats-4/tests/e/ee3412c.ada: Likewise.
+ * ada/acats-4/tests/l/la140010.a: Likewise.
+ * ada/acats-4/tests/l/la140011.am: Likewise.
+ * ada/acats-4/tests/l/la140012.a: Likewise.
+ * ada/acats-4/tests/l/la140020.a: Likewise.
+ * ada/acats-4/tests/l/la140021.am: Likewise.
+ * ada/acats-4/tests/l/la140022.a: Likewise.
+ * ada/acats-4/tests/l/la140030.a: Likewise.
+ * ada/acats-4/tests/l/la140031.a: Likewise.
+ * ada/acats-4/tests/l/la140032.am: Likewise.
+ * ada/acats-4/tests/l/la140033.a: Likewise.
+ * ada/acats-4/tests/l/la140040.a: Likewise.
+ * ada/acats-4/tests/l/la140041.am: Likewise.
+ * ada/acats-4/tests/l/la140042.a: Likewise.
+ * ada/acats-4/tests/l/la140050.a: Likewise.
+ * ada/acats-4/tests/l/la140051.a: Likewise.
+ * ada/acats-4/tests/l/la140052.am: Likewise.
+ * ada/acats-4/tests/l/la140053.a: Likewise.
+ * ada/acats-4/tests/l/la140060.a: Likewise.
+ * ada/acats-4/tests/l/la140061.a: Likewise.
+ * ada/acats-4/tests/l/la140062.am: Likewise.
+ * ada/acats-4/tests/l/la140063.a: Likewise.
+ * ada/acats-4/tests/l/la140070.a: Likewise.
+ * ada/acats-4/tests/l/la140071.a: Likewise.
+ * ada/acats-4/tests/l/la140072.am: Likewise.
+ * ada/acats-4/tests/l/la140073.a: Likewise.
+ * ada/acats-4/tests/l/la140080.a: Likewise.
+ * ada/acats-4/tests/l/la140081.a: Likewise.
+ * ada/acats-4/tests/l/la140082.am: Likewise.
+ * ada/acats-4/tests/l/la140083.a: Likewise.
+ * ada/acats-4/tests/l/la140090.a: Likewise.
+ * ada/acats-4/tests/l/la140091.a: Likewise.
+ * ada/acats-4/tests/l/la140092.am: Likewise.
+ * ada/acats-4/tests/l/la140093.a: Likewise.
+ * ada/acats-4/tests/l/la140100.a: Likewise.
+ * ada/acats-4/tests/l/la140101.a: Likewise.
+ * ada/acats-4/tests/l/la140102.am: Likewise.
+ * ada/acats-4/tests/l/la140103.a: Likewise.
+ * ada/acats-4/tests/l/la140110.a: Likewise.
+ * ada/acats-4/tests/l/la140111.a: Likewise.
+ * ada/acats-4/tests/l/la140112.am: Likewise.
+ * ada/acats-4/tests/l/la140113.a: Likewise.
+ * ada/acats-4/tests/l/la140120.a: Likewise.
+ * ada/acats-4/tests/l/la140121.a: Likewise.
+ * ada/acats-4/tests/l/la140122.am: Likewise.
+ * ada/acats-4/tests/l/la140123.a: Likewise.
+ * ada/acats-4/tests/l/la140130.a: Likewise.
+ * ada/acats-4/tests/l/la140131.a: Likewise.
+ * ada/acats-4/tests/l/la140132.am: Likewise.
+ * ada/acats-4/tests/l/la140133.a: Likewise.
+ * ada/acats-4/tests/l/la140140.a: Likewise.
+ * ada/acats-4/tests/l/la140141.a: Likewise.
+ * ada/acats-4/tests/l/la140142.am: Likewise.
+ * ada/acats-4/tests/l/la140143.a: Likewise.
+ * ada/acats-4/tests/l/la140150.a: Likewise.
+ * ada/acats-4/tests/l/la140151.a: Likewise.
+ * ada/acats-4/tests/l/la140152.am: Likewise.
+ * ada/acats-4/tests/l/la140153.a: Likewise.
+ * ada/acats-4/tests/l/la140160.a: Likewise.
+ * ada/acats-4/tests/l/la140161.a: Likewise.
+ * ada/acats-4/tests/l/la140162.am: Likewise.
+ * ada/acats-4/tests/l/la140163.a: Likewise.
+ * ada/acats-4/tests/l/la140170.a: Likewise.
+ * ada/acats-4/tests/l/la140171.a: Likewise.
+ * ada/acats-4/tests/l/la140172.am: Likewise.
+ * ada/acats-4/tests/l/la140173.a: Likewise.
+ * ada/acats-4/tests/l/la140180.a: Likewise.
+ * ada/acats-4/tests/l/la140181.a: Likewise.
+ * ada/acats-4/tests/l/la140182.am: Likewise.
+ * ada/acats-4/tests/l/la140183.a: Likewise.
+ * ada/acats-4/tests/l/la140190.a: Likewise.
+ * ada/acats-4/tests/l/la140191.a: Likewise.
+ * ada/acats-4/tests/l/la140192.am: Likewise.
+ * ada/acats-4/tests/l/la140193.a: Likewise.
+ * ada/acats-4/tests/l/la140200.a: Likewise.
+ * ada/acats-4/tests/l/la140201.a: Likewise.
+ * ada/acats-4/tests/l/la140202.am: Likewise.
+ * ada/acats-4/tests/l/la140203.a: Likewise.
+ * ada/acats-4/tests/l/la140210.a: Likewise.
+ * ada/acats-4/tests/l/la140211.am: Likewise.
+ * ada/acats-4/tests/l/la140212.a: Likewise.
+ * ada/acats-4/tests/l/la140220.a: Likewise.
+ * ada/acats-4/tests/l/la140221.am: Likewise.
+ * ada/acats-4/tests/l/la140222.a: Likewise.
+ * ada/acats-4/tests/l/la140240.a: Likewise.
+ * ada/acats-4/tests/l/la140241.a: Likewise.
+ * ada/acats-4/tests/l/la140242.am: Likewise.
+ * ada/acats-4/tests/l/la140243.a: Likewise.
+ * ada/acats-4/tests/l/la140250.a: Likewise.
+ * ada/acats-4/tests/l/la140251.am: Likewise.
+ * ada/acats-4/tests/l/la140252.a: Likewise.
+ * ada/acats-4/tests/l/la140260.a: Likewise.
+ * ada/acats-4/tests/l/la140261.a: Likewise.
+ * ada/acats-4/tests/l/la140262.am: Likewise.
+ * ada/acats-4/tests/l/la140263.a: Likewise.
+ * ada/acats-4/tests/l/la140270.a: Likewise.
+ * ada/acats-4/tests/l/la140271.a: Likewise.
+ * ada/acats-4/tests/l/la140272.am: Likewise.
+ * ada/acats-4/tests/l/la140273.a: Likewise.
+
+2025-05-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ada/acats-3/elabd.lst: New file.
+ * ada/acats-3/floatstore.lst: Likewise.
+ * ada/acats-3/norun.lst: Likewise.
+ * ada/acats-3/run_acats.sh: Likewise.
+ * ada/acats-3/run_all.sh: Likewise.
+ * ada/acats-3/run_test.exp: Likewise.
+ * ada/acats-3/stackcheck.lst: Likewise.
+ * ada/acats-3/support/acats31.lst: Likewise.
+ * ada/acats-3/support/checkfil.ada: Likewise.
+ * ada/acats-3/support/enumchek.ada: Likewise.
+ * ada/acats-3/support/f340a000.a: Likewise.
+ * ada/acats-3/support/f340a001.a: Likewise.
+ * ada/acats-3/support/f341a00.a: Likewise.
+ * ada/acats-3/support/f390a00.a: Likewise.
+ * ada/acats-3/support/f392a00.a: Likewise.
+ * ada/acats-3/support/f392c00.a: Likewise.
+ * ada/acats-3/support/f392d00.a: Likewise.
+ * ada/acats-3/support/f393a00.a: Likewise.
+ * ada/acats-3/support/f393b00.a: Likewise.
+ * ada/acats-3/support/f394a00.a: Likewise.
+ * ada/acats-3/support/f3a1a00.a: Likewise.
+ * ada/acats-3/support/f3a2a00.a: Likewise.
+ * ada/acats-3/support/f431a00.a: Likewise.
+ * ada/acats-3/support/f433a00.a: Likewise.
+ * ada/acats-3/support/f452a00.a: Likewise.
+ * ada/acats-3/support/f460a00.a: Likewise.
+ * ada/acats-3/support/f650a00.a: Likewise.
+ * ada/acats-3/support/f730a000.a: Likewise.
+ * ada/acats-3/support/f730a001.a: Likewise.
+ * ada/acats-3/support/f731a00.a: Likewise.
+ * ada/acats-3/support/f750a00.a: Likewise.
+ * ada/acats-3/support/f750b00.a: Likewise.
+ * ada/acats-3/support/f760a00.a: Likewise.
+ * ada/acats-3/support/f940a00.a: Likewise.
+ * ada/acats-3/support/f954a00.a: Likewise.
+ * ada/acats-3/support/fa11a00.a: Likewise.
+ * ada/acats-3/support/fa11b00.a: Likewise.
+ * ada/acats-3/support/fa11c00.a: Likewise.
+ * ada/acats-3/support/fa11d00.a: Likewise.
+ * ada/acats-3/support/fa13a00.a: Likewise.
+ * ada/acats-3/support/fa13b00.a: Likewise.
+ * ada/acats-3/support/fa21a00.a: Likewise.
+ * ada/acats-3/support/fb20a00.a: Likewise.
+ * ada/acats-3/support/fb40a00.a: Likewise.
+ * ada/acats-3/support/fc50a00.a: Likewise.
+ * ada/acats-3/support/fc51a00.a: Likewise.
+ * ada/acats-3/support/fc51b00.a: Likewise.
+ * ada/acats-3/support/fc51c00.a: Likewise.
+ * ada/acats-3/support/fc51d00.a: Likewise.
+ * ada/acats-3/support/fc54a00.a: Likewise.
+ * ada/acats-3/support/fc70a00.a: Likewise.
+ * ada/acats-3/support/fc70b00.a: Likewise.
+ * ada/acats-3/support/fc70c00.a: Likewise.
+ * ada/acats-3/support/fcndecl.ada: Likewise.
+ * ada/acats-3/support/fd72a00.a: Likewise.
+ * ada/acats-3/support/fdb0a00.a: Likewise.
+ * ada/acats-3/support/fdd2a00.a: Likewise.
+ * ada/acats-3/support/fdd2b00.a: Likewise.
+ * ada/acats-3/support/fxa5a00.a: Likewise.
+ * ada/acats-3/support/fxaca00.a: Likewise.
+ * ada/acats-3/support/fxacb00.a: Likewise.
+ * ada/acats-3/support/fxacc00.a: Likewise.
+ * ada/acats-3/support/fxaia00.a: Likewise.
+ * ada/acats-3/support/fxc6a00.a: Likewise.
+ * ada/acats-3/support/fxe2a00.a: Likewise.
+ * ada/acats-3/support/fxf2a00.a: Likewise.
+ * ada/acats-3/support/fxf3a00.a: Likewise.
+ * ada/acats-3/support/impbit.adb: Likewise.
+ * ada/acats-3/support/impdef.a: Likewise.
+ * ada/acats-3/support/impdefc.a: Likewise.
+ * ada/acats-3/support/impdefd.a: Likewise.
+ * ada/acats-3/support/impdefe.a: Likewise.
+ * ada/acats-3/support/impdefg.a: Likewise.
+ * ada/acats-3/support/impdefh.a: Likewise.
+ * ada/acats-3/support/lencheck.ada: Likewise.
+ * ada/acats-3/support/macro.dfs: Likewise.
+ * ada/acats-3/support/macrodef.adb: Likewise.
+ * ada/acats-3/support/macrosub.ada: Likewise.
+ * ada/acats-3/support/repbody.ada: Likewise.
+ * ada/acats-3/support/repspec.ada: Likewise.
+ * ada/acats-3/support/spprt13s.tst: Likewise.
+ * ada/acats-3/support/tctouch.ada: Likewise.
+ * ada/acats-3/support/tsttests.dat: Likewise.
+ * ada/acats-3/tests/a/a22006b.ada: Likewise.
+ * ada/acats-3/tests/a/a22006c.ada: Likewise.
+ * ada/acats-3/tests/a/a22006d.ada: Likewise.
+ * ada/acats-3/tests/a/a26007a.tst: Likewise.
+ * ada/acats-3/tests/a/a27003a.ada: Likewise.
+ * ada/acats-3/tests/a/a29003a.ada: Likewise.
+ * ada/acats-3/tests/a/a2a031a.ada: Likewise.
+ * ada/acats-3/tests/a/a33003a.ada: Likewise.
+ * ada/acats-3/tests/a/a34017c.ada: Likewise.
+ * ada/acats-3/tests/a/a35101b.ada: Likewise.
+ * ada/acats-3/tests/a/a35402a.ada: Likewise.
+ * ada/acats-3/tests/a/a35801f.ada: Likewise.
+ * ada/acats-3/tests/a/a35902c.ada: Likewise.
+ * ada/acats-3/tests/a/a38106d.ada: Likewise.
+ * ada/acats-3/tests/a/a38106e.ada: Likewise.
+ * ada/acats-3/tests/a/a49027a.ada: Likewise.
+ * ada/acats-3/tests/a/a49027b.ada: Likewise.
+ * ada/acats-3/tests/a/a49027c.ada: Likewise.
+ * ada/acats-3/tests/a/a54b01a.ada: Likewise.
+ * ada/acats-3/tests/a/a54b02a.ada: Likewise.
+ * ada/acats-3/tests/a/a55b12a.ada: Likewise.
+ * ada/acats-3/tests/a/a55b13a.ada: Likewise.
+ * ada/acats-3/tests/a/a55b14a.ada: Likewise.
+ * ada/acats-3/tests/a/a71004a.ada: Likewise.
+ * ada/acats-3/tests/a/a73001i.ada: Likewise.
+ * ada/acats-3/tests/a/a73001j.ada: Likewise.
+ * ada/acats-3/tests/a/a74105b.ada: Likewise.
+ * ada/acats-3/tests/a/a74106a.ada: Likewise.
+ * ada/acats-3/tests/a/a74106b.ada: Likewise.
+ * ada/acats-3/tests/a/a74106c.ada: Likewise.
+ * ada/acats-3/tests/a/a74205e.ada: Likewise.
+ * ada/acats-3/tests/a/a74205f.ada: Likewise.
+ * ada/acats-3/tests/a/a83009a.ada: Likewise.
+ * ada/acats-3/tests/a/a83009b.ada: Likewise.
+ * ada/acats-3/tests/a/a83a02a.ada: Likewise.
+ * ada/acats-3/tests/a/a83a02b.ada: Likewise.
+ * ada/acats-3/tests/a/a83a06a.ada: Likewise.
+ * ada/acats-3/tests/a/a83a08a.ada: Likewise.
+ * ada/acats-3/tests/a/a83c01c.ada: Likewise.
+ * ada/acats-3/tests/a/a83c01h.ada: Likewise.
+ * ada/acats-3/tests/a/a83c01i.ada: Likewise.
+ * ada/acats-3/tests/a/a85007d.ada: Likewise.
+ * ada/acats-3/tests/a/a85013b.ada: Likewise.
+ * ada/acats-3/tests/a/a87b59a.ada: Likewise.
+ * ada/acats-3/tests/a/a95001c.ada: Likewise.
+ * ada/acats-3/tests/a/a95074d.ada: Likewise.
+ * ada/acats-3/tests/a/a97106a.ada: Likewise.
+ * ada/acats-3/tests/a/a99006a.ada: Likewise.
+ * ada/acats-3/tests/a/aa2010a.ada: Likewise.
+ * ada/acats-3/tests/a/aa2012a.ada: Likewise.
+ * ada/acats-3/tests/a/ac1015b.ada: Likewise.
+ * ada/acats-3/tests/a/ac3106a.ada: Likewise.
+ * ada/acats-3/tests/a/ac3206a.ada: Likewise.
+ * ada/acats-3/tests/a/ac3207a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7001b.ada: Likewise.
+ * ada/acats-3/tests/a/ad7001c0.ada: Likewise.
+ * ada/acats-3/tests/a/ad7001c1.ada: Likewise.
+ * ada/acats-3/tests/a/ad7001d0.ada: Likewise.
+ * ada/acats-3/tests/a/ad7001d1.ada: Likewise.
+ * ada/acats-3/tests/a/ad7006a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7101a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7101c.ada: Likewise.
+ * ada/acats-3/tests/a/ad7102a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7103a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7103c.ada: Likewise.
+ * ada/acats-3/tests/a/ad7104a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7201a.ada: Likewise.
+ * ada/acats-3/tests/a/ad7203b.ada: Likewise.
+ * ada/acats-3/tests/a/ad7205b.ada: Likewise.
+ * ada/acats-3/tests/a/ad8011a.tst: Likewise.
+ * ada/acats-3/tests/a/ada101a.ada: Likewise.
+ * ada/acats-3/tests/a/ae2113a.ada: Likewise.
+ * ada/acats-3/tests/a/ae2113b.ada: Likewise.
+ * ada/acats-3/tests/a/ae3002g.ada: Likewise.
+ * ada/acats-3/tests/a/ae3101a.ada: Likewise.
+ * ada/acats-3/tests/a/ae3702a.ada: Likewise.
+ * ada/acats-3/tests/a/ae3709a.ada: Likewise.
+ * ada/acats-3/tests/c2/c23001a.ada: Likewise.
+ * ada/acats-3/tests/c2/c23003a.tst: Likewise.
+ * ada/acats-3/tests/c2/c23003b.tst: Likewise.
+ * ada/acats-3/tests/c2/c23003g.tst: Likewise.
+ * ada/acats-3/tests/c2/c23003i.tst: Likewise.
+ * ada/acats-3/tests/c2/c23006a.ada: Likewise.
+ * ada/acats-3/tests/c2/c23006b.ada: Likewise.
+ * ada/acats-3/tests/c2/c23006c.ada: Likewise.
+ * ada/acats-3/tests/c2/c23006d.ada: Likewise.
+ * ada/acats-3/tests/c2/c23006e.ada: Likewise.
+ * ada/acats-3/tests/c2/c23006f.ada: Likewise.
+ * ada/acats-3/tests/c2/c23006g.ada: Likewise.
+ * ada/acats-3/tests/c2/c24002d.ada: Likewise.
+ * ada/acats-3/tests/c2/c24003a.ada: Likewise.
+ * ada/acats-3/tests/c2/c24003b.ada: Likewise.
+ * ada/acats-3/tests/c2/c24003c.ada: Likewise.
+ * ada/acats-3/tests/c2/c24106a.ada: Likewise.
+ * ada/acats-3/tests/c2/c24202d.ada: Likewise.
+ * ada/acats-3/tests/c2/c24203a.ada: Likewise.
+ * ada/acats-3/tests/c2/c24203b.ada: Likewise.
+ * ada/acats-3/tests/c2/c24207a.ada: Likewise.
+ * ada/acats-3/tests/c2/c24211a.ada: Likewise.
+ * ada/acats-3/tests/c2/c250001.au: Likewise.
+ * ada/acats-3/tests/c2/c250002.au: Likewise.
+ * ada/acats-3/tests/c2/c25001a.ada: Likewise.
+ * ada/acats-3/tests/c2/c25001b.ada: Likewise.
+ * ada/acats-3/tests/c2/c26006a.ada: Likewise.
+ * ada/acats-3/tests/c2/c26008a.ada: Likewise.
+ * ada/acats-3/tests/c2/c2a001a.ada: Likewise.
+ * ada/acats-3/tests/c2/c2a001b.ada: Likewise.
+ * ada/acats-3/tests/c2/c2a001c.ada: Likewise.
+ * ada/acats-3/tests/c2/c2a002a.ada: Likewise.
+ * ada/acats-3/tests/c2/c2a008a.ada: Likewise.
+ * ada/acats-3/tests/c2/c2a021b.ada: Likewise.
+ * ada/acats-3/tests/c3/c32001a.ada: Likewise.
+ * ada/acats-3/tests/c3/c32001b.ada: Likewise.
+ * ada/acats-3/tests/c3/c32001c.ada: Likewise.
+ * ada/acats-3/tests/c3/c32001d.ada: Likewise.
+ * ada/acats-3/tests/c3/c32001e.ada: Likewise.
+ * ada/acats-3/tests/c3/c32107a.ada: Likewise.
+ * ada/acats-3/tests/c3/c32107c.ada: Likewise.
+ * ada/acats-3/tests/c3/c32108a.ada: Likewise.
+ * ada/acats-3/tests/c3/c32108b.ada: Likewise.
+ * ada/acats-3/tests/c3/c32111a.ada: Likewise.
+ * ada/acats-3/tests/c3/c32111b.ada: Likewise.
+ * ada/acats-3/tests/c3/c32112b.ada: Likewise.
+ * ada/acats-3/tests/c3/c32113a.ada: Likewise.
+ * ada/acats-3/tests/c3/c32115a.ada: Likewise.
+ * ada/acats-3/tests/c3/c32115b.ada: Likewise.
+ * ada/acats-3/tests/c3/c330001.a: Likewise.
+ * ada/acats-3/tests/c3/c330002.a: Likewise.
+ * ada/acats-3/tests/c3/c332001.a: Likewise.
+ * ada/acats-3/tests/c3/c340001.a: Likewise.
+ * ada/acats-3/tests/c3/c34001a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34001c.ada: Likewise.
+ * ada/acats-3/tests/c3/c34001d.ada: Likewise.
+ * ada/acats-3/tests/c3/c34001f.ada: Likewise.
+ * ada/acats-3/tests/c3/c34002a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34002c.ada: Likewise.
+ * ada/acats-3/tests/c3/c34003a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34003c.ada: Likewise.
+ * ada/acats-3/tests/c3/c34004a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34004c.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005c.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005d.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005f.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005g.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005i.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005j.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005l.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005m.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005o.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005p.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005r.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005s.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005u.ada: Likewise.
+ * ada/acats-3/tests/c3/c34005v.ada: Likewise.
+ * ada/acats-3/tests/c3/c34006a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34006d.ada: Likewise.
+ * ada/acats-3/tests/c3/c34006f.ada: Likewise.
+ * ada/acats-3/tests/c3/c34006g.ada: Likewise.
+ * ada/acats-3/tests/c3/c34006j.ada: Likewise.
+ * ada/acats-3/tests/c3/c34006l.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007d.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007f.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007g.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007i.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007j.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007m.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007p.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007r.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007s.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007u.ada: Likewise.
+ * ada/acats-3/tests/c3/c34007v.ada: Likewise.
+ * ada/acats-3/tests/c3/c34008a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34009a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34009d.ada: Likewise.
+ * ada/acats-3/tests/c3/c34009f.ada: Likewise.
+ * ada/acats-3/tests/c3/c34009g.ada: Likewise.
+ * ada/acats-3/tests/c3/c34009j.ada: Likewise.
+ * ada/acats-3/tests/c3/c34009l.ada: Likewise.
+ * ada/acats-3/tests/c3/c34011b.ada: Likewise.
+ * ada/acats-3/tests/c3/c34012a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014a.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014c.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014e.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014g.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014h.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014n.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014p.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014r.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014t.ada: Likewise.
+ * ada/acats-3/tests/c3/c34014u.ada: Likewise.
+ * ada/acats-3/tests/c3/c34018a.ada: Likewise.
+ * ada/acats-3/tests/c3/c340a01.a: Likewise.
+ * ada/acats-3/tests/c3/c340a02.a: Likewise.
+ * ada/acats-3/tests/c3/c341a01.a: Likewise.
+ * ada/acats-3/tests/c3/c341a02.a: Likewise.
+ * ada/acats-3/tests/c3/c341a03.a: Likewise.
+ * ada/acats-3/tests/c3/c341a04.a: Likewise.
+ * ada/acats-3/tests/c3/c35003a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35003b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35003d.ada: Likewise.
+ * ada/acats-3/tests/c3/c35102a.ada: Likewise.
+ * ada/acats-3/tests/c3/c352001.a: Likewise.
+ * ada/acats-3/tests/c3/c354002.a: Likewise.
+ * ada/acats-3/tests/c3/c354003.a: Likewise.
+ * ada/acats-3/tests/c3/c354004.a: Likewise.
+ * ada/acats-3/tests/c3/c35502a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502c.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502d.tst: Likewise.
+ * ada/acats-3/tests/c3/c35502e.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502f.tst: Likewise.
+ * ada/acats-3/tests/c3/c35502g.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502h.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502i.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502j.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502k.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502l.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502m.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502n.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502o.ada: Likewise.
+ * ada/acats-3/tests/c3/c35502p.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503c.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503d.tst: Likewise.
+ * ada/acats-3/tests/c3/c35503e.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503f.tst: Likewise.
+ * ada/acats-3/tests/c3/c35503g.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503h.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503k.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503l.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503o.ada: Likewise.
+ * ada/acats-3/tests/c3/c35503p.ada: Likewise.
+ * ada/acats-3/tests/c3/c35504a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35504b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35505c.ada: Likewise.
+ * ada/acats-3/tests/c3/c35505e.ada: Likewise.
+ * ada/acats-3/tests/c3/c35505f.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507c.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507e.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507g.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507h.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507i.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507j.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507k.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507l.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507m.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507n.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507o.ada: Likewise.
+ * ada/acats-3/tests/c3/c35507p.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508c.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508e.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508g.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508h.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508k.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508l.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508o.ada: Likewise.
+ * ada/acats-3/tests/c3/c35508p.ada: Likewise.
+ * ada/acats-3/tests/c3/c35703a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35704a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35704b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35704c.ada: Likewise.
+ * ada/acats-3/tests/c3/c35704d.ada: Likewise.
+ * ada/acats-3/tests/c3/c35801d.ada: Likewise.
+ * ada/acats-3/tests/c3/c35902d.ada: Likewise.
+ * ada/acats-3/tests/c3/c35904a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35904b.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a02a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a05a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a05d.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a05n.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a05q.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a07a.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a07d.ada: Likewise.
+ * ada/acats-3/tests/c3/c35a08b.ada: Likewise.
+ * ada/acats-3/tests/c3/c360002.a: Likewise.
+ * ada/acats-3/tests/c3/c36104a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36104b.ada: Likewise.
+ * ada/acats-3/tests/c3/c36172a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36172b.ada: Likewise.
+ * ada/acats-3/tests/c3/c36172c.ada: Likewise.
+ * ada/acats-3/tests/c3/c36174a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36180a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36202c.ada: Likewise.
+ * ada/acats-3/tests/c3/c36203a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36204a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36204b.ada: Likewise.
+ * ada/acats-3/tests/c3/c36204c.ada: Likewise.
+ * ada/acats-3/tests/c3/c36204d.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205b.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205c.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205d.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205e.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205f.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205g.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205h.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205i.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205j.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205k.ada: Likewise.
+ * ada/acats-3/tests/c3/c36205l.ada: Likewise.
+ * ada/acats-3/tests/c3/c36301a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36301b.ada: Likewise.
+ * ada/acats-3/tests/c3/c36302a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36304a.ada: Likewise.
+ * ada/acats-3/tests/c3/c36305a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37002a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37003a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37003b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37005a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37006a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37008a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37008b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37009a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37010a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37010b.ada: Likewise.
+ * ada/acats-3/tests/c3/c371001.a: Likewise.
+ * ada/acats-3/tests/c3/c371002.a: Likewise.
+ * ada/acats-3/tests/c3/c371003.a: Likewise.
+ * ada/acats-3/tests/c3/c37102b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37103a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37105a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37107a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37108b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37206a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37207a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37208a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37208b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37209a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37209b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37210a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37211a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37211b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37211c.ada: Likewise.
+ * ada/acats-3/tests/c3/c37211d.ada: Likewise.
+ * ada/acats-3/tests/c3/c37211e.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213d.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213f.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213h.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213j.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213k.ada: Likewise.
+ * ada/acats-3/tests/c3/c37213l.ada: Likewise.
+ * ada/acats-3/tests/c3/c37215b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37215d.ada: Likewise.
+ * ada/acats-3/tests/c3/c37215f.ada: Likewise.
+ * ada/acats-3/tests/c3/c37215h.ada: Likewise.
+ * ada/acats-3/tests/c3/c37217a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37217b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37217c.ada: Likewise.
+ * ada/acats-3/tests/c3/c37304a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37305a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37306a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37309a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37310a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37312a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37402a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37403a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37404a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37404b.ada: Likewise.
+ * ada/acats-3/tests/c3/c37405a.ada: Likewise.
+ * ada/acats-3/tests/c3/c37411a.ada: Likewise.
+ * ada/acats-3/tests/c3/c380001.a: Likewise.
+ * ada/acats-3/tests/c3/c380002.a: Likewise.
+ * ada/acats-3/tests/c3/c380003.a: Likewise.
+ * ada/acats-3/tests/c3/c380004.a: Likewise.
+ * ada/acats-3/tests/c3/c38002a.ada: Likewise.
+ * ada/acats-3/tests/c3/c38002b.ada: Likewise.
+ * ada/acats-3/tests/c3/c38005a.ada: Likewise.
+ * ada/acats-3/tests/c3/c38005b.ada: Likewise.
+ * ada/acats-3/tests/c3/c38005c.ada: Likewise.
+ * ada/acats-3/tests/c3/c38102a.ada: Likewise.
+ * ada/acats-3/tests/c3/c38102b.ada: Likewise.
+ * ada/acats-3/tests/c3/c38102c.ada: Likewise.
+ * ada/acats-3/tests/c3/c38102d.ada: Likewise.
+ * ada/acats-3/tests/c3/c38102e.ada: Likewise.
+ * ada/acats-3/tests/c3/c38104a.ada: Likewise.
+ * ada/acats-3/tests/c3/c38107a.ada: Likewise.
+ * ada/acats-3/tests/c3/c38107b.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108a.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108b.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108c0.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108c1.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108c2.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108d0.ada: Likewise.
+ * ada/acats-3/tests/c3/c38108d1.ada: Likewise.
+ * ada/acats-3/tests/c3/c3900010.a: Likewise.
+ * ada/acats-3/tests/c3/c3900011.am: Likewise.
+ * ada/acats-3/tests/c3/c390002.a: Likewise.
+ * ada/acats-3/tests/c3/c390003.a: Likewise.
+ * ada/acats-3/tests/c3/c390004.a: Likewise.
+ * ada/acats-3/tests/c3/c3900050.a: Likewise.
+ * ada/acats-3/tests/c3/c3900051.a: Likewise.
+ * ada/acats-3/tests/c3/c3900052.a: Likewise.
+ * ada/acats-3/tests/c3/c3900053.am: Likewise.
+ * ada/acats-3/tests/c3/c3900060.a: Likewise.
+ * ada/acats-3/tests/c3/c3900061.a: Likewise.
+ * ada/acats-3/tests/c3/c3900062.a: Likewise.
+ * ada/acats-3/tests/c3/c3900063.am: Likewise.
+ * ada/acats-3/tests/c3/c390007.a: Likewise.
+ * ada/acats-3/tests/c3/c390010.a: Likewise.
+ * ada/acats-3/tests/c3/c390011.a: Likewise.
+ * ada/acats-3/tests/c3/c390012.a: Likewise.
+ * ada/acats-3/tests/c3/c39006a.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006b.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006c0.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006c1.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006d.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006e.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006f0.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006f1.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006f2.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006f3.ada: Likewise.
+ * ada/acats-3/tests/c3/c39006g.ada: Likewise.
+ * ada/acats-3/tests/c3/c39007a.ada: Likewise.
+ * ada/acats-3/tests/c3/c39007b.ada: Likewise.
+ * ada/acats-3/tests/c3/c39008a.ada: Likewise.
+ * ada/acats-3/tests/c3/c39008b.ada: Likewise.
+ * ada/acats-3/tests/c3/c39008c.ada: Likewise.
+ * ada/acats-3/tests/c3/c390a010.a: Likewise.
+ * ada/acats-3/tests/c3/c390a011.am: Likewise.
+ * ada/acats-3/tests/c3/c390a020.a: Likewise.
+ * ada/acats-3/tests/c3/c390a021.a: Likewise.
+ * ada/acats-3/tests/c3/c390a022.am: Likewise.
+ * ada/acats-3/tests/c3/c390a030.a: Likewise.
+ * ada/acats-3/tests/c3/c390a031.am: Likewise.
+ * ada/acats-3/tests/c3/c391001.a: Likewise.
+ * ada/acats-3/tests/c3/c391002.a: Likewise.
+ * ada/acats-3/tests/c3/c391003.a: Likewise.
+ * ada/acats-3/tests/c3/c392002.a: Likewise.
+ * ada/acats-3/tests/c3/c392003.a: Likewise.
+ * ada/acats-3/tests/c3/c392004.a: Likewise.
+ * ada/acats-3/tests/c3/c392005.a: Likewise.
+ * ada/acats-3/tests/c3/c392008.a: Likewise.
+ * ada/acats-3/tests/c3/c392010.a: Likewise.
+ * ada/acats-3/tests/c3/c392011.a: Likewise.
+ * ada/acats-3/tests/c3/c392013.a: Likewise.
+ * ada/acats-3/tests/c3/c392014.a: Likewise.
+ * ada/acats-3/tests/c3/c392015.a: Likewise.
+ * ada/acats-3/tests/c3/c392a01.a: Likewise.
+ * ada/acats-3/tests/c3/c392c05.a: Likewise.
+ * ada/acats-3/tests/c3/c392c07.a: Likewise.
+ * ada/acats-3/tests/c3/c392d01.a: Likewise.
+ * ada/acats-3/tests/c3/c392d02.a: Likewise.
+ * ada/acats-3/tests/c3/c392d03.a: Likewise.
+ * ada/acats-3/tests/c3/c393001.a: Likewise.
+ * ada/acats-3/tests/c3/c393007.a: Likewise.
+ * ada/acats-3/tests/c3/c393008.a: Likewise.
+ * ada/acats-3/tests/c3/c393009.a: Likewise.
+ * ada/acats-3/tests/c3/c393010.a: Likewise.
+ * ada/acats-3/tests/c3/c393011.a: Likewise.
+ * ada/acats-3/tests/c3/c393012.a: Likewise.
+ * ada/acats-3/tests/c3/c393013.a: Likewise.
+ * ada/acats-3/tests/c3/c393a02.a: Likewise.
+ * ada/acats-3/tests/c3/c393a03.a: Likewise.
+ * ada/acats-3/tests/c3/c393a05.a: Likewise.
+ * ada/acats-3/tests/c3/c393a06.a: Likewise.
+ * ada/acats-3/tests/c3/c393b12.a: Likewise.
+ * ada/acats-3/tests/c3/c393b13.a: Likewise.
+ * ada/acats-3/tests/c3/c393b14.a: Likewise.
+ * ada/acats-3/tests/c3/c394001.a: Likewise.
+ * ada/acats-3/tests/c3/c394002.a: Likewise.
+ * ada/acats-3/tests/c3/c394003.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0001.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0002.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0003.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0004.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0005.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0006.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0007.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0008.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0009.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0010.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0011.a: Likewise.
+ * ada/acats-3/tests/c3/c3a00120.a: Likewise.
+ * ada/acats-3/tests/c3/c3a00121.a: Likewise.
+ * ada/acats-3/tests/c3/c3a00122.am: Likewise.
+ * ada/acats-3/tests/c3/c3a0013.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0014.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0015.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0016.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0017.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0018.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0019.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0020.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0021.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0022.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0023.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0024.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0025.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0026.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0027.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0028.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0029.a: Likewise.
+ * ada/acats-3/tests/c3/c3a0030.a: Likewise.
+ * ada/acats-3/tests/c3/c3a1001.a: Likewise.
+ * ada/acats-3/tests/c3/c3a1002.a: Likewise.
+ * ada/acats-3/tests/c3/c3a10030.a: Likewise.
+ * ada/acats-3/tests/c3/c3a10031.a: Likewise.
+ * ada/acats-3/tests/c3/c3a10032.am: Likewise.
+ * ada/acats-3/tests/c3/c3a10040.a: Likewise.
+ * ada/acats-3/tests/c3/c3a10041.a: Likewise.
+ * ada/acats-3/tests/c3/c3a10042.am: Likewise.
+ * ada/acats-3/tests/c3/c3a2001.a: Likewise.
+ * ada/acats-3/tests/c3/c3a2002.a: Likewise.
+ * ada/acats-3/tests/c3/c3a2003.a: Likewise.
+ * ada/acats-3/tests/c3/c3a2004.a: Likewise.
+ * ada/acats-3/tests/c3/c3a2a01.a: Likewise.
+ * ada/acats-3/tests/c3/c3a2a02.a: Likewise.
+ * ada/acats-3/tests/c4/c410001.a: Likewise.
+ * ada/acats-3/tests/c4/c41101d.ada: Likewise.
+ * ada/acats-3/tests/c4/c41103a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41103b.ada: Likewise.
+ * ada/acats-3/tests/c4/c41104a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41105a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41107a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41201d.ada: Likewise.
+ * ada/acats-3/tests/c4/c41203a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41203b.ada: Likewise.
+ * ada/acats-3/tests/c4/c41204a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41205a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41206a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41207a.ada: Likewise.
+ * ada/acats-3/tests/c4/c413001.a: Likewise.
+ * ada/acats-3/tests/c4/c413002.a: Likewise.
+ * ada/acats-3/tests/c4/c413003.a: Likewise.
+ * ada/acats-3/tests/c4/c413004.a: Likewise.
+ * ada/acats-3/tests/c4/c413005.a: Likewise.
+ * ada/acats-3/tests/c4/c413006.a: Likewise.
+ * ada/acats-3/tests/c4/c41301a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303b.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303c.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303e.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303f.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303g.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303i.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303j.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303k.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303m.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303n.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303o.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303q.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303r.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303s.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303u.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303v.ada: Likewise.
+ * ada/acats-3/tests/c4/c41303w.ada: Likewise.
+ * ada/acats-3/tests/c4/c41304a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41304b.ada: Likewise.
+ * ada/acats-3/tests/c4/c41306b.ada: Likewise.
+ * ada/acats-3/tests/c4/c41306c.ada: Likewise.
+ * ada/acats-3/tests/c4/c41307d.ada: Likewise.
+ * ada/acats-3/tests/c4/c41309a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41320a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41321a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41322a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41323a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41324a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41325a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41326a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41327a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41328a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41401a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41402a.ada: Likewise.
+ * ada/acats-3/tests/c4/c41404a.ada: Likewise.
+ * ada/acats-3/tests/c4/c420001.a: Likewise.
+ * ada/acats-3/tests/c4/c42006a.ada: Likewise.
+ * ada/acats-3/tests/c4/c42007e.ada: Likewise.
+ * ada/acats-3/tests/c4/c43003a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43004a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43004c.ada: Likewise.
+ * ada/acats-3/tests/c4/c431001.a: Likewise.
+ * ada/acats-3/tests/c4/c43103a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43103b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43104a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43105a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43105b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43106a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43107a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43108a.ada: Likewise.
+ * ada/acats-3/tests/c4/c431a01.a: Likewise.
+ * ada/acats-3/tests/c4/c431a02.a: Likewise.
+ * ada/acats-3/tests/c4/c431a03.a: Likewise.
+ * ada/acats-3/tests/c4/c432001.a: Likewise.
+ * ada/acats-3/tests/c4/c432002.a: Likewise.
+ * ada/acats-3/tests/c4/c432003.a: Likewise.
+ * ada/acats-3/tests/c4/c432004.a: Likewise.
+ * ada/acats-3/tests/c4/c432005.a: Likewise.
+ * ada/acats-3/tests/c4/c43204a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43204c.ada: Likewise.
+ * ada/acats-3/tests/c4/c43204e.ada: Likewise.
+ * ada/acats-3/tests/c4/c43204f.ada: Likewise.
+ * ada/acats-3/tests/c4/c43204g.ada: Likewise.
+ * ada/acats-3/tests/c4/c43204h.ada: Likewise.
+ * ada/acats-3/tests/c4/c43204i.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205c.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205d.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205e.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205g.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205h.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205i.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205j.ada: Likewise.
+ * ada/acats-3/tests/c4/c43205k.ada: Likewise.
+ * ada/acats-3/tests/c4/c43206a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43207b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43207d.ada: Likewise.
+ * ada/acats-3/tests/c4/c43208a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43208b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43209a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43210a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43211a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43212a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43212c.ada: Likewise.
+ * ada/acats-3/tests/c4/c43214a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43214b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43214c.ada: Likewise.
+ * ada/acats-3/tests/c4/c43214d.ada: Likewise.
+ * ada/acats-3/tests/c4/c43214e.ada: Likewise.
+ * ada/acats-3/tests/c4/c43214f.ada: Likewise.
+ * ada/acats-3/tests/c4/c43215a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43215b.ada: Likewise.
+ * ada/acats-3/tests/c4/c43222a.ada: Likewise.
+ * ada/acats-3/tests/c4/c43224a.ada: Likewise.
+ * ada/acats-3/tests/c4/c433001.a: Likewise.
+ * ada/acats-3/tests/c4/c433a01.a: Likewise.
+ * ada/acats-3/tests/c4/c433a02.a: Likewise.
+ * ada/acats-3/tests/c4/c433a03.a: Likewise.
+ * ada/acats-3/tests/c4/c433a04.a: Likewise.
+ * ada/acats-3/tests/c4/c44003d.ada: Likewise.
+ * ada/acats-3/tests/c4/c44003f.ada: Likewise.
+ * ada/acats-3/tests/c4/c44003g.ada: Likewise.
+ * ada/acats-3/tests/c4/c450001.a: Likewise.
+ * ada/acats-3/tests/c4/c45112a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45112b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45113a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45114b.ada: Likewise.
+ * ada/acats-3/tests/c4/c452001.a: Likewise.
+ * ada/acats-3/tests/c4/c45201a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45201b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45202b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45210a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45211a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45220a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45220b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45220c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45220d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45220e.ada: Likewise.
+ * ada/acats-3/tests/c4/c45220f.ada: Likewise.
+ * ada/acats-3/tests/c4/c45231a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45231b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45231c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45231d.tst: Likewise.
+ * ada/acats-3/tests/c4/c45232b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45242b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45251a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45252a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45252b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45253a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45262a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45262b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45262c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45262d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45264a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45264b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45264c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45265a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45271a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45272a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45273a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45274a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45274b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45274c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45281a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45282a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45282b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45291a.ada: Likewise.
+ * ada/acats-3/tests/c4/c452a01.a: Likewise.
+ * ada/acats-3/tests/c4/c452a02.a: Likewise.
+ * ada/acats-3/tests/c4/c452a03.a: Likewise.
+ * ada/acats-3/tests/c4/c453001.a: Likewise.
+ * ada/acats-3/tests/c4/c45303a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45304a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45304b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45304c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45322a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45323a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45331a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45342a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45343a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45344a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45345b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45347a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45347b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45347c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45347d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45411a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45411b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45411c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45411d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45413a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45431a.ada: Likewise.
+ * ada/acats-3/tests/c4/c455001.a: Likewise.
+ * ada/acats-3/tests/c4/c45502b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45502c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45503a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45503b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45503c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45504a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45504b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45504c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45504d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45504e.dep: Likewise.
+ * ada/acats-3/tests/c4/c45504f.dep: Likewise.
+ * ada/acats-3/tests/c4/c45505a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45523a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531e.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531f.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531g.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531h.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531i.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531j.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531k.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531l.ada: Likewise.
+ * ada/acats-3/tests/c4/c45531m.dep: Likewise.
+ * ada/acats-3/tests/c4/c45531n.dep: Likewise.
+ * ada/acats-3/tests/c4/c45531o.dep: Likewise.
+ * ada/acats-3/tests/c4/c45531p.dep: Likewise.
+ * ada/acats-3/tests/c4/c45532a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532c.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532d.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532e.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532f.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532g.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532h.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532i.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532j.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532k.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532l.ada: Likewise.
+ * ada/acats-3/tests/c4/c45532m.dep: Likewise.
+ * ada/acats-3/tests/c4/c45532n.dep: Likewise.
+ * ada/acats-3/tests/c4/c45532o.dep: Likewise.
+ * ada/acats-3/tests/c4/c45532p.dep: Likewise.
+ * ada/acats-3/tests/c4/c45534b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45536a.dep: Likewise.
+ * ada/acats-3/tests/c4/c456001.a: Likewise.
+ * ada/acats-3/tests/c4/c45611a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45611b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45611c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45613a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45613b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45613c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45614a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45614b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45614c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45631a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45631b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45631c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45632a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45632b.dep: Likewise.
+ * ada/acats-3/tests/c4/c45632c.dep: Likewise.
+ * ada/acats-3/tests/c4/c45651a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45662a.ada: Likewise.
+ * ada/acats-3/tests/c4/c45662b.ada: Likewise.
+ * ada/acats-3/tests/c4/c45672a.ada: Likewise.
+ * ada/acats-3/tests/c4/c460001.a: Likewise.
+ * ada/acats-3/tests/c4/c460002.a: Likewise.
+ * ada/acats-3/tests/c4/c460004.a: Likewise.
+ * ada/acats-3/tests/c4/c460005.a: Likewise.
+ * ada/acats-3/tests/c4/c460006.a: Likewise.
+ * ada/acats-3/tests/c4/c460007.a: Likewise.
+ * ada/acats-3/tests/c4/c460008.a: Likewise.
+ * ada/acats-3/tests/c4/c460009.a: Likewise.
+ * ada/acats-3/tests/c4/c460010.a: Likewise.
+ * ada/acats-3/tests/c4/c460011.a: Likewise.
+ * ada/acats-3/tests/c4/c460012.a: Likewise.
+ * ada/acats-3/tests/c4/c460013.a: Likewise.
+ * ada/acats-3/tests/c4/c460014.a: Likewise.
+ * ada/acats-3/tests/c4/c460015.a: Likewise.
+ * ada/acats-3/tests/c4/c46011a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46013a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46014a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46021a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46024a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46031a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46032a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46033a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46041a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46042a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46043b.ada: Likewise.
+ * ada/acats-3/tests/c4/c46044b.ada: Likewise.
+ * ada/acats-3/tests/c4/c46051a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46051b.ada: Likewise.
+ * ada/acats-3/tests/c4/c46051c.ada: Likewise.
+ * ada/acats-3/tests/c4/c46052a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46053a.ada: Likewise.
+ * ada/acats-3/tests/c4/c46054a.ada: Likewise.
+ * ada/acats-3/tests/c4/c460a01.a: Likewise.
+ * ada/acats-3/tests/c4/c460a02.a: Likewise.
+ * ada/acats-3/tests/c4/c47002a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47002b.ada: Likewise.
+ * ada/acats-3/tests/c4/c47002c.ada: Likewise.
+ * ada/acats-3/tests/c4/c47002d.ada: Likewise.
+ * ada/acats-3/tests/c4/c47003a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47004a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47005a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47006a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47007a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47008a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47009a.ada: Likewise.
+ * ada/acats-3/tests/c4/c47009b.ada: Likewise.
+ * ada/acats-3/tests/c4/c480001.a: Likewise.
+ * ada/acats-3/tests/c4/c48004a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48004b.ada: Likewise.
+ * ada/acats-3/tests/c4/c48004c.ada: Likewise.
+ * ada/acats-3/tests/c4/c48004d.ada: Likewise.
+ * ada/acats-3/tests/c4/c48004e.ada: Likewise.
+ * ada/acats-3/tests/c4/c48004f.ada: Likewise.
+ * ada/acats-3/tests/c4/c48005a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48005b.ada: Likewise.
+ * ada/acats-3/tests/c4/c48006a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48006b.ada: Likewise.
+ * ada/acats-3/tests/c4/c48007a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48007b.ada: Likewise.
+ * ada/acats-3/tests/c4/c48007c.ada: Likewise.
+ * ada/acats-3/tests/c4/c48008a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48008c.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009b.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009c.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009d.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009e.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009f.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009g.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009h.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009i.ada: Likewise.
+ * ada/acats-3/tests/c4/c48009j.ada: Likewise.
+ * ada/acats-3/tests/c4/c48010a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48011a.ada: Likewise.
+ * ada/acats-3/tests/c4/c48012a.ada: Likewise.
+ * ada/acats-3/tests/c4/c490001.a: Likewise.
+ * ada/acats-3/tests/c4/c490002.a: Likewise.
+ * ada/acats-3/tests/c4/c490003.a: Likewise.
+ * ada/acats-3/tests/c4/c49020a.ada: Likewise.
+ * ada/acats-3/tests/c4/c49021a.ada: Likewise.
+ * ada/acats-3/tests/c4/c49022a.ada: Likewise.
+ * ada/acats-3/tests/c4/c49022b.ada: Likewise.
+ * ada/acats-3/tests/c4/c49022c.ada: Likewise.
+ * ada/acats-3/tests/c4/c49023a.ada: Likewise.
+ * ada/acats-3/tests/c4/c49024a.ada: Likewise.
+ * ada/acats-3/tests/c4/c49025a.ada: Likewise.
+ * ada/acats-3/tests/c4/c49026a.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a005b.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a006a.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a007a.tst: Likewise.
+ * ada/acats-3/tests/c4/c4a010a.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a010b.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a011a.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a012b.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a013a.ada: Likewise.
+ * ada/acats-3/tests/c4/c4a014a.ada: Likewise.
+ * ada/acats-3/tests/c5/c51004a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52005a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52005b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52005c.ada: Likewise.
+ * ada/acats-3/tests/c5/c52005d.ada: Likewise.
+ * ada/acats-3/tests/c5/c52005e.ada: Likewise.
+ * ada/acats-3/tests/c5/c52005f.ada: Likewise.
+ * ada/acats-3/tests/c5/c52008a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52008b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52009a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52009b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52010a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52011a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52011b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52101a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52102a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52102b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52102c.ada: Likewise.
+ * ada/acats-3/tests/c5/c52102d.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103c.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103f.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103g.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103h.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103k.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103l.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103m.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103p.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103q.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103r.ada: Likewise.
+ * ada/acats-3/tests/c5/c52103x.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104a.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104b.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104c.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104f.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104g.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104h.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104k.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104l.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104m.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104p.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104q.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104r.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104x.ada: Likewise.
+ * ada/acats-3/tests/c5/c52104y.ada: Likewise.
+ * ada/acats-3/tests/c5/c53007a.ada: Likewise.
+ * ada/acats-3/tests/c5/c540001.a: Likewise.
+ * ada/acats-3/tests/c5/c540002.a: Likewise.
+ * ada/acats-3/tests/c5/c54a03a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a04a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a07a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a13a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a13b.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a13c.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a13d.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a22a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a23a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a24a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a24b.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42a.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42b.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42c.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42d.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42e.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42f.ada: Likewise.
+ * ada/acats-3/tests/c5/c54a42g.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b03a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b04a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b05a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b06a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b06b.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b07a.dep: Likewise.
+ * ada/acats-3/tests/c5/c55b07b.dep: Likewise.
+ * ada/acats-3/tests/c5/c55b10a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b11a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b11b.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b15a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55b16a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55c02a.ada: Likewise.
+ * ada/acats-3/tests/c5/c55c02b.ada: Likewise.
+ * ada/acats-3/tests/c5/c56002a.ada: Likewise.
+ * ada/acats-3/tests/c5/c57003a.ada: Likewise.
+ * ada/acats-3/tests/c5/c57004a.ada: Likewise.
+ * ada/acats-3/tests/c5/c57004b.ada: Likewise.
+ * ada/acats-3/tests/c5/c58004c.ada: Likewise.
+ * ada/acats-3/tests/c5/c58004d.ada: Likewise.
+ * ada/acats-3/tests/c5/c58004g.ada: Likewise.
+ * ada/acats-3/tests/c5/c58005a.ada: Likewise.
+ * ada/acats-3/tests/c5/c58005b.ada: Likewise.
+ * ada/acats-3/tests/c5/c58005h.ada: Likewise.
+ * ada/acats-3/tests/c5/c58006a.ada: Likewise.
+ * ada/acats-3/tests/c5/c58006b.ada: Likewise.
+ * ada/acats-3/tests/c5/c59002a.ada: Likewise.
+ * ada/acats-3/tests/c5/c59002b.ada: Likewise.
+ * ada/acats-3/tests/c5/c59002c.ada: Likewise.
+ * ada/acats-3/tests/c6/c61008a.ada: Likewise.
+ * ada/acats-3/tests/c6/c61009a.ada: Likewise.
+ * ada/acats-3/tests/c6/c61010a.ada: Likewise.
+ * ada/acats-3/tests/c6/c620001.a: Likewise.
+ * ada/acats-3/tests/c6/c620002.a: Likewise.
+ * ada/acats-3/tests/c6/c62002a.ada: Likewise.
+ * ada/acats-3/tests/c6/c62003a.ada: Likewise.
+ * ada/acats-3/tests/c6/c62003b.ada: Likewise.
+ * ada/acats-3/tests/c6/c62004a.ada: Likewise.
+ * ada/acats-3/tests/c6/c62006a.ada: Likewise.
+ * ada/acats-3/tests/c6/c631001.a: Likewise.
+ * ada/acats-3/tests/c6/c640001.a: Likewise.
+ * ada/acats-3/tests/c6/c640002.a: Likewise.
+ * ada/acats-3/tests/c6/c64002b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64004g.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005d0.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005da.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005db.ada: Likewise.
+ * ada/acats-3/tests/c6/c64005dc.ada: Likewise.
+ * ada/acats-3/tests/c6/c641001.a: Likewise.
+ * ada/acats-3/tests/c6/c64103b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64103c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64103d.ada: Likewise.
+ * ada/acats-3/tests/c6/c64103e.ada: Likewise.
+ * ada/acats-3/tests/c6/c64103f.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104d.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104e.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104f.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104g.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104h.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104i.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104j.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104k.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104l.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104m.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104n.ada: Likewise.
+ * ada/acats-3/tests/c6/c64104o.ada: Likewise.
+ * ada/acats-3/tests/c6/c64105a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64105b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64105c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64105d.ada: Likewise.
+ * ada/acats-3/tests/c6/c64106a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64106b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64106c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64106d.ada: Likewise.
+ * ada/acats-3/tests/c6/c64107a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64108a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109a.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109d.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109e.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109f.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109g.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109h.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109i.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109j.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109k.ada: Likewise.
+ * ada/acats-3/tests/c6/c64109l.ada: Likewise.
+ * ada/acats-3/tests/c6/c64201b.ada: Likewise.
+ * ada/acats-3/tests/c6/c64201c.ada: Likewise.
+ * ada/acats-3/tests/c6/c64202a.ada: Likewise.
+ * ada/acats-3/tests/c6/c650002.a: Likewise.
+ * ada/acats-3/tests/c6/c650003.a: Likewise.
+ * ada/acats-3/tests/c6/c65003a.ada: Likewise.
+ * ada/acats-3/tests/c6/c65003b.ada: Likewise.
+ * ada/acats-3/tests/c6/c650a01.a: Likewise.
+ * ada/acats-3/tests/c6/c651001.a: Likewise.
+ * ada/acats-3/tests/c6/c660001.a: Likewise.
+ * ada/acats-3/tests/c6/c66002a.ada: Likewise.
+ * ada/acats-3/tests/c6/c66002c.ada: Likewise.
+ * ada/acats-3/tests/c6/c66002d.ada: Likewise.
+ * ada/acats-3/tests/c6/c66002e.ada: Likewise.
+ * ada/acats-3/tests/c6/c66002f.ada: Likewise.
+ * ada/acats-3/tests/c6/c66002g.ada: Likewise.
+ * ada/acats-3/tests/c6/c67002a.ada: Likewise.
+ * ada/acats-3/tests/c6/c67002b.ada: Likewise.
+ * ada/acats-3/tests/c6/c67002c.ada: Likewise.
+ * ada/acats-3/tests/c6/c67002d.ada: Likewise.
+ * ada/acats-3/tests/c6/c67002e.ada: Likewise.
+ * ada/acats-3/tests/c6/c67003f.ada: Likewise.
+ * ada/acats-3/tests/c6/c67005a.ada: Likewise.
+ * ada/acats-3/tests/c6/c67005b.ada: Likewise.
+ * ada/acats-3/tests/c6/c67005c.ada: Likewise.
+ * ada/acats-3/tests/c6/c67005d.ada: Likewise.
+ * ada/acats-3/tests/c7/c72001b.ada: Likewise.
+ * ada/acats-3/tests/c7/c72002a.ada: Likewise.
+ * ada/acats-3/tests/c7/c730001.a: Likewise.
+ * ada/acats-3/tests/c7/c730002.a: Likewise.
+ * ada/acats-3/tests/c7/c730003.a: Likewise.
+ * ada/acats-3/tests/c7/c730004.a: Likewise.
+ * ada/acats-3/tests/c7/c73002a.ada: Likewise.
+ * ada/acats-3/tests/c7/c730a01.a: Likewise.
+ * ada/acats-3/tests/c7/c730a02.a: Likewise.
+ * ada/acats-3/tests/c7/c731001.a: Likewise.
+ * ada/acats-3/tests/c7/c74004a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74203a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74206a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74207b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74208a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74208b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74209a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74210a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74211a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74211b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74302a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74302b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74305a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74305b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74306a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74307a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74401d.ada: Likewise.
+ * ada/acats-3/tests/c7/c74401e.ada: Likewise.
+ * ada/acats-3/tests/c7/c74401k.ada: Likewise.
+ * ada/acats-3/tests/c7/c74401q.ada: Likewise.
+ * ada/acats-3/tests/c7/c74402a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74402b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74406a.ada: Likewise.
+ * ada/acats-3/tests/c7/c74407b.ada: Likewise.
+ * ada/acats-3/tests/c7/c74409b.ada: Likewise.
+ * ada/acats-3/tests/c7/c750b01.a: Likewise.
+ * ada/acats-3/tests/c7/c760001.a: Likewise.
+ * ada/acats-3/tests/c7/c760002.a: Likewise.
+ * ada/acats-3/tests/c7/c760007.a: Likewise.
+ * ada/acats-3/tests/c7/c760009.a: Likewise.
+ * ada/acats-3/tests/c7/c760010.a: Likewise.
+ * ada/acats-3/tests/c7/c760011.a: Likewise.
+ * ada/acats-3/tests/c7/c760012.a: Likewise.
+ * ada/acats-3/tests/c7/c760013.a: Likewise.
+ * ada/acats-3/tests/c7/c760015.a: Likewise.
+ * ada/acats-3/tests/c7/c760a02.a: Likewise.
+ * ada/acats-3/tests/c7/c761001.a: Likewise.
+ * ada/acats-3/tests/c7/c761002.a: Likewise.
+ * ada/acats-3/tests/c7/c761003.a: Likewise.
+ * ada/acats-3/tests/c7/c761004.a: Likewise.
+ * ada/acats-3/tests/c7/c761005.a: Likewise.
+ * ada/acats-3/tests/c7/c761006.a: Likewise.
+ * ada/acats-3/tests/c7/c761007.a: Likewise.
+ * ada/acats-3/tests/c7/c761010.a: Likewise.
+ * ada/acats-3/tests/c7/c761011.a: Likewise.
+ * ada/acats-3/tests/c7/c761012.a: Likewise.
+ * ada/acats-3/tests/c7/c761013.a: Likewise.
+ * ada/acats-3/tests/c8/c83007a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83012d.ada: Likewise.
+ * ada/acats-3/tests/c8/c83022a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83022g0.ada: Likewise.
+ * ada/acats-3/tests/c8/c83022g1.ada: Likewise.
+ * ada/acats-3/tests/c8/c83023a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83024a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83024e0.ada: Likewise.
+ * ada/acats-3/tests/c8/c83024e1.ada: Likewise.
+ * ada/acats-3/tests/c8/c83025a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83025c.ada: Likewise.
+ * ada/acats-3/tests/c8/c83027a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83027c.ada: Likewise.
+ * ada/acats-3/tests/c8/c83028a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83029a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83030a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83030c.ada: Likewise.
+ * ada/acats-3/tests/c8/c83031a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83031c.ada: Likewise.
+ * ada/acats-3/tests/c8/c83031e.ada: Likewise.
+ * ada/acats-3/tests/c8/c83032a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83033a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83051a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83b02a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83b02b.ada: Likewise.
+ * ada/acats-3/tests/c8/c83e02a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83e02b.ada: Likewise.
+ * ada/acats-3/tests/c8/c83e03a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01b.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01c0.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01c1.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01c2.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01d0.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f01d1.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03a.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03b.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03c0.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03c1.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03c2.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03d0.ada: Likewise.
+ * ada/acats-3/tests/c8/c83f03d1.ada: Likewise.
+ * ada/acats-3/tests/c8/c840001.a: Likewise.
+ * ada/acats-3/tests/c8/c84002a.ada: Likewise.
+ * ada/acats-3/tests/c8/c84005a.ada: Likewise.
+ * ada/acats-3/tests/c8/c84008a.ada: Likewise.
+ * ada/acats-3/tests/c8/c84009a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85004b.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005b.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005c.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005d.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005e.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005f.ada: Likewise.
+ * ada/acats-3/tests/c8/c85005g.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006b.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006c.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006d.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006e.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006f.ada: Likewise.
+ * ada/acats-3/tests/c8/c85006g.ada: Likewise.
+ * ada/acats-3/tests/c8/c85007a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85007e.ada: Likewise.
+ * ada/acats-3/tests/c8/c85009a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85011a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85013a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85014a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85014b.ada: Likewise.
+ * ada/acats-3/tests/c8/c85014c.ada: Likewise.
+ * ada/acats-3/tests/c8/c85017a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85018a.ada: Likewise.
+ * ada/acats-3/tests/c8/c85018b.ada: Likewise.
+ * ada/acats-3/tests/c8/c85019a.ada: Likewise.
+ * ada/acats-3/tests/c8/c851001.a: Likewise.
+ * ada/acats-3/tests/c8/c851002.a: Likewise.
+ * ada/acats-3/tests/c8/c854001.a: Likewise.
+ * ada/acats-3/tests/c8/c854002.a: Likewise.
+ * ada/acats-3/tests/c8/c854003.a: Likewise.
+ * ada/acats-3/tests/c8/c86003a.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004a.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004b0.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004b1.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004b2.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004c0.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004c1.ada: Likewise.
+ * ada/acats-3/tests/c8/c86004c2.ada: Likewise.
+ * ada/acats-3/tests/c8/c86006i.ada: Likewise.
+ * ada/acats-3/tests/c8/c86007a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87a05a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87a05b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b02a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b02b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b03a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b04a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b04b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b04c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b05a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b06a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b07a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b07b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b07c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b07d.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b07e.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b08a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b09a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b09c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b10a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b11a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b11b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b13a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b14a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b14b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b14c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b14d.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b15a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b16a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b17a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b18a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b18b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b19a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b23a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b24a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b24b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b26b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b27a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b28a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b29a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b30a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b31a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b32a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b33a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b34a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b34b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b34c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b35c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b38a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b39a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b40a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b41a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b42a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b43a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b44a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b45a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b45c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b47a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b48a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b48b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b50a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b54a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b57a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b62a.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b62b.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b62c.ada: Likewise.
+ * ada/acats-3/tests/c8/c87b62d.tst: Likewise.
+ * ada/acats-3/tests/c9/c910001.a: Likewise.
+ * ada/acats-3/tests/c9/c910002.a: Likewise.
+ * ada/acats-3/tests/c9/c910003.a: Likewise.
+ * ada/acats-3/tests/c9/c91004b.ada: Likewise.
+ * ada/acats-3/tests/c9/c91004c.ada: Likewise.
+ * ada/acats-3/tests/c9/c91006a.ada: Likewise.
+ * ada/acats-3/tests/c9/c91007a.ada: Likewise.
+ * ada/acats-3/tests/c9/c920001.a: Likewise.
+ * ada/acats-3/tests/c9/c92002a.ada: Likewise.
+ * ada/acats-3/tests/c9/c92003a.ada: Likewise.
+ * ada/acats-3/tests/c9/c92005a.ada: Likewise.
+ * ada/acats-3/tests/c9/c92005b.ada: Likewise.
+ * ada/acats-3/tests/c9/c92006a.ada: Likewise.
+ * ada/acats-3/tests/c9/c930001.a: Likewise.
+ * ada/acats-3/tests/c9/c93001a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93002a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93003a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93004a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93004b.ada: Likewise.
+ * ada/acats-3/tests/c9/c93004c.ada: Likewise.
+ * ada/acats-3/tests/c9/c93004d.ada: Likewise.
+ * ada/acats-3/tests/c9/c93004f.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005b.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005c.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005d.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005e.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005f.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005g.ada: Likewise.
+ * ada/acats-3/tests/c9/c93005h.ada: Likewise.
+ * ada/acats-3/tests/c9/c93006a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93007a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93008a.ada: Likewise.
+ * ada/acats-3/tests/c9/c93008b.ada: Likewise.
+ * ada/acats-3/tests/c9/c940001.a: Likewise.
+ * ada/acats-3/tests/c9/c940002.a: Likewise.
+ * ada/acats-3/tests/c9/c940004.a: Likewise.
+ * ada/acats-3/tests/c9/c940005.a: Likewise.
+ * ada/acats-3/tests/c9/c940006.a: Likewise.
+ * ada/acats-3/tests/c9/c940007.a: Likewise.
+ * ada/acats-3/tests/c9/c940010.a: Likewise.
+ * ada/acats-3/tests/c9/c940011.a: Likewise.
+ * ada/acats-3/tests/c9/c940012.a: Likewise.
+ * ada/acats-3/tests/c9/c940013.a: Likewise.
+ * ada/acats-3/tests/c9/c940014.a: Likewise.
+ * ada/acats-3/tests/c9/c940015.a: Likewise.
+ * ada/acats-3/tests/c9/c940016.a: Likewise.
+ * ada/acats-3/tests/c9/c940017.a: Likewise.
+ * ada/acats-3/tests/c9/c94001a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94001b.ada: Likewise.
+ * ada/acats-3/tests/c9/c94001c.ada: Likewise.
+ * ada/acats-3/tests/c9/c94001e.ada: Likewise.
+ * ada/acats-3/tests/c9/c94001f.ada: Likewise.
+ * ada/acats-3/tests/c9/c94001g.ada: Likewise.
+ * ada/acats-3/tests/c9/c94002a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94002b.ada: Likewise.
+ * ada/acats-3/tests/c9/c94002d.ada: Likewise.
+ * ada/acats-3/tests/c9/c94002e.ada: Likewise.
+ * ada/acats-3/tests/c9/c94002f.ada: Likewise.
+ * ada/acats-3/tests/c9/c94002g.ada: Likewise.
+ * ada/acats-3/tests/c9/c94004a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94004b.ada: Likewise.
+ * ada/acats-3/tests/c9/c94004c.ada: Likewise.
+ * ada/acats-3/tests/c9/c94005a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94005b.ada: Likewise.
+ * ada/acats-3/tests/c9/c94006a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94007a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94007b.ada: Likewise.
+ * ada/acats-3/tests/c9/c94008a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94008b.ada: Likewise.
+ * ada/acats-3/tests/c9/c94008c.ada: Likewise.
+ * ada/acats-3/tests/c9/c94008d.ada: Likewise.
+ * ada/acats-3/tests/c9/c94010a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94011a.ada: Likewise.
+ * ada/acats-3/tests/c9/c94020a.ada: Likewise.
+ * ada/acats-3/tests/c9/c940a03.a: Likewise.
+ * ada/acats-3/tests/c9/c95008a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95009a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95010a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95011a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95012a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95021a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95022a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95022b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95033a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95033b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95034a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95034b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95035a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95040a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95040b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95040c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95040d.ada: Likewise.
+ * ada/acats-3/tests/c9/c95041a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95065a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95065b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95065c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95065d.ada: Likewise.
+ * ada/acats-3/tests/c9/c95065e.ada: Likewise.
+ * ada/acats-3/tests/c9/c95065f.ada: Likewise.
+ * ada/acats-3/tests/c9/c95066a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95067a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95071a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95072a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95072b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95073a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95074c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95076a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95078a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95080b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95082g.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085d.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085e.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085f.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085g.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085h.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085i.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085j.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085k.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085l.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085m.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085n.ada: Likewise.
+ * ada/acats-3/tests/c9/c95085o.ada: Likewise.
+ * ada/acats-3/tests/c9/c95086a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95086b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95086c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95086d.ada: Likewise.
+ * ada/acats-3/tests/c9/c95086e.ada: Likewise.
+ * ada/acats-3/tests/c9/c95086f.ada: Likewise.
+ * ada/acats-3/tests/c9/c95087a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95087b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95087c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95087d.ada: Likewise.
+ * ada/acats-3/tests/c9/c95088a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95089a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95090a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95092a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95093a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95095a.ada: Likewise.
+ * ada/acats-3/tests/c9/c95095b.ada: Likewise.
+ * ada/acats-3/tests/c9/c95095c.ada: Likewise.
+ * ada/acats-3/tests/c9/c95095d.ada: Likewise.
+ * ada/acats-3/tests/c9/c95095e.ada: Likewise.
+ * ada/acats-3/tests/c9/c951001.a: Likewise.
+ * ada/acats-3/tests/c9/c951002.a: Likewise.
+ * ada/acats-3/tests/c9/c953001.a: Likewise.
+ * ada/acats-3/tests/c9/c953002.a: Likewise.
+ * ada/acats-3/tests/c9/c953003.a: Likewise.
+ * ada/acats-3/tests/c9/c954001.a: Likewise.
+ * ada/acats-3/tests/c9/c954010.a: Likewise.
+ * ada/acats-3/tests/c9/c954011.a: Likewise.
+ * ada/acats-3/tests/c9/c954012.a: Likewise.
+ * ada/acats-3/tests/c9/c954013.a: Likewise.
+ * ada/acats-3/tests/c9/c954014.a: Likewise.
+ * ada/acats-3/tests/c9/c954015.a: Likewise.
+ * ada/acats-3/tests/c9/c954016.a: Likewise.
+ * ada/acats-3/tests/c9/c954017.a: Likewise.
+ * ada/acats-3/tests/c9/c954018.a: Likewise.
+ * ada/acats-3/tests/c9/c954019.a: Likewise.
+ * ada/acats-3/tests/c9/c954020.a: Likewise.
+ * ada/acats-3/tests/c9/c954021.a: Likewise.
+ * ada/acats-3/tests/c9/c954022.a: Likewise.
+ * ada/acats-3/tests/c9/c954023.a: Likewise.
+ * ada/acats-3/tests/c9/c954024.a: Likewise.
+ * ada/acats-3/tests/c9/c954025.a: Likewise.
+ * ada/acats-3/tests/c9/c954026.a: Likewise.
+ * ada/acats-3/tests/c9/c954a01.a: Likewise.
+ * ada/acats-3/tests/c9/c954a02.a: Likewise.
+ * ada/acats-3/tests/c9/c954a03.a: Likewise.
+ * ada/acats-3/tests/c9/c960001.a: Likewise.
+ * ada/acats-3/tests/c9/c960002.a: Likewise.
+ * ada/acats-3/tests/c9/c960004.a: Likewise.
+ * ada/acats-3/tests/c9/c96001a.ada: Likewise.
+ * ada/acats-3/tests/c9/c96004a.ada: Likewise.
+ * ada/acats-3/tests/c9/c96005a.ada: Likewise.
+ * ada/acats-3/tests/c9/c96005b.tst: Likewise.
+ * ada/acats-3/tests/c9/c96005d.ada: Likewise.
+ * ada/acats-3/tests/c9/c96005f.ada: Likewise.
+ * ada/acats-3/tests/c9/c96006a.ada: Likewise.
+ * ada/acats-3/tests/c9/c96007a.ada: Likewise.
+ * ada/acats-3/tests/c9/c96008a.ada: Likewise.
+ * ada/acats-3/tests/c9/c96008b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97112a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97113a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97114a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97115a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97116a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97117a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97117b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97117c.ada: Likewise.
+ * ada/acats-3/tests/c9/c97118a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97120a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97120b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201c.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201d.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201e.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201g.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201h.ada: Likewise.
+ * ada/acats-3/tests/c9/c97201x.ada: Likewise.
+ * ada/acats-3/tests/c9/c97202a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97203a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97203b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97203c.ada: Likewise.
+ * ada/acats-3/tests/c9/c97204a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97204b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97205a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97205b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97301a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97301b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97301c.ada: Likewise.
+ * ada/acats-3/tests/c9/c97301d.ada: Likewise.
+ * ada/acats-3/tests/c9/c97301e.ada: Likewise.
+ * ada/acats-3/tests/c9/c97302a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97303a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97303b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97303c.ada: Likewise.
+ * ada/acats-3/tests/c9/c97304a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97304b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97305a.ada: Likewise.
+ * ada/acats-3/tests/c9/c97305b.ada: Likewise.
+ * ada/acats-3/tests/c9/c97305c.ada: Likewise.
+ * ada/acats-3/tests/c9/c97305d.ada: Likewise.
+ * ada/acats-3/tests/c9/c97307a.ada: Likewise.
+ * ada/acats-3/tests/c9/c974001.a: Likewise.
+ * ada/acats-3/tests/c9/c974002.a: Likewise.
+ * ada/acats-3/tests/c9/c974003.a: Likewise.
+ * ada/acats-3/tests/c9/c974004.a: Likewise.
+ * ada/acats-3/tests/c9/c974005.a: Likewise.
+ * ada/acats-3/tests/c9/c974006.a: Likewise.
+ * ada/acats-3/tests/c9/c974007.a: Likewise.
+ * ada/acats-3/tests/c9/c974008.a: Likewise.
+ * ada/acats-3/tests/c9/c974009.a: Likewise.
+ * ada/acats-3/tests/c9/c974010.a: Likewise.
+ * ada/acats-3/tests/c9/c974011.a: Likewise.
+ * ada/acats-3/tests/c9/c974012.a: Likewise.
+ * ada/acats-3/tests/c9/c974013.a: Likewise.
+ * ada/acats-3/tests/c9/c974014.a: Likewise.
+ * ada/acats-3/tests/c9/c980001.a: Likewise.
+ * ada/acats-3/tests/c9/c980002.a: Likewise.
+ * ada/acats-3/tests/c9/c980003.a: Likewise.
+ * ada/acats-3/tests/c9/c990001.a: Likewise.
+ * ada/acats-3/tests/c9/c99005a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a003a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a004a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a007a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a009a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a009c.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a009f.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a009g.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a009h.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a010a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a011a.ada: Likewise.
+ * ada/acats-3/tests/c9/c9a011b.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1003a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1004a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1005a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1006a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a5.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1011a6.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012b0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012b2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1012b4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a5.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1013a6.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1014a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1014a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1014a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1014a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1020e0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1020e1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1020e2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1020e3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a5.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1022a6.ada: Likewise.
+ * ada/acats-3/tests/ca/ca11001.a: Likewise.
+ * ada/acats-3/tests/ca/ca11002.a: Likewise.
+ * ada/acats-3/tests/ca/ca11003.a: Likewise.
+ * ada/acats-3/tests/ca/ca110040.a: Likewise.
+ * ada/acats-3/tests/ca/ca110041.a: Likewise.
+ * ada/acats-3/tests/ca/ca110042.am: Likewise.
+ * ada/acats-3/tests/ca/ca110050.a: Likewise.
+ * ada/acats-3/tests/ca/ca110051.am: Likewise.
+ * ada/acats-3/tests/ca/ca11006.a: Likewise.
+ * ada/acats-3/tests/ca/ca11007.a: Likewise.
+ * ada/acats-3/tests/ca/ca11008.a: Likewise.
+ * ada/acats-3/tests/ca/ca11009.a: Likewise.
+ * ada/acats-3/tests/ca/ca11010.a: Likewise.
+ * ada/acats-3/tests/ca/ca11011.a: Likewise.
+ * ada/acats-3/tests/ca/ca11012.a: Likewise.
+ * ada/acats-3/tests/ca/ca11013.a: Likewise.
+ * ada/acats-3/tests/ca/ca11014.a: Likewise.
+ * ada/acats-3/tests/ca/ca11015.a: Likewise.
+ * ada/acats-3/tests/ca/ca11016.a: Likewise.
+ * ada/acats-3/tests/ca/ca11017.a: Likewise.
+ * ada/acats-3/tests/ca/ca11018.a: Likewise.
+ * ada/acats-3/tests/ca/ca11019.a: Likewise.
+ * ada/acats-3/tests/ca/ca11020.a: Likewise.
+ * ada/acats-3/tests/ca/ca11021.a: Likewise.
+ * ada/acats-3/tests/ca/ca11022.a: Likewise.
+ * ada/acats-3/tests/ca/ca110230.a: Likewise.
+ * ada/acats-3/tests/ca/ca110231.a: Likewise.
+ * ada/acats-3/tests/ca/ca110232.am: Likewise.
+ * ada/acats-3/tests/ca/ca1102a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1102a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1102a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1106a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1108a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca1108b.ada: Likewise.
+ * ada/acats-3/tests/ca/ca11a01.a: Likewise.
+ * ada/acats-3/tests/ca/ca11a02.a: Likewise.
+ * ada/acats-3/tests/ca/ca11b01.a: Likewise.
+ * ada/acats-3/tests/ca/ca11b02.a: Likewise.
+ * ada/acats-3/tests/ca/ca11c01.a: Likewise.
+ * ada/acats-3/tests/ca/ca11c02.a: Likewise.
+ * ada/acats-3/tests/ca/ca11c03.a: Likewise.
+ * ada/acats-3/tests/ca/ca11d010.a: Likewise.
+ * ada/acats-3/tests/ca/ca11d011.a: Likewise.
+ * ada/acats-3/tests/ca/ca11d012.a: Likewise.
+ * ada/acats-3/tests/ca/ca11d013.am: Likewise.
+ * ada/acats-3/tests/ca/ca11d02.a: Likewise.
+ * ada/acats-3/tests/ca/ca11d03.a: Likewise.
+ * ada/acats-3/tests/ca/ca120010.a: Likewise.
+ * ada/acats-3/tests/ca/ca120011.a: Likewise.
+ * ada/acats-3/tests/ca/ca120012.am: Likewise.
+ * ada/acats-3/tests/ca/ca12002.a: Likewise.
+ * ada/acats-3/tests/ca/ca13001.a: Likewise.
+ * ada/acats-3/tests/ca/ca13002.a: Likewise.
+ * ada/acats-3/tests/ca/ca13003.a: Likewise.
+ * ada/acats-3/tests/ca/ca13a01.a: Likewise.
+ * ada/acats-3/tests/ca/ca13a02.a: Likewise.
+ * ada/acats-3/tests/ca/ca140230.a: Likewise.
+ * ada/acats-3/tests/ca/ca140231.a: Likewise.
+ * ada/acats-3/tests/ca/ca140232.am: Likewise.
+ * ada/acats-3/tests/ca/ca140233.a: Likewise.
+ * ada/acats-3/tests/ca/ca140280.a: Likewise.
+ * ada/acats-3/tests/ca/ca140281.a: Likewise.
+ * ada/acats-3/tests/ca/ca140282.a: Likewise.
+ * ada/acats-3/tests/ca/ca140283.am: Likewise.
+ * ada/acats-3/tests/ca/ca15003.a: Likewise.
+ * ada/acats-3/tests/ca/ca200020.a: Likewise.
+ * ada/acats-3/tests/ca/ca200021.a: Likewise.
+ * ada/acats-3/tests/ca/ca200022.am: Likewise.
+ * ada/acats-3/tests/ca/ca200030.a: Likewise.
+ * ada/acats-3/tests/ca/ca200031.am: Likewise.
+ * ada/acats-3/tests/ca/ca2001h0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2001h1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2001h2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2001h3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2002a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2002a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2002a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2003a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2003a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2004a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2004a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2004a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2004a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2004a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2007a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2007a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2007a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2007a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2008a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2008a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2008a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009c0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009c1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009d.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009f0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009f1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2009f2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca2011b.ada: Likewise.
+ * ada/acats-3/tests/ca/ca21001.a: Likewise.
+ * ada/acats-3/tests/ca/ca3011a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca3011a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca3011a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca3011a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca3011a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a5.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003a6.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003b0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003b1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003b2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003b3.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003b4.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5003b5.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5004a.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5004b0.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5004b1.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5004b2.ada: Likewise.
+ * ada/acats-3/tests/ca/ca5006a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb10002.a: Likewise.
+ * ada/acats-3/tests/cb/cb1001a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb1004a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb1005a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb1010a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb1010c.ada: Likewise.
+ * ada/acats-3/tests/cb/cb1010d.ada: Likewise.
+ * ada/acats-3/tests/cb/cb20001.a: Likewise.
+ * ada/acats-3/tests/cb/cb20003.a: Likewise.
+ * ada/acats-3/tests/cb/cb20004.a: Likewise.
+ * ada/acats-3/tests/cb/cb20005.a: Likewise.
+ * ada/acats-3/tests/cb/cb20006.a: Likewise.
+ * ada/acats-3/tests/cb/cb20007.a: Likewise.
+ * ada/acats-3/tests/cb/cb2004a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb2005a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb2006a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb2007a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb20a02.a: Likewise.
+ * ada/acats-3/tests/cb/cb30001.a: Likewise.
+ * ada/acats-3/tests/cb/cb3003a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb3003b.ada: Likewise.
+ * ada/acats-3/tests/cb/cb3004a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb40005.a: Likewise.
+ * ada/acats-3/tests/cb/cb4001a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4002a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4003a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4004a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4005a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4006a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4007a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4008a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4009a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb4013a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb40a01.a: Likewise.
+ * ada/acats-3/tests/cb/cb40a020.a: Likewise.
+ * ada/acats-3/tests/cb/cb40a021.am: Likewise.
+ * ada/acats-3/tests/cb/cb40a030.a: Likewise.
+ * ada/acats-3/tests/cb/cb40a031.am: Likewise.
+ * ada/acats-3/tests/cb/cb40a04.a: Likewise.
+ * ada/acats-3/tests/cb/cb41001.a: Likewise.
+ * ada/acats-3/tests/cb/cb41002.a: Likewise.
+ * ada/acats-3/tests/cb/cb41003.a: Likewise.
+ * ada/acats-3/tests/cb/cb41004.a: Likewise.
+ * ada/acats-3/tests/cb/cb42001.a: Likewise.
+ * ada/acats-3/tests/cb/cb42002.a: Likewise.
+ * ada/acats-3/tests/cb/cb42003.a: Likewise.
+ * ada/acats-3/tests/cb/cb5001a.ada: Likewise.
+ * ada/acats-3/tests/cb/cb5001b.ada: Likewise.
+ * ada/acats-3/tests/cb/cb5002a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1004a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1005b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1010a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1010b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1018a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1104c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1107b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1111a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1204a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1207b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1220a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1221a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1221b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1221c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1221d.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1222a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1223a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1224a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1225a.tst: Likewise.
+ * ada/acats-3/tests/cc/cc1226b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1227a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1301a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1302a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1304a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1304b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1307a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1307b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1308a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1310a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1311a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc1311b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc2002a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc30001.a: Likewise.
+ * ada/acats-3/tests/cc/cc30002.a: Likewise.
+ * ada/acats-3/tests/cc/cc30003.a: Likewise.
+ * ada/acats-3/tests/cc/cc30004.a: Likewise.
+ * ada/acats-3/tests/cc/cc3004a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3007a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3007b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3011a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3011d.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3012a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3015a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3016b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3016c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3016f.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3016i.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3017b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3017c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019b0.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019b1.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019b2.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019c0.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019c1.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3019c2.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3106b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3120a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3120b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3121a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3123a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3125a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3125b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3125c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3125d.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3126a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3127a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3128a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3203a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3207b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3220a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3221a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3222a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3223a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3224a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3225a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3230a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3231a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3232a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3233a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3234a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3235a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3236a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3240a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3305a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3305b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3305c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3305d.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3601a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3601c.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3602a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3603a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3605a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3606a.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3606b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc3607b.ada: Likewise.
+ * ada/acats-3/tests/cc/cc40001.a: Likewise.
+ * ada/acats-3/tests/cc/cc50001.a: Likewise.
+ * ada/acats-3/tests/cc/cc50a01.a: Likewise.
+ * ada/acats-3/tests/cc/cc50a02.a: Likewise.
+ * ada/acats-3/tests/cc/cc51001.a: Likewise.
+ * ada/acats-3/tests/cc/cc51002.a: Likewise.
+ * ada/acats-3/tests/cc/cc51003.a: Likewise.
+ * ada/acats-3/tests/cc/cc51004.a: Likewise.
+ * ada/acats-3/tests/cc/cc51006.a: Likewise.
+ * ada/acats-3/tests/cc/cc51007.a: Likewise.
+ * ada/acats-3/tests/cc/cc51008.a: Likewise.
+ * ada/acats-3/tests/cc/cc51a01.a: Likewise.
+ * ada/acats-3/tests/cc/cc51b03.a: Likewise.
+ * ada/acats-3/tests/cc/cc51d01.a: Likewise.
+ * ada/acats-3/tests/cc/cc51d02.a: Likewise.
+ * ada/acats-3/tests/cc/cc54001.a: Likewise.
+ * ada/acats-3/tests/cc/cc54002.a: Likewise.
+ * ada/acats-3/tests/cc/cc54003.a: Likewise.
+ * ada/acats-3/tests/cc/cc54004.a: Likewise.
+ * ada/acats-3/tests/cc/cc60001.a: Likewise.
+ * ada/acats-3/tests/cc/cc70001.a: Likewise.
+ * ada/acats-3/tests/cc/cc70002.a: Likewise.
+ * ada/acats-3/tests/cc/cc70003.a: Likewise.
+ * ada/acats-3/tests/cc/cc70a01.a: Likewise.
+ * ada/acats-3/tests/cc/cc70a02.a: Likewise.
+ * ada/acats-3/tests/cc/cc70b01.a: Likewise.
+ * ada/acats-3/tests/cc/cc70b02.a: Likewise.
+ * ada/acats-3/tests/cc/cc70c01.a: Likewise.
+ * ada/acats-3/tests/cc/cc70c02.a: Likewise.
+ * ada/acats-3/tests/cd/cd10001.a: Likewise.
+ * ada/acats-3/tests/cd/cd10002.a: Likewise.
+ * ada/acats-3/tests/cd/cd1009a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009h.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009j.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009k.tst: Likewise.
+ * ada/acats-3/tests/cd/cd1009l.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009m.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009n.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009o.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009p.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009q.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009r.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009s.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009t.tst: Likewise.
+ * ada/acats-3/tests/cd/cd1009u.tst: Likewise.
+ * ada/acats-3/tests/cd/cd1009v.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009w.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009x.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009y.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1009z.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03e.tst: Likewise.
+ * ada/acats-3/tests/cd/cd1c03f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03h.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c03i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c04a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c04d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c04e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd1c06a.tst: Likewise.
+ * ada/acats-3/tests/cd/cd20001.a: Likewise.
+ * ada/acats-3/tests/cd/cd2a21a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a21c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a21e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a22a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a22e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a22i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a22j.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a23a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a23e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a24a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a24e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a24i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a24j.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a31a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a31c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a31e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a32a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a32c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a32e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a32g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a32i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a32j.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a51a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a53a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a53e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2a83c.tst: Likewise.
+ * ada/acats-3/tests/cd/cd2a91c.tst: Likewise.
+ * ada/acats-3/tests/cd/cd2b11b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2b11d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2b11e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2b11f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2b16a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2c11a.tst: Likewise.
+ * ada/acats-3/tests/cd/cd2c11d.tst: Likewise.
+ * ada/acats-3/tests/cd/cd2d11a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd2d13a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd30001.a: Likewise.
+ * ada/acats-3/tests/cd/cd30002.a: Likewise.
+ * ada/acats-3/tests/cd/cd30003.a: Likewise.
+ * ada/acats-3/tests/cd/cd30004.a: Likewise.
+ * ada/acats-3/tests/cd/cd300050.am: Likewise.
+ * ada/acats-3/tests/cd/cd300051.c: Likewise.
+ * ada/acats-3/tests/cd/cd30008.a: Likewise.
+ * ada/acats-3/tests/cd/cd30009.a: Likewise.
+ * ada/acats-3/tests/cd/cd30011.a: Likewise.
+ * ada/acats-3/tests/cd/cd30012.a: Likewise.
+ * ada/acats-3/tests/cd/cd3014a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3014c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3014d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3014f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015h.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3015k.ada: Likewise.
+ * ada/acats-3/tests/cd/cd3021a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd33001.a: Likewise.
+ * ada/acats-3/tests/cd/cd33002.a: Likewise.
+ * ada/acats-3/tests/cd/cd40001.a: Likewise.
+ * ada/acats-3/tests/cd/cd4031a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd4041a.tst: Likewise.
+ * ada/acats-3/tests/cd/cd4051a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd4051b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd4051c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd4051d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003h.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5003i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011k.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011m.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011q.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5011s.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5012a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5012b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5012e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5012f.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5012i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5012m.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013k.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013m.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5013o.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014e.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014g.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014i.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014k.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014m.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014o.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014t.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014v.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014x.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014y.ada: Likewise.
+ * ada/acats-3/tests/cd/cd5014z.ada: Likewise.
+ * ada/acats-3/tests/cd/cd70001.a: Likewise.
+ * ada/acats-3/tests/cd/cd7002a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd7007b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd7101d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd7101e.dep: Likewise.
+ * ada/acats-3/tests/cd/cd7101f.dep: Likewise.
+ * ada/acats-3/tests/cd/cd7101g.tst: Likewise.
+ * ada/acats-3/tests/cd/cd7103d.ada: Likewise.
+ * ada/acats-3/tests/cd/cd7202a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd7204b.ada: Likewise.
+ * ada/acats-3/tests/cd/cd7204c.ada: Likewise.
+ * ada/acats-3/tests/cd/cd72a01.a: Likewise.
+ * ada/acats-3/tests/cd/cd72a02.a: Likewise.
+ * ada/acats-3/tests/cd/cd7305a.ada: Likewise.
+ * ada/acats-3/tests/cd/cd90001.a: Likewise.
+ * ada/acats-3/tests/cd/cd92001.a: Likewise.
+ * ada/acats-3/tests/cd/cda201a.ada: Likewise.
+ * ada/acats-3/tests/cd/cda201b.ada: Likewise.
+ * ada/acats-3/tests/cd/cda201c.ada: Likewise.
+ * ada/acats-3/tests/cd/cda201e.ada: Likewise.
+ * ada/acats-3/tests/cd/cdb0001.a: Likewise.
+ * ada/acats-3/tests/cd/cdb0002.a: Likewise.
+ * ada/acats-3/tests/cd/cdb0a01.a: Likewise.
+ * ada/acats-3/tests/cd/cdb0a02.a: Likewise.
+ * ada/acats-3/tests/cd/cdd1001.a: Likewise.
+ * ada/acats-3/tests/cd/cdd2001.a: Likewise.
+ * ada/acats-3/tests/cd/cdd2a01.a: Likewise.
+ * ada/acats-3/tests/cd/cdd2a02.a: Likewise.
+ * ada/acats-3/tests/cd/cdd2a03.a: Likewise.
+ * ada/acats-3/tests/cd/cdd2b01.a: Likewise.
+ * ada/acats-3/tests/cd/cdd2b03.a: Likewise.
+ * ada/acats-3/tests/cd/cde0001.a: Likewise.
+ * ada/acats-3/tests/ce/ce2102a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102c.tst: Likewise.
+ * ada/acats-3/tests/ce/ce2102d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102h.tst: Likewise.
+ * ada/acats-3/tests/ce/ce2102i.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102j.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102k.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102l.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102m.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102n.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102o.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102p.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102q.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102r.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102s.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102t.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102u.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102v.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102w.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102x.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2102y.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2103a.tst: Likewise.
+ * ada/acats-3/tests/ce/ce2103b.tst: Likewise.
+ * ada/acats-3/tests/ce/ce2103c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2103d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2104a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2104b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2104c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2104d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2106a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2106b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2108e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2108f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2108g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2108h.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2109a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2109b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2109c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2110a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2110c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2111i.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201d.dep: Likewise.
+ * ada/acats-3/tests/ce/ce2201e.dep: Likewise.
+ * ada/acats-3/tests/ce/ce2201f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201h.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201i.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201j.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201k.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201l.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201m.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2201n.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2202a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2203a.tst: Likewise.
+ * ada/acats-3/tests/ce/ce2204a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2204b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2204c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2204d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2205a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2206a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2208b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401h.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401i.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401j.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401k.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2401l.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2402a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2403a.tst: Likewise.
+ * ada/acats-3/tests/ce/ce2404a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2404b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2405b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2406a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2407a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2407b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2408a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2408b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2409a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2409b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2410a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2410b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce2411a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3002b.tst: Likewise.
+ * ada/acats-3/tests/ce/ce3002c.tst: Likewise.
+ * ada/acats-3/tests/ce/ce3002d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3002f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102b.tst: Likewise.
+ * ada/acats-3/tests/ce/ce3102d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102h.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102i.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102j.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3102k.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3103a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3104a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3104b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3104c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3106a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3106b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3107a.tst: Likewise.
+ * ada/acats-3/tests/ce/ce3107b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3108a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3108b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3110a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3112c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3112d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3114a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3115a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3201a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3202a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3206a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3207a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3301a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3302a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3303a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3304a.tst: Likewise.
+ * ada/acats-3/tests/ce/ce3305a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3306a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3401a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3402a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3402c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3402d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3402e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3403a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3403b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3403c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3403d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3403e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3403f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3404a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3404b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3404c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3404d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3405a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3405c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3405d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3406a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3406b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3406c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3406d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3407a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3407b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3407c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3408a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3408b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3408c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3409a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3409b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3409c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3409d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3409e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3410a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3410b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3410c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3410d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3410e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3411a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3411c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3412a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3413a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3413b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3413c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3414a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3601a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3602a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3602b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3602c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3602d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3603a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3604a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3604b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3605a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3605b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3605c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3605d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3605e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3606a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3606b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3701a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704m.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704n.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3704o.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3705a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3705b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3705c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3705d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3705e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3706c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3706d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3706f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3706g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3707a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3708a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3801a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3801b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804h.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804i.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804j.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804m.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804o.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3804p.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3805a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3805b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806g.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3806h.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3809a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3809b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3810a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3810b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3815a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3901a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3902b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3904a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3904b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3905a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3905b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3905c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3905l.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3906a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3906b.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3906c.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3906d.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3906e.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3906f.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3907a.ada: Likewise.
+ * ada/acats-3/tests/ce/ce3908a.ada: Likewise.
+ * ada/acats-3/tests/cxa/cxa3001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa3002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa3003.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa3004.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4003.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4004.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4005.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4006.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4007.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4008.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4009.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4010.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4011.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4012.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4013.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4014.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4015.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4016.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4017.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4018.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4019.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4020.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4021.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4022.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4023.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4024.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4025.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4026.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4027.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4028.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4029.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4030.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4031.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4032.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4033.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4034.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa4037.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5011.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5012.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5013.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5015.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5016.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a01.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a02.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a03.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a04.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a05.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a06.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a07.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a08.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a09.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa5a10.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa8001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa8002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa8003.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa9001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxa9002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa003.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa004.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa005.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa006.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa007.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa008.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa009.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa010.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa011.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa012.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa013.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa014.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa015.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa016.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa017.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa018.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa019.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa020.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa021.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaa022.a: Likewise.
+ * ada/acats-3/tests/cxa/cxab001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxab002.au: Likewise.
+ * ada/acats-3/tests/cxa/cxab003.au: Likewise.
+ * ada/acats-3/tests/cxa/cxab004.au: Likewise.
+ * ada/acats-3/tests/cxa/cxab005.au: Likewise.
+ * ada/acats-3/tests/cxa/cxac001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxac002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxac003.a: Likewise.
+ * ada/acats-3/tests/cxa/cxac004.a: Likewise.
+ * ada/acats-3/tests/cxa/cxac005.a: Likewise.
+ * ada/acats-3/tests/cxa/cxac006.a: Likewise.
+ * ada/acats-3/tests/cxa/cxac008.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaca01.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaca02.a: Likewise.
+ * ada/acats-3/tests/cxa/cxacb01.a: Likewise.
+ * ada/acats-3/tests/cxa/cxacb02.a: Likewise.
+ * ada/acats-3/tests/cxa/cxacc01.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaf001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxag001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxah001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxah002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxai001.a: Likewise.
+ * ada/acats-3/tests/cxa/cxai002.a: Likewise.
+ * ada/acats-3/tests/cxa/cxai003.a: Likewise.
+ * ada/acats-3/tests/cxa/cxai004.a: Likewise.
+ * ada/acats-3/tests/cxa/cxai005.a: Likewise.
+ * ada/acats-3/tests/cxa/cxai006.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaia01.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaia02.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaia03.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaia04.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaia05.a: Likewise.
+ * ada/acats-3/tests/cxa/cxaia06.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb2001.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb2002.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb2003.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3001.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3002.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3003.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb30040.c: Likewise.
+ * ada/acats-3/tests/cxb/cxb30041.am: Likewise.
+ * ada/acats-3/tests/cxb/cxb3005.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb30060.c: Likewise.
+ * ada/acats-3/tests/cxb/cxb30061.am: Likewise.
+ * ada/acats-3/tests/cxb/cxb3007.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3008.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3009.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3010.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3011.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3012.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb30130.c: Likewise.
+ * ada/acats-3/tests/cxb/cxb30131.c: Likewise.
+ * ada/acats-3/tests/cxb/cxb30132.am: Likewise.
+ * ada/acats-3/tests/cxb/cxb3014.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3015.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb3016.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb30170.c: Likewise.
+ * ada/acats-3/tests/cxb/cxb30171.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb30172.am: Likewise.
+ * ada/acats-3/tests/cxb/cxb30230.c: Likewise.
+ * ada/acats-3/tests/cxb/cxb30231.am: Likewise.
+ * ada/acats-3/tests/cxb/cxb4001.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4002.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4003.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4004.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4005.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4006.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4007.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb4008.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb5001.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb5002.a: Likewise.
+ * ada/acats-3/tests/cxb/cxb5003.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf1001.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2001.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2002.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2003.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2004.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2005.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2a01.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf2a02.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3001.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3002.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3003.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3004.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a01.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a02.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a03.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a04.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a05.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a06.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a07.a: Likewise.
+ * ada/acats-3/tests/cxf/cxf3a08.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg1001.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg1002.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg1003.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg1004.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg1005.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2001.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2002.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2003.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2004.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2005.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2006.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2007.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2008.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2009.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2010.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2011.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2012.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2013.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2014.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2015.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2016.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2017.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2018.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2019.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2020.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2021.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2022.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2023.a: Likewise.
+ * ada/acats-3/tests/cxg/cxg2024.a: Likewise.
+ * ada/acats-3/tests/cxh/cxh3001.a: Likewise.
+ * ada/acats-3/tests/cxh/cxh3002.a: Likewise.
+ * ada/acats-3/tests/cxh/cxh30030.a: Likewise.
+ * ada/acats-3/tests/cxh/cxh30031.am: Likewise.
+ * ada/acats-3/tests/cz/cz1101a.ada: Likewise.
+ * ada/acats-3/tests/cz/cz1102a.ada: Likewise.
+ * ada/acats-3/tests/cz/cz1103a.ada: Likewise.
+ * ada/acats-3/tests/d/d4a002a.ada: Likewise.
+ * ada/acats-3/tests/d/d4a002b.ada: Likewise.
+ * ada/acats-3/tests/d/d4a004a.ada: Likewise.
+ * ada/acats-3/tests/d/d4a004b.ada: Likewise.
+ * ada/acats-3/tests/e/e28002b.ada: Likewise.
+ * ada/acats-3/tests/e/e28005d.ada: Likewise.
+ * ada/acats-3/tests/e/e52103y.ada: Likewise.
+ * ada/acats-3/tests/e/eb4011a.ada: Likewise.
+ * ada/acats-3/tests/e/eb4012a.ada: Likewise.
+ * ada/acats-3/tests/e/eb4014a.ada: Likewise.
+ * ada/acats-3/tests/e/ee3203a.ada: Likewise.
+ * ada/acats-3/tests/e/ee3204a.ada: Likewise.
+ * ada/acats-3/tests/e/ee3402b.ada: Likewise.
+ * ada/acats-3/tests/e/ee3409f.ada: Likewise.
+ * ada/acats-3/tests/e/ee3412c.ada: Likewise.
+ * ada/acats-3/tests/l/la140010.a: Likewise.
+ * ada/acats-3/tests/l/la140011.am: Likewise.
+ * ada/acats-3/tests/l/la140012.a: Likewise.
+ * ada/acats-3/tests/l/la140020.a: Likewise.
+ * ada/acats-3/tests/l/la140021.am: Likewise.
+ * ada/acats-3/tests/l/la140022.a: Likewise.
+ * ada/acats-3/tests/l/la140030.a: Likewise.
+ * ada/acats-3/tests/l/la140031.a: Likewise.
+ * ada/acats-3/tests/l/la140032.am: Likewise.
+ * ada/acats-3/tests/l/la140033.a: Likewise.
+ * ada/acats-3/tests/l/la140040.a: Likewise.
+ * ada/acats-3/tests/l/la140041.am: Likewise.
+ * ada/acats-3/tests/l/la140042.a: Likewise.
+ * ada/acats-3/tests/l/la140050.a: Likewise.
+ * ada/acats-3/tests/l/la140051.a: Likewise.
+ * ada/acats-3/tests/l/la140052.am: Likewise.
+ * ada/acats-3/tests/l/la140053.a: Likewise.
+ * ada/acats-3/tests/l/la140060.a: Likewise.
+ * ada/acats-3/tests/l/la140061.a: Likewise.
+ * ada/acats-3/tests/l/la140062.am: Likewise.
+ * ada/acats-3/tests/l/la140063.a: Likewise.
+ * ada/acats-3/tests/l/la140070.a: Likewise.
+ * ada/acats-3/tests/l/la140071.a: Likewise.
+ * ada/acats-3/tests/l/la140072.am: Likewise.
+ * ada/acats-3/tests/l/la140073.a: Likewise.
+ * ada/acats-3/tests/l/la140080.a: Likewise.
+ * ada/acats-3/tests/l/la140081.a: Likewise.
+ * ada/acats-3/tests/l/la140082.am: Likewise.
+ * ada/acats-3/tests/l/la140083.a: Likewise.
+ * ada/acats-3/tests/l/la140090.a: Likewise.
+ * ada/acats-3/tests/l/la140091.a: Likewise.
+ * ada/acats-3/tests/l/la140092.am: Likewise.
+ * ada/acats-3/tests/l/la140093.a: Likewise.
+ * ada/acats-3/tests/l/la140100.a: Likewise.
+ * ada/acats-3/tests/l/la140101.a: Likewise.
+ * ada/acats-3/tests/l/la140102.am: Likewise.
+ * ada/acats-3/tests/l/la140103.a: Likewise.
+ * ada/acats-3/tests/l/la140110.a: Likewise.
+ * ada/acats-3/tests/l/la140111.a: Likewise.
+ * ada/acats-3/tests/l/la140112.am: Likewise.
+ * ada/acats-3/tests/l/la140113.a: Likewise.
+ * ada/acats-3/tests/l/la140120.a: Likewise.
+ * ada/acats-3/tests/l/la140121.a: Likewise.
+ * ada/acats-3/tests/l/la140122.am: Likewise.
+ * ada/acats-3/tests/l/la140123.a: Likewise.
+ * ada/acats-3/tests/l/la140130.a: Likewise.
+ * ada/acats-3/tests/l/la140131.a: Likewise.
+ * ada/acats-3/tests/l/la140132.am: Likewise.
+ * ada/acats-3/tests/l/la140133.a: Likewise.
+ * ada/acats-3/tests/l/la140140.a: Likewise.
+ * ada/acats-3/tests/l/la140141.a: Likewise.
+ * ada/acats-3/tests/l/la140142.am: Likewise.
+ * ada/acats-3/tests/l/la140143.a: Likewise.
+ * ada/acats-3/tests/l/la140150.a: Likewise.
+ * ada/acats-3/tests/l/la140151.a: Likewise.
+ * ada/acats-3/tests/l/la140152.am: Likewise.
+ * ada/acats-3/tests/l/la140153.a: Likewise.
+ * ada/acats-3/tests/l/la140160.a: Likewise.
+ * ada/acats-3/tests/l/la140161.a: Likewise.
+ * ada/acats-3/tests/l/la140162.am: Likewise.
+ * ada/acats-3/tests/l/la140163.a: Likewise.
+ * ada/acats-3/tests/l/la140170.a: Likewise.
+ * ada/acats-3/tests/l/la140171.a: Likewise.
+ * ada/acats-3/tests/l/la140172.am: Likewise.
+ * ada/acats-3/tests/l/la140173.a: Likewise.
+ * ada/acats-3/tests/l/la140180.a: Likewise.
+ * ada/acats-3/tests/l/la140181.a: Likewise.
+ * ada/acats-3/tests/l/la140182.am: Likewise.
+ * ada/acats-3/tests/l/la140183.a: Likewise.
+ * ada/acats-3/tests/l/la140190.a: Likewise.
+ * ada/acats-3/tests/l/la140191.a: Likewise.
+ * ada/acats-3/tests/l/la140192.am: Likewise.
+ * ada/acats-3/tests/l/la140193.a: Likewise.
+ * ada/acats-3/tests/l/la140200.a: Likewise.
+ * ada/acats-3/tests/l/la140201.a: Likewise.
+ * ada/acats-3/tests/l/la140202.am: Likewise.
+ * ada/acats-3/tests/l/la140203.a: Likewise.
+ * ada/acats-3/tests/l/la140210.a: Likewise.
+ * ada/acats-3/tests/l/la140211.am: Likewise.
+ * ada/acats-3/tests/l/la140212.a: Likewise.
+ * ada/acats-3/tests/l/la140220.a: Likewise.
+ * ada/acats-3/tests/l/la140221.am: Likewise.
+ * ada/acats-3/tests/l/la140222.a: Likewise.
+ * ada/acats-3/tests/l/la140240.a: Likewise.
+ * ada/acats-3/tests/l/la140241.a: Likewise.
+ * ada/acats-3/tests/l/la140242.am: Likewise.
+ * ada/acats-3/tests/l/la140243.a: Likewise.
+ * ada/acats-3/tests/l/la140250.a: Likewise.
+ * ada/acats-3/tests/l/la140251.am: Likewise.
+ * ada/acats-3/tests/l/la140252.a: Likewise.
+ * ada/acats-3/tests/l/la140260.a: Likewise.
+ * ada/acats-3/tests/l/la140261.a: Likewise.
+ * ada/acats-3/tests/l/la140262.am: Likewise.
+ * ada/acats-3/tests/l/la140263.a: Likewise.
+ * ada/acats-3/tests/l/la140270.a: Likewise.
+ * ada/acats-3/tests/l/la140271.a: Likewise.
+ * ada/acats-3/tests/l/la140272.am: Likewise.
+ * ada/acats-3/tests/l/la140273.a: Likewise.
+
+2025-05-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ada/acats-2/run_all.sh: Minor tweaks in comments.
+ * ada/acats-2/tests/cd/cd300050.am: Upgrade to 2.6K revision.
+ * ada/acats-2/tests/cd/cd300051.c: Likewise.
+ * ada/acats-2/tests/cxa/cxa4001.a: Likewise.
+ * ada/acats-2/tests/cxb/cxb30131.c: Likewise.
+
+2025-05-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ada/acats/*: Rename into ada/acats-2/*.
+ * ada/acats-2/run_all.sh: Adjust to above renaming.
+ * ada/acats-2/support/impdefc.a: New file.
+ * ada/acats-2/elabd.lst: New file.
+ * ada/acats-2/floatstore.lst: New file.
+ * ada/acats-2/norun.lst: New file.
+ * ada/acats-2/run_acats.sh: New file.
+ * ada/acats-2/run_test.exp: New file.
+ * ada/acats-2/stackcheck.lst: New file.
+ * ada/acats-2/support/acats26.lst: New file.
+ * ada/acats-2/support/checkfil.ada: New file.
+ * ada/acats-2/support/enumchek.ada: New file.
+ * ada/acats-2/support/f340a000.a: New file.
+ * ada/acats-2/support/f340a001.a: New file.
+ * ada/acats-2/support/f341a00.a: New file.
+ * ada/acats-2/support/f390a00.a: New file.
+ * ada/acats-2/support/f392a00.a: New file.
+ * ada/acats-2/support/f392c00.a: New file.
+ * ada/acats-2/support/f392d00.a: New file.
+ * ada/acats-2/support/f393a00.a: New file.
+ * ada/acats-2/support/f393b00.a: New file.
+ * ada/acats-2/support/f3a2a00.a: New file.
+ * ada/acats-2/support/f460a00.a: New file.
+ * ada/acats-2/support/f730a000.a: New file.
+ * ada/acats-2/support/f730a001.a: New file.
+ * ada/acats-2/support/f731a00.a: New file.
+ * ada/acats-2/support/f940a00.a: New file.
+ * ada/acats-2/support/f954a00.a: New file.
+ * ada/acats-2/support/fa11a00.a: New file.
+ * ada/acats-2/support/fa11b00.a: New file.
+ * ada/acats-2/support/fa11c00.a: New file.
+ * ada/acats-2/support/fa11d00.a: New file.
+ * ada/acats-2/support/fa13a00.a: New file.
+ * ada/acats-2/support/fa13b00.a: New file.
+ * ada/acats-2/support/fa21a00.a: New file.
+ * ada/acats-2/support/fb20a00.a: New file.
+ * ada/acats-2/support/fb40a00.a: New file.
+ * ada/acats-2/support/fc50a00.a: New file.
+ * ada/acats-2/support/fc51a00.a: New file.
+ * ada/acats-2/support/fc51b00.a: New file.
+ * ada/acats-2/support/fc51c00.a: New file.
+ * ada/acats-2/support/fc51d00.a: New file.
+ * ada/acats-2/support/fc54a00.a: New file.
+ * ada/acats-2/support/fc70a00.a: New file.
+ * ada/acats-2/support/fc70b00.a: New file.
+ * ada/acats-2/support/fc70c00.a: New file.
+ * ada/acats-2/support/fcndecl.ada: New file.
+ * ada/acats-2/support/fd72a00.a: New file.
+ * ada/acats-2/support/fdb0a00.a: New file.
+ * ada/acats-2/support/fdd2a00.a: New file.
+ * ada/acats-2/support/fxa5a00.a: New file.
+ * ada/acats-2/support/fxaca00.a: New file.
+ * ada/acats-2/support/fxacb00.a: New file.
+ * ada/acats-2/support/fxacc00.a: New file.
+ * ada/acats-2/support/fxc6a00.a: New file.
+ * ada/acats-2/support/fxe2a00.a: New file.
+ * ada/acats-2/support/fxf2a00.a: New file.
+ * ada/acats-2/support/fxf3a00.a: New file.
+ * ada/acats-2/support/impbit.adb: New file.
+ * ada/acats-2/support/impdef.a: New file.
+ * ada/acats-2/support/impdefd.a: New file.
+ * ada/acats-2/support/impdefe.a: New file.
+ * ada/acats-2/support/impdefg.a: New file.
+ * ada/acats-2/support/impdefh.a: New file.
+ * ada/acats-2/support/lencheck.ada: New file.
+ * ada/acats-2/support/macro.dfs: New file.
+ * ada/acats-2/support/macrodef.adb: New file.
+ * ada/acats-2/support/macrosub.ada: New file.
+ * ada/acats-2/support/repbody.ada: New file.
+ * ada/acats-2/support/repspec.ada: New file.
+ * ada/acats-2/support/spprt13s.tst: New file.
+ * ada/acats-2/support/tctouch.ada: New file.
+ * ada/acats-2/support/tsttests.dat: New file.
+ * ada/acats-2/support/widechr.a: New file.
+ * ada/acats-2/tests/a/a22006b.ada: New file.
+ * ada/acats-2/tests/a/a22006c.ada: New file.
+ * ada/acats-2/tests/a/a22006d.ada: New file.
+ * ada/acats-2/tests/a/a26007a.tst: New file.
+ * ada/acats-2/tests/a/a27003a.ada: New file.
+ * ada/acats-2/tests/a/a29003a.ada: New file.
+ * ada/acats-2/tests/a/a2a031a.ada: New file.
+ * ada/acats-2/tests/a/a33003a.ada: New file.
+ * ada/acats-2/tests/a/a34017c.ada: New file.
+ * ada/acats-2/tests/a/a35101b.ada: New file.
+ * ada/acats-2/tests/a/a35402a.ada: New file.
+ * ada/acats-2/tests/a/a35801f.ada: New file.
+ * ada/acats-2/tests/a/a35902c.ada: New file.
+ * ada/acats-2/tests/a/a38106d.ada: New file.
+ * ada/acats-2/tests/a/a38106e.ada: New file.
+ * ada/acats-2/tests/a/a49027a.ada: New file.
+ * ada/acats-2/tests/a/a49027b.ada: New file.
+ * ada/acats-2/tests/a/a49027c.ada: New file.
+ * ada/acats-2/tests/a/a54b01a.ada: New file.
+ * ada/acats-2/tests/a/a54b02a.ada: New file.
+ * ada/acats-2/tests/a/a55b12a.ada: New file.
+ * ada/acats-2/tests/a/a55b13a.ada: New file.
+ * ada/acats-2/tests/a/a55b14a.ada: New file.
+ * ada/acats-2/tests/a/a71004a.ada: New file.
+ * ada/acats-2/tests/a/a73001i.ada: New file.
+ * ada/acats-2/tests/a/a73001j.ada: New file.
+ * ada/acats-2/tests/a/a74105b.ada: New file.
+ * ada/acats-2/tests/a/a74106a.ada: New file.
+ * ada/acats-2/tests/a/a74106b.ada: New file.
+ * ada/acats-2/tests/a/a74106c.ada: New file.
+ * ada/acats-2/tests/a/a74205e.ada: New file.
+ * ada/acats-2/tests/a/a74205f.ada: New file.
+ * ada/acats-2/tests/a/a83009a.ada: New file.
+ * ada/acats-2/tests/a/a83009b.ada: New file.
+ * ada/acats-2/tests/a/a83a02a.ada: New file.
+ * ada/acats-2/tests/a/a83a02b.ada: New file.
+ * ada/acats-2/tests/a/a83a06a.ada: New file.
+ * ada/acats-2/tests/a/a83a08a.ada: New file.
+ * ada/acats-2/tests/a/a83c01c.ada: New file.
+ * ada/acats-2/tests/a/a83c01h.ada: New file.
+ * ada/acats-2/tests/a/a83c01i.ada: New file.
+ * ada/acats-2/tests/a/a85007d.ada: New file.
+ * ada/acats-2/tests/a/a85013b.ada: New file.
+ * ada/acats-2/tests/a/a87b59a.ada: New file.
+ * ada/acats-2/tests/a/a95001c.ada: New file.
+ * ada/acats-2/tests/a/a95074d.ada: New file.
+ * ada/acats-2/tests/a/a97106a.ada: New file.
+ * ada/acats-2/tests/a/a99006a.ada: New file.
+ * ada/acats-2/tests/a/aa2010a.ada: New file.
+ * ada/acats-2/tests/a/aa2012a.ada: New file.
+ * ada/acats-2/tests/a/ac1015b.ada: New file.
+ * ada/acats-2/tests/a/ac3106a.ada: New file.
+ * ada/acats-2/tests/a/ac3206a.ada: New file.
+ * ada/acats-2/tests/a/ac3207a.ada: New file.
+ * ada/acats-2/tests/a/ad7001b.ada: New file.
+ * ada/acats-2/tests/a/ad7001c0.ada: New file.
+ * ada/acats-2/tests/a/ad7001c1.ada: New file.
+ * ada/acats-2/tests/a/ad7001d0.ada: New file.
+ * ada/acats-2/tests/a/ad7001d1.ada: New file.
+ * ada/acats-2/tests/a/ad7006a.ada: New file.
+ * ada/acats-2/tests/a/ad7101a.ada: New file.
+ * ada/acats-2/tests/a/ad7101c.ada: New file.
+ * ada/acats-2/tests/a/ad7102a.ada: New file.
+ * ada/acats-2/tests/a/ad7103a.ada: New file.
+ * ada/acats-2/tests/a/ad7103c.ada: New file.
+ * ada/acats-2/tests/a/ad7104a.ada: New file.
+ * ada/acats-2/tests/a/ad7201a.ada: New file.
+ * ada/acats-2/tests/a/ad7203b.ada: New file.
+ * ada/acats-2/tests/a/ad7205b.ada: New file.
+ * ada/acats-2/tests/a/ad8011a.tst: New file.
+ * ada/acats-2/tests/a/ada101a.ada: New file.
+ * ada/acats-2/tests/a/ae2113a.ada: New file.
+ * ada/acats-2/tests/a/ae2113b.ada: New file.
+ * ada/acats-2/tests/a/ae3002g.ada: New file.
+ * ada/acats-2/tests/a/ae3101a.ada: New file.
+ * ada/acats-2/tests/a/ae3702a.ada: New file.
+ * ada/acats-2/tests/a/ae3709a.ada: New file.
+ * ada/acats-2/tests/c2/c23001a.ada: New file.
+ * ada/acats-2/tests/c2/c23003a.tst: New file.
+ * ada/acats-2/tests/c2/c23003b.tst: New file.
+ * ada/acats-2/tests/c2/c23003g.tst: New file.
+ * ada/acats-2/tests/c2/c23003i.tst: New file.
+ * ada/acats-2/tests/c2/c23006a.ada: New file.
+ * ada/acats-2/tests/c2/c23006b.ada: New file.
+ * ada/acats-2/tests/c2/c23006c.ada: New file.
+ * ada/acats-2/tests/c2/c23006d.ada: New file.
+ * ada/acats-2/tests/c2/c23006e.ada: New file.
+ * ada/acats-2/tests/c2/c23006f.ada: New file.
+ * ada/acats-2/tests/c2/c23006g.ada: New file.
+ * ada/acats-2/tests/c2/c24002d.ada: New file.
+ * ada/acats-2/tests/c2/c24003a.ada: New file.
+ * ada/acats-2/tests/c2/c24003b.ada: New file.
+ * ada/acats-2/tests/c2/c24003c.ada: New file.
+ * ada/acats-2/tests/c2/c24106a.ada: New file.
+ * ada/acats-2/tests/c2/c24202d.ada: New file.
+ * ada/acats-2/tests/c2/c24203a.ada: New file.
+ * ada/acats-2/tests/c2/c24203b.ada: New file.
+ * ada/acats-2/tests/c2/c24207a.ada: New file.
+ * ada/acats-2/tests/c2/c24211a.ada: New file.
+ * ada/acats-2/tests/c2/c250001.aw: New file.
+ * ada/acats-2/tests/c2/c250002.aw: New file.
+ * ada/acats-2/tests/c2/c25001a.ada: New file.
+ * ada/acats-2/tests/c2/c25001b.ada: New file.
+ * ada/acats-2/tests/c2/c26006a.ada: New file.
+ * ada/acats-2/tests/c2/c26008a.ada: New file.
+ * ada/acats-2/tests/c2/c2a001a.ada: New file.
+ * ada/acats-2/tests/c2/c2a001b.ada: New file.
+ * ada/acats-2/tests/c2/c2a001c.ada: New file.
+ * ada/acats-2/tests/c2/c2a002a.ada: New file.
+ * ada/acats-2/tests/c2/c2a008a.ada: New file.
+ * ada/acats-2/tests/c2/c2a021b.ada: New file.
+ * ada/acats-2/tests/c3/c32001a.ada: New file.
+ * ada/acats-2/tests/c3/c32001b.ada: New file.
+ * ada/acats-2/tests/c3/c32001c.ada: New file.
+ * ada/acats-2/tests/c3/c32001d.ada: New file.
+ * ada/acats-2/tests/c3/c32001e.ada: New file.
+ * ada/acats-2/tests/c3/c32107a.ada: New file.
+ * ada/acats-2/tests/c3/c32107c.ada: New file.
+ * ada/acats-2/tests/c3/c32108a.ada: New file.
+ * ada/acats-2/tests/c3/c32108b.ada: New file.
+ * ada/acats-2/tests/c3/c32111a.ada: New file.
+ * ada/acats-2/tests/c3/c32111b.ada: New file.
+ * ada/acats-2/tests/c3/c32112b.ada: New file.
+ * ada/acats-2/tests/c3/c32113a.ada: New file.
+ * ada/acats-2/tests/c3/c32115a.ada: New file.
+ * ada/acats-2/tests/c3/c32115b.ada: New file.
+ * ada/acats-2/tests/c3/c330001.a: New file.
+ * ada/acats-2/tests/c3/c330002.a: New file.
+ * ada/acats-2/tests/c3/c332001.a: New file.
+ * ada/acats-2/tests/c3/c340001.a: New file.
+ * ada/acats-2/tests/c3/c34001a.ada: New file.
+ * ada/acats-2/tests/c3/c34001c.ada: New file.
+ * ada/acats-2/tests/c3/c34001d.ada: New file.
+ * ada/acats-2/tests/c3/c34001f.ada: New file.
+ * ada/acats-2/tests/c3/c34002a.ada: New file.
+ * ada/acats-2/tests/c3/c34002c.ada: New file.
+ * ada/acats-2/tests/c3/c34003a.ada: New file.
+ * ada/acats-2/tests/c3/c34003c.ada: New file.
+ * ada/acats-2/tests/c3/c34004a.ada: New file.
+ * ada/acats-2/tests/c3/c34004c.ada: New file.
+ * ada/acats-2/tests/c3/c34005a.ada: New file.
+ * ada/acats-2/tests/c3/c34005c.ada: New file.
+ * ada/acats-2/tests/c3/c34005d.ada: New file.
+ * ada/acats-2/tests/c3/c34005f.ada: New file.
+ * ada/acats-2/tests/c3/c34005g.ada: New file.
+ * ada/acats-2/tests/c3/c34005i.ada: New file.
+ * ada/acats-2/tests/c3/c34005j.ada: New file.
+ * ada/acats-2/tests/c3/c34005l.ada: New file.
+ * ada/acats-2/tests/c3/c34005m.ada: New file.
+ * ada/acats-2/tests/c3/c34005o.ada: New file.
+ * ada/acats-2/tests/c3/c34005p.ada: New file.
+ * ada/acats-2/tests/c3/c34005r.ada: New file.
+ * ada/acats-2/tests/c3/c34005s.ada: New file.
+ * ada/acats-2/tests/c3/c34005u.ada: New file.
+ * ada/acats-2/tests/c3/c34005v.ada: New file.
+ * ada/acats-2/tests/c3/c34006a.ada: New file.
+ * ada/acats-2/tests/c3/c34006d.ada: New file.
+ * ada/acats-2/tests/c3/c34006f.ada: New file.
+ * ada/acats-2/tests/c3/c34006g.ada: New file.
+ * ada/acats-2/tests/c3/c34006j.ada: New file.
+ * ada/acats-2/tests/c3/c34006l.ada: New file.
+ * ada/acats-2/tests/c3/c34007a.ada: New file.
+ * ada/acats-2/tests/c3/c34007d.ada: New file.
+ * ada/acats-2/tests/c3/c34007f.ada: New file.
+ * ada/acats-2/tests/c3/c34007g.ada: New file.
+ * ada/acats-2/tests/c3/c34007i.ada: New file.
+ * ada/acats-2/tests/c3/c34007j.ada: New file.
+ * ada/acats-2/tests/c3/c34007m.ada: New file.
+ * ada/acats-2/tests/c3/c34007p.ada: New file.
+ * ada/acats-2/tests/c3/c34007r.ada: New file.
+ * ada/acats-2/tests/c3/c34007s.ada: New file.
+ * ada/acats-2/tests/c3/c34007u.ada: New file.
+ * ada/acats-2/tests/c3/c34007v.ada: New file.
+ * ada/acats-2/tests/c3/c34008a.ada: New file.
+ * ada/acats-2/tests/c3/c34009a.ada: New file.
+ * ada/acats-2/tests/c3/c34009d.ada: New file.
+ * ada/acats-2/tests/c3/c34009f.ada: New file.
+ * ada/acats-2/tests/c3/c34009g.ada: New file.
+ * ada/acats-2/tests/c3/c34009j.ada: New file.
+ * ada/acats-2/tests/c3/c34009l.ada: New file.
+ * ada/acats-2/tests/c3/c34011b.ada: New file.
+ * ada/acats-2/tests/c3/c34012a.ada: New file.
+ * ada/acats-2/tests/c3/c34014a.ada: New file.
+ * ada/acats-2/tests/c3/c34014c.ada: New file.
+ * ada/acats-2/tests/c3/c34014e.ada: New file.
+ * ada/acats-2/tests/c3/c34014g.ada: New file.
+ * ada/acats-2/tests/c3/c34014h.ada: New file.
+ * ada/acats-2/tests/c3/c34014n.ada: New file.
+ * ada/acats-2/tests/c3/c34014p.ada: New file.
+ * ada/acats-2/tests/c3/c34014r.ada: New file.
+ * ada/acats-2/tests/c3/c34014t.ada: New file.
+ * ada/acats-2/tests/c3/c34014u.ada: New file.
+ * ada/acats-2/tests/c3/c34018a.ada: New file.
+ * ada/acats-2/tests/c3/c340a01.a: New file.
+ * ada/acats-2/tests/c3/c340a02.a: New file.
+ * ada/acats-2/tests/c3/c341a01.a: New file.
+ * ada/acats-2/tests/c3/c341a02.a: New file.
+ * ada/acats-2/tests/c3/c341a03.a: New file.
+ * ada/acats-2/tests/c3/c341a04.a: New file.
+ * ada/acats-2/tests/c3/c35003a.ada: New file.
+ * ada/acats-2/tests/c3/c35003b.ada: New file.
+ * ada/acats-2/tests/c3/c35003d.ada: New file.
+ * ada/acats-2/tests/c3/c35102a.ada: New file.
+ * ada/acats-2/tests/c3/c352001.a: New file.
+ * ada/acats-2/tests/c3/c354002.a: New file.
+ * ada/acats-2/tests/c3/c354003.a: New file.
+ * ada/acats-2/tests/c3/c35502a.ada: New file.
+ * ada/acats-2/tests/c3/c35502b.ada: New file.
+ * ada/acats-2/tests/c3/c35502c.ada: New file.
+ * ada/acats-2/tests/c3/c35502d.tst: New file.
+ * ada/acats-2/tests/c3/c35502e.ada: New file.
+ * ada/acats-2/tests/c3/c35502f.tst: New file.
+ * ada/acats-2/tests/c3/c35502g.ada: New file.
+ * ada/acats-2/tests/c3/c35502h.ada: New file.
+ * ada/acats-2/tests/c3/c35502i.ada: New file.
+ * ada/acats-2/tests/c3/c35502j.ada: New file.
+ * ada/acats-2/tests/c3/c35502k.ada: New file.
+ * ada/acats-2/tests/c3/c35502l.ada: New file.
+ * ada/acats-2/tests/c3/c35502m.ada: New file.
+ * ada/acats-2/tests/c3/c35502n.ada: New file.
+ * ada/acats-2/tests/c3/c35502o.ada: New file.
+ * ada/acats-2/tests/c3/c35502p.ada: New file.
+ * ada/acats-2/tests/c3/c35503a.ada: New file.
+ * ada/acats-2/tests/c3/c35503b.ada: New file.
+ * ada/acats-2/tests/c3/c35503c.ada: New file.
+ * ada/acats-2/tests/c3/c35503d.tst: New file.
+ * ada/acats-2/tests/c3/c35503e.ada: New file.
+ * ada/acats-2/tests/c3/c35503f.tst: New file.
+ * ada/acats-2/tests/c3/c35503g.ada: New file.
+ * ada/acats-2/tests/c3/c35503h.ada: New file.
+ * ada/acats-2/tests/c3/c35503k.ada: New file.
+ * ada/acats-2/tests/c3/c35503l.ada: New file.
+ * ada/acats-2/tests/c3/c35503o.ada: New file.
+ * ada/acats-2/tests/c3/c35503p.ada: New file.
+ * ada/acats-2/tests/c3/c35504a.ada: New file.
+ * ada/acats-2/tests/c3/c35504b.ada: New file.
+ * ada/acats-2/tests/c3/c35505c.ada: New file.
+ * ada/acats-2/tests/c3/c35505e.ada: New file.
+ * ada/acats-2/tests/c3/c35505f.ada: New file.
+ * ada/acats-2/tests/c3/c35507a.ada: New file.
+ * ada/acats-2/tests/c3/c35507b.ada: New file.
+ * ada/acats-2/tests/c3/c35507c.ada: New file.
+ * ada/acats-2/tests/c3/c35507e.ada: New file.
+ * ada/acats-2/tests/c3/c35507g.ada: New file.
+ * ada/acats-2/tests/c3/c35507h.ada: New file.
+ * ada/acats-2/tests/c3/c35507i.ada: New file.
+ * ada/acats-2/tests/c3/c35507j.ada: New file.
+ * ada/acats-2/tests/c3/c35507k.ada: New file.
+ * ada/acats-2/tests/c3/c35507l.ada: New file.
+ * ada/acats-2/tests/c3/c35507m.ada: New file.
+ * ada/acats-2/tests/c3/c35507n.ada: New file.
+ * ada/acats-2/tests/c3/c35507o.ada: New file.
+ * ada/acats-2/tests/c3/c35507p.ada: New file.
+ * ada/acats-2/tests/c3/c35508a.ada: New file.
+ * ada/acats-2/tests/c3/c35508b.ada: New file.
+ * ada/acats-2/tests/c3/c35508c.ada: New file.
+ * ada/acats-2/tests/c3/c35508e.ada: New file.
+ * ada/acats-2/tests/c3/c35508g.ada: New file.
+ * ada/acats-2/tests/c3/c35508h.ada: New file.
+ * ada/acats-2/tests/c3/c35508k.ada: New file.
+ * ada/acats-2/tests/c3/c35508l.ada: New file.
+ * ada/acats-2/tests/c3/c35508o.ada: New file.
+ * ada/acats-2/tests/c3/c35508p.ada: New file.
+ * ada/acats-2/tests/c3/c35703a.ada: New file.
+ * ada/acats-2/tests/c3/c35704a.ada: New file.
+ * ada/acats-2/tests/c3/c35704b.ada: New file.
+ * ada/acats-2/tests/c3/c35704c.ada: New file.
+ * ada/acats-2/tests/c3/c35704d.ada: New file.
+ * ada/acats-2/tests/c3/c35801d.ada: New file.
+ * ada/acats-2/tests/c3/c35902d.ada: New file.
+ * ada/acats-2/tests/c3/c35904a.ada: New file.
+ * ada/acats-2/tests/c3/c35904b.ada: New file.
+ * ada/acats-2/tests/c3/c35a02a.ada: New file.
+ * ada/acats-2/tests/c3/c35a05a.ada: New file.
+ * ada/acats-2/tests/c3/c35a05d.ada: New file.
+ * ada/acats-2/tests/c3/c35a05n.ada: New file.
+ * ada/acats-2/tests/c3/c35a05q.ada: New file.
+ * ada/acats-2/tests/c3/c35a07a.ada: New file.
+ * ada/acats-2/tests/c3/c35a07d.ada: New file.
+ * ada/acats-2/tests/c3/c35a08b.ada: New file.
+ * ada/acats-2/tests/c3/c360002.a: New file.
+ * ada/acats-2/tests/c3/c36104a.ada: New file.
+ * ada/acats-2/tests/c3/c36104b.ada: New file.
+ * ada/acats-2/tests/c3/c36172a.ada: New file.
+ * ada/acats-2/tests/c3/c36172b.ada: New file.
+ * ada/acats-2/tests/c3/c36172c.ada: New file.
+ * ada/acats-2/tests/c3/c36174a.ada: New file.
+ * ada/acats-2/tests/c3/c36180a.ada: New file.
+ * ada/acats-2/tests/c3/c36202c.ada: New file.
+ * ada/acats-2/tests/c3/c36203a.ada: New file.
+ * ada/acats-2/tests/c3/c36204a.ada: New file.
+ * ada/acats-2/tests/c3/c36204b.ada: New file.
+ * ada/acats-2/tests/c3/c36204c.ada: New file.
+ * ada/acats-2/tests/c3/c36204d.ada: New file.
+ * ada/acats-2/tests/c3/c36205a.ada: New file.
+ * ada/acats-2/tests/c3/c36205b.ada: New file.
+ * ada/acats-2/tests/c3/c36205c.ada: New file.
+ * ada/acats-2/tests/c3/c36205d.ada: New file.
+ * ada/acats-2/tests/c3/c36205e.ada: New file.
+ * ada/acats-2/tests/c3/c36205f.ada: New file.
+ * ada/acats-2/tests/c3/c36205g.ada: New file.
+ * ada/acats-2/tests/c3/c36205h.ada: New file.
+ * ada/acats-2/tests/c3/c36205i.ada: New file.
+ * ada/acats-2/tests/c3/c36205j.ada: New file.
+ * ada/acats-2/tests/c3/c36205k.ada: New file.
+ * ada/acats-2/tests/c3/c36205l.ada: New file.
+ * ada/acats-2/tests/c3/c36301a.ada: New file.
+ * ada/acats-2/tests/c3/c36301b.ada: New file.
+ * ada/acats-2/tests/c3/c36302a.ada: New file.
+ * ada/acats-2/tests/c3/c36304a.ada: New file.
+ * ada/acats-2/tests/c3/c36305a.ada: New file.
+ * ada/acats-2/tests/c3/c37002a.ada: New file.
+ * ada/acats-2/tests/c3/c37003a.ada: New file.
+ * ada/acats-2/tests/c3/c37003b.ada: New file.
+ * ada/acats-2/tests/c3/c37005a.ada: New file.
+ * ada/acats-2/tests/c3/c37006a.ada: New file.
+ * ada/acats-2/tests/c3/c37008a.ada: New file.
+ * ada/acats-2/tests/c3/c37008b.ada: New file.
+ * ada/acats-2/tests/c3/c37009a.ada: New file.
+ * ada/acats-2/tests/c3/c37010a.ada: New file.
+ * ada/acats-2/tests/c3/c37010b.ada: New file.
+ * ada/acats-2/tests/c3/c371001.a: New file.
+ * ada/acats-2/tests/c3/c371002.a: New file.
+ * ada/acats-2/tests/c3/c371003.a: New file.
+ * ada/acats-2/tests/c3/c37102b.ada: New file.
+ * ada/acats-2/tests/c3/c37103a.ada: New file.
+ * ada/acats-2/tests/c3/c37105a.ada: New file.
+ * ada/acats-2/tests/c3/c37107a.ada: New file.
+ * ada/acats-2/tests/c3/c37108b.ada: New file.
+ * ada/acats-2/tests/c3/c37206a.ada: New file.
+ * ada/acats-2/tests/c3/c37207a.ada: New file.
+ * ada/acats-2/tests/c3/c37208a.ada: New file.
+ * ada/acats-2/tests/c3/c37208b.ada: New file.
+ * ada/acats-2/tests/c3/c37209a.ada: New file.
+ * ada/acats-2/tests/c3/c37209b.ada: New file.
+ * ada/acats-2/tests/c3/c37210a.ada: New file.
+ * ada/acats-2/tests/c3/c37211a.ada: New file.
+ * ada/acats-2/tests/c3/c37211b.ada: New file.
+ * ada/acats-2/tests/c3/c37211c.ada: New file.
+ * ada/acats-2/tests/c3/c37211d.ada: New file.
+ * ada/acats-2/tests/c3/c37211e.ada: New file.
+ * ada/acats-2/tests/c3/c37213b.ada: New file.
+ * ada/acats-2/tests/c3/c37213d.ada: New file.
+ * ada/acats-2/tests/c3/c37213f.ada: New file.
+ * ada/acats-2/tests/c3/c37213h.ada: New file.
+ * ada/acats-2/tests/c3/c37213j.ada: New file.
+ * ada/acats-2/tests/c3/c37213k.ada: New file.
+ * ada/acats-2/tests/c3/c37213l.ada: New file.
+ * ada/acats-2/tests/c3/c37215b.ada: New file.
+ * ada/acats-2/tests/c3/c37215d.ada: New file.
+ * ada/acats-2/tests/c3/c37215f.ada: New file.
+ * ada/acats-2/tests/c3/c37215h.ada: New file.
+ * ada/acats-2/tests/c3/c37217a.ada: New file.
+ * ada/acats-2/tests/c3/c37217b.ada: New file.
+ * ada/acats-2/tests/c3/c37217c.ada: New file.
+ * ada/acats-2/tests/c3/c37304a.ada: New file.
+ * ada/acats-2/tests/c3/c37305a.ada: New file.
+ * ada/acats-2/tests/c3/c37306a.ada: New file.
+ * ada/acats-2/tests/c3/c37309a.ada: New file.
+ * ada/acats-2/tests/c3/c37310a.ada: New file.
+ * ada/acats-2/tests/c3/c37312a.ada: New file.
+ * ada/acats-2/tests/c3/c37402a.ada: New file.
+ * ada/acats-2/tests/c3/c37403a.ada: New file.
+ * ada/acats-2/tests/c3/c37404a.ada: New file.
+ * ada/acats-2/tests/c3/c37404b.ada: New file.
+ * ada/acats-2/tests/c3/c37405a.ada: New file.
+ * ada/acats-2/tests/c3/c37411a.ada: New file.
+ * ada/acats-2/tests/c3/c380001.a: New file.
+ * ada/acats-2/tests/c3/c380002.a: New file.
+ * ada/acats-2/tests/c3/c380003.a: New file.
+ * ada/acats-2/tests/c3/c380004.a: New file.
+ * ada/acats-2/tests/c3/c38002a.ada: New file.
+ * ada/acats-2/tests/c3/c38002b.ada: New file.
+ * ada/acats-2/tests/c3/c38005a.ada: New file.
+ * ada/acats-2/tests/c3/c38005b.ada: New file.
+ * ada/acats-2/tests/c3/c38005c.ada: New file.
+ * ada/acats-2/tests/c3/c38006a.ada: New file.
+ * ada/acats-2/tests/c3/c38102a.ada: New file.
+ * ada/acats-2/tests/c3/c38102b.ada: New file.
+ * ada/acats-2/tests/c3/c38102c.ada: New file.
+ * ada/acats-2/tests/c3/c38102d.ada: New file.
+ * ada/acats-2/tests/c3/c38102e.ada: New file.
+ * ada/acats-2/tests/c3/c38104a.ada: New file.
+ * ada/acats-2/tests/c3/c38107a.ada: New file.
+ * ada/acats-2/tests/c3/c38107b.ada: New file.
+ * ada/acats-2/tests/c3/c38108a.ada: New file.
+ * ada/acats-2/tests/c3/c38108b.ada: New file.
+ * ada/acats-2/tests/c3/c38108c0.ada: New file.
+ * ada/acats-2/tests/c3/c38108c1.ada: New file.
+ * ada/acats-2/tests/c3/c38108c2.ada: New file.
+ * ada/acats-2/tests/c3/c38108d0.ada: New file.
+ * ada/acats-2/tests/c3/c38108d1.ada: New file.
+ * ada/acats-2/tests/c3/c38202a.ada: New file.
+ * ada/acats-2/tests/c3/c3900010.a: New file.
+ * ada/acats-2/tests/c3/c3900011.am: New file.
+ * ada/acats-2/tests/c3/c390002.a: New file.
+ * ada/acats-2/tests/c3/c390003.a: New file.
+ * ada/acats-2/tests/c3/c390004.a: New file.
+ * ada/acats-2/tests/c3/c3900050.a: New file.
+ * ada/acats-2/tests/c3/c3900051.a: New file.
+ * ada/acats-2/tests/c3/c3900052.a: New file.
+ * ada/acats-2/tests/c3/c3900053.am: New file.
+ * ada/acats-2/tests/c3/c3900060.a: New file.
+ * ada/acats-2/tests/c3/c3900061.a: New file.
+ * ada/acats-2/tests/c3/c3900062.a: New file.
+ * ada/acats-2/tests/c3/c3900063.am: New file.
+ * ada/acats-2/tests/c3/c390007.a: New file.
+ * ada/acats-2/tests/c3/c390010.a: New file.
+ * ada/acats-2/tests/c3/c390011.a: New file.
+ * ada/acats-2/tests/c3/c39006a.ada: New file.
+ * ada/acats-2/tests/c3/c39006b.ada: New file.
+ * ada/acats-2/tests/c3/c39006c0.ada: New file.
+ * ada/acats-2/tests/c3/c39006c1.ada: New file.
+ * ada/acats-2/tests/c3/c39006d.ada: New file.
+ * ada/acats-2/tests/c3/c39006e.ada: New file.
+ * ada/acats-2/tests/c3/c39006f0.ada: New file.
+ * ada/acats-2/tests/c3/c39006f1.ada: New file.
+ * ada/acats-2/tests/c3/c39006f2.ada: New file.
+ * ada/acats-2/tests/c3/c39006f3.ada: New file.
+ * ada/acats-2/tests/c3/c39006g.ada: New file.
+ * ada/acats-2/tests/c3/c39007a.ada: New file.
+ * ada/acats-2/tests/c3/c39007b.ada: New file.
+ * ada/acats-2/tests/c3/c39008a.ada: New file.
+ * ada/acats-2/tests/c3/c39008b.ada: New file.
+ * ada/acats-2/tests/c3/c39008c.ada: New file.
+ * ada/acats-2/tests/c3/c390a010.a: New file.
+ * ada/acats-2/tests/c3/c390a011.am: New file.
+ * ada/acats-2/tests/c3/c390a020.a: New file.
+ * ada/acats-2/tests/c3/c390a021.a: New file.
+ * ada/acats-2/tests/c3/c390a022.am: New file.
+ * ada/acats-2/tests/c3/c390a030.a: New file.
+ * ada/acats-2/tests/c3/c390a031.am: New file.
+ * ada/acats-2/tests/c3/c391001.a: New file.
+ * ada/acats-2/tests/c3/c391002.a: New file.
+ * ada/acats-2/tests/c3/c392002.a: New file.
+ * ada/acats-2/tests/c3/c392003.a: New file.
+ * ada/acats-2/tests/c3/c392004.a: New file.
+ * ada/acats-2/tests/c3/c392005.a: New file.
+ * ada/acats-2/tests/c3/c392008.a: New file.
+ * ada/acats-2/tests/c3/c392010.a: New file.
+ * ada/acats-2/tests/c3/c392011.a: New file.
+ * ada/acats-2/tests/c3/c392013.a: New file.
+ * ada/acats-2/tests/c3/c392014.a: New file.
+ * ada/acats-2/tests/c3/c392a01.a: New file.
+ * ada/acats-2/tests/c3/c392c05.a: New file.
+ * ada/acats-2/tests/c3/c392c07.a: New file.
+ * ada/acats-2/tests/c3/c392d01.a: New file.
+ * ada/acats-2/tests/c3/c392d02.a: New file.
+ * ada/acats-2/tests/c3/c392d03.a: New file.
+ * ada/acats-2/tests/c3/c393001.a: New file.
+ * ada/acats-2/tests/c3/c393007.a: New file.
+ * ada/acats-2/tests/c3/c393008.a: New file.
+ * ada/acats-2/tests/c3/c393009.a: New file.
+ * ada/acats-2/tests/c3/c393010.a: New file.
+ * ada/acats-2/tests/c3/c393011.a: New file.
+ * ada/acats-2/tests/c3/c393012.a: New file.
+ * ada/acats-2/tests/c3/c393a02.a: New file.
+ * ada/acats-2/tests/c3/c393a03.a: New file.
+ * ada/acats-2/tests/c3/c393a05.a: New file.
+ * ada/acats-2/tests/c3/c393a06.a: New file.
+ * ada/acats-2/tests/c3/c393b12.a: New file.
+ * ada/acats-2/tests/c3/c393b13.a: New file.
+ * ada/acats-2/tests/c3/c393b14.a: New file.
+ * ada/acats-2/tests/c3/c3a0001.a: New file.
+ * ada/acats-2/tests/c3/c3a0002.a: New file.
+ * ada/acats-2/tests/c3/c3a0003.a: New file.
+ * ada/acats-2/tests/c3/c3a0004.a: New file.
+ * ada/acats-2/tests/c3/c3a0005.a: New file.
+ * ada/acats-2/tests/c3/c3a0006.a: New file.
+ * ada/acats-2/tests/c3/c3a0007.a: New file.
+ * ada/acats-2/tests/c3/c3a0008.a: New file.
+ * ada/acats-2/tests/c3/c3a0009.a: New file.
+ * ada/acats-2/tests/c3/c3a0010.a: New file.
+ * ada/acats-2/tests/c3/c3a0011.a: New file.
+ * ada/acats-2/tests/c3/c3a00120.a: New file.
+ * ada/acats-2/tests/c3/c3a00121.a: New file.
+ * ada/acats-2/tests/c3/c3a00122.am: New file.
+ * ada/acats-2/tests/c3/c3a0013.a: New file.
+ * ada/acats-2/tests/c3/c3a0014.a: New file.
+ * ada/acats-2/tests/c3/c3a0015.a: New file.
+ * ada/acats-2/tests/c3/c3a1001.a: New file.
+ * ada/acats-2/tests/c3/c3a1002.a: New file.
+ * ada/acats-2/tests/c3/c3a2001.a: New file.
+ * ada/acats-2/tests/c3/c3a2002.a: New file.
+ * ada/acats-2/tests/c3/c3a2003.a: New file.
+ * ada/acats-2/tests/c3/c3a2a01.a: New file.
+ * ada/acats-2/tests/c3/c3a2a02.a: New file.
+ * ada/acats-2/tests/c4/c410001.a: New file.
+ * ada/acats-2/tests/c4/c41101d.ada: New file.
+ * ada/acats-2/tests/c4/c41103a.ada: New file.
+ * ada/acats-2/tests/c4/c41103b.ada: New file.
+ * ada/acats-2/tests/c4/c41104a.ada: New file.
+ * ada/acats-2/tests/c4/c41105a.ada: New file.
+ * ada/acats-2/tests/c4/c41107a.ada: New file.
+ * ada/acats-2/tests/c4/c41201d.ada: New file.
+ * ada/acats-2/tests/c4/c41203a.ada: New file.
+ * ada/acats-2/tests/c4/c41203b.ada: New file.
+ * ada/acats-2/tests/c4/c41204a.ada: New file.
+ * ada/acats-2/tests/c4/c41205a.ada: New file.
+ * ada/acats-2/tests/c4/c41206a.ada: New file.
+ * ada/acats-2/tests/c4/c41207a.ada: New file.
+ * ada/acats-2/tests/c4/c41301a.ada: New file.
+ * ada/acats-2/tests/c4/c41303a.ada: New file.
+ * ada/acats-2/tests/c4/c41303b.ada: New file.
+ * ada/acats-2/tests/c4/c41303c.ada: New file.
+ * ada/acats-2/tests/c4/c41303e.ada: New file.
+ * ada/acats-2/tests/c4/c41303f.ada: New file.
+ * ada/acats-2/tests/c4/c41303g.ada: New file.
+ * ada/acats-2/tests/c4/c41303i.ada: New file.
+ * ada/acats-2/tests/c4/c41303j.ada: New file.
+ * ada/acats-2/tests/c4/c41303k.ada: New file.
+ * ada/acats-2/tests/c4/c41303m.ada: New file.
+ * ada/acats-2/tests/c4/c41303n.ada: New file.
+ * ada/acats-2/tests/c4/c41303o.ada: New file.
+ * ada/acats-2/tests/c4/c41303q.ada: New file.
+ * ada/acats-2/tests/c4/c41303r.ada: New file.
+ * ada/acats-2/tests/c4/c41303s.ada: New file.
+ * ada/acats-2/tests/c4/c41303u.ada: New file.
+ * ada/acats-2/tests/c4/c41303v.ada: New file.
+ * ada/acats-2/tests/c4/c41303w.ada: New file.
+ * ada/acats-2/tests/c4/c41304a.ada: New file.
+ * ada/acats-2/tests/c4/c41304b.ada: New file.
+ * ada/acats-2/tests/c4/c41306a.ada: New file.
+ * ada/acats-2/tests/c4/c41306b.ada: New file.
+ * ada/acats-2/tests/c4/c41306c.ada: New file.
+ * ada/acats-2/tests/c4/c41307d.ada: New file.
+ * ada/acats-2/tests/c4/c41309a.ada: New file.
+ * ada/acats-2/tests/c4/c41320a.ada: New file.
+ * ada/acats-2/tests/c4/c41321a.ada: New file.
+ * ada/acats-2/tests/c4/c41322a.ada: New file.
+ * ada/acats-2/tests/c4/c41323a.ada: New file.
+ * ada/acats-2/tests/c4/c41324a.ada: New file.
+ * ada/acats-2/tests/c4/c41325a.ada: New file.
+ * ada/acats-2/tests/c4/c41326a.ada: New file.
+ * ada/acats-2/tests/c4/c41327a.ada: New file.
+ * ada/acats-2/tests/c4/c41328a.ada: New file.
+ * ada/acats-2/tests/c4/c41401a.ada: New file.
+ * ada/acats-2/tests/c4/c41402a.ada: New file.
+ * ada/acats-2/tests/c4/c41404a.ada: New file.
+ * ada/acats-2/tests/c4/c420001.a: New file.
+ * ada/acats-2/tests/c4/c42006a.ada: New file.
+ * ada/acats-2/tests/c4/c42007e.ada: New file.
+ * ada/acats-2/tests/c4/c43003a.ada: New file.
+ * ada/acats-2/tests/c4/c43004a.ada: New file.
+ * ada/acats-2/tests/c4/c43004c.ada: New file.
+ * ada/acats-2/tests/c4/c431001.a: New file.
+ * ada/acats-2/tests/c4/c43103a.ada: New file.
+ * ada/acats-2/tests/c4/c43103b.ada: New file.
+ * ada/acats-2/tests/c4/c43104a.ada: New file.
+ * ada/acats-2/tests/c4/c43105a.ada: New file.
+ * ada/acats-2/tests/c4/c43105b.ada: New file.
+ * ada/acats-2/tests/c4/c43106a.ada: New file.
+ * ada/acats-2/tests/c4/c43107a.ada: New file.
+ * ada/acats-2/tests/c4/c43108a.ada: New file.
+ * ada/acats-2/tests/c4/c432001.a: New file.
+ * ada/acats-2/tests/c4/c432002.a: New file.
+ * ada/acats-2/tests/c4/c432003.a: New file.
+ * ada/acats-2/tests/c4/c432004.a: New file.
+ * ada/acats-2/tests/c4/c43204a.ada: New file.
+ * ada/acats-2/tests/c4/c43204c.ada: New file.
+ * ada/acats-2/tests/c4/c43204e.ada: New file.
+ * ada/acats-2/tests/c4/c43204f.ada: New file.
+ * ada/acats-2/tests/c4/c43204g.ada: New file.
+ * ada/acats-2/tests/c4/c43204h.ada: New file.
+ * ada/acats-2/tests/c4/c43204i.ada: New file.
+ * ada/acats-2/tests/c4/c43205a.ada: New file.
+ * ada/acats-2/tests/c4/c43205b.ada: New file.
+ * ada/acats-2/tests/c4/c43205c.ada: New file.
+ * ada/acats-2/tests/c4/c43205d.ada: New file.
+ * ada/acats-2/tests/c4/c43205e.ada: New file.
+ * ada/acats-2/tests/c4/c43205g.ada: New file.
+ * ada/acats-2/tests/c4/c43205h.ada: New file.
+ * ada/acats-2/tests/c4/c43205i.ada: New file.
+ * ada/acats-2/tests/c4/c43205j.ada: New file.
+ * ada/acats-2/tests/c4/c43205k.ada: New file.
+ * ada/acats-2/tests/c4/c43206a.ada: New file.
+ * ada/acats-2/tests/c4/c43207b.ada: New file.
+ * ada/acats-2/tests/c4/c43207d.ada: New file.
+ * ada/acats-2/tests/c4/c43208a.ada: New file.
+ * ada/acats-2/tests/c4/c43208b.ada: New file.
+ * ada/acats-2/tests/c4/c43209a.ada: New file.
+ * ada/acats-2/tests/c4/c43210a.ada: New file.
+ * ada/acats-2/tests/c4/c43211a.ada: New file.
+ * ada/acats-2/tests/c4/c43212a.ada: New file.
+ * ada/acats-2/tests/c4/c43212c.ada: New file.
+ * ada/acats-2/tests/c4/c43214a.ada: New file.
+ * ada/acats-2/tests/c4/c43214b.ada: New file.
+ * ada/acats-2/tests/c4/c43214c.ada: New file.
+ * ada/acats-2/tests/c4/c43214d.ada: New file.
+ * ada/acats-2/tests/c4/c43214e.ada: New file.
+ * ada/acats-2/tests/c4/c43214f.ada: New file.
+ * ada/acats-2/tests/c4/c43215a.ada: New file.
+ * ada/acats-2/tests/c4/c43215b.ada: New file.
+ * ada/acats-2/tests/c4/c43222a.ada: New file.
+ * ada/acats-2/tests/c4/c43224a.ada: New file.
+ * ada/acats-2/tests/c4/c433001.a: New file.
+ * ada/acats-2/tests/c4/c44003d.ada: New file.
+ * ada/acats-2/tests/c4/c44003f.ada: New file.
+ * ada/acats-2/tests/c4/c44003g.ada: New file.
+ * ada/acats-2/tests/c4/c450001.a: New file.
+ * ada/acats-2/tests/c4/c45112a.ada: New file.
+ * ada/acats-2/tests/c4/c45112b.ada: New file.
+ * ada/acats-2/tests/c4/c45113a.ada: New file.
+ * ada/acats-2/tests/c4/c45114b.ada: New file.
+ * ada/acats-2/tests/c4/c452001.a: New file.
+ * ada/acats-2/tests/c4/c45201a.ada: New file.
+ * ada/acats-2/tests/c4/c45201b.ada: New file.
+ * ada/acats-2/tests/c4/c45202b.ada: New file.
+ * ada/acats-2/tests/c4/c45210a.ada: New file.
+ * ada/acats-2/tests/c4/c45211a.ada: New file.
+ * ada/acats-2/tests/c4/c45220a.ada: New file.
+ * ada/acats-2/tests/c4/c45220b.ada: New file.
+ * ada/acats-2/tests/c4/c45220c.ada: New file.
+ * ada/acats-2/tests/c4/c45220d.ada: New file.
+ * ada/acats-2/tests/c4/c45220e.ada: New file.
+ * ada/acats-2/tests/c4/c45220f.ada: New file.
+ * ada/acats-2/tests/c4/c45231a.ada: New file.
+ * ada/acats-2/tests/c4/c45231b.dep: New file.
+ * ada/acats-2/tests/c4/c45231c.dep: New file.
+ * ada/acats-2/tests/c4/c45231d.tst: New file.
+ * ada/acats-2/tests/c4/c45232b.ada: New file.
+ * ada/acats-2/tests/c4/c45242b.ada: New file.
+ * ada/acats-2/tests/c4/c45251a.ada: New file.
+ * ada/acats-2/tests/c4/c45252a.ada: New file.
+ * ada/acats-2/tests/c4/c45252b.ada: New file.
+ * ada/acats-2/tests/c4/c45253a.ada: New file.
+ * ada/acats-2/tests/c4/c45262a.ada: New file.
+ * ada/acats-2/tests/c4/c45262b.ada: New file.
+ * ada/acats-2/tests/c4/c45262c.ada: New file.
+ * ada/acats-2/tests/c4/c45262d.ada: New file.
+ * ada/acats-2/tests/c4/c45264a.ada: New file.
+ * ada/acats-2/tests/c4/c45264b.ada: New file.
+ * ada/acats-2/tests/c4/c45264c.ada: New file.
+ * ada/acats-2/tests/c4/c45265a.ada: New file.
+ * ada/acats-2/tests/c4/c45271a.ada: New file.
+ * ada/acats-2/tests/c4/c45272a.ada: New file.
+ * ada/acats-2/tests/c4/c45273a.ada: New file.
+ * ada/acats-2/tests/c4/c45274a.ada: New file.
+ * ada/acats-2/tests/c4/c45274b.ada: New file.
+ * ada/acats-2/tests/c4/c45274c.ada: New file.
+ * ada/acats-2/tests/c4/c45281a.ada: New file.
+ * ada/acats-2/tests/c4/c45282a.ada: New file.
+ * ada/acats-2/tests/c4/c45282b.ada: New file.
+ * ada/acats-2/tests/c4/c45291a.ada: New file.
+ * ada/acats-2/tests/c4/c453001.a: New file.
+ * ada/acats-2/tests/c4/c45303a.ada: New file.
+ * ada/acats-2/tests/c4/c45304a.ada: New file.
+ * ada/acats-2/tests/c4/c45304b.dep: New file.
+ * ada/acats-2/tests/c4/c45304c.dep: New file.
+ * ada/acats-2/tests/c4/c45322a.ada: New file.
+ * ada/acats-2/tests/c4/c45323a.ada: New file.
+ * ada/acats-2/tests/c4/c45331a.ada: New file.
+ * ada/acats-2/tests/c4/c45342a.ada: New file.
+ * ada/acats-2/tests/c4/c45343a.ada: New file.
+ * ada/acats-2/tests/c4/c45344a.ada: New file.
+ * ada/acats-2/tests/c4/c45345b.ada: New file.
+ * ada/acats-2/tests/c4/c45347a.ada: New file.
+ * ada/acats-2/tests/c4/c45347b.ada: New file.
+ * ada/acats-2/tests/c4/c45347c.ada: New file.
+ * ada/acats-2/tests/c4/c45347d.ada: New file.
+ * ada/acats-2/tests/c4/c45411a.ada: New file.
+ * ada/acats-2/tests/c4/c45411b.dep: New file.
+ * ada/acats-2/tests/c4/c45411c.dep: New file.
+ * ada/acats-2/tests/c4/c45411d.ada: New file.
+ * ada/acats-2/tests/c4/c45413a.ada: New file.
+ * ada/acats-2/tests/c4/c45431a.ada: New file.
+ * ada/acats-2/tests/c4/c455001.a: New file.
+ * ada/acats-2/tests/c4/c45502b.dep: New file.
+ * ada/acats-2/tests/c4/c45502c.dep: New file.
+ * ada/acats-2/tests/c4/c45503a.ada: New file.
+ * ada/acats-2/tests/c4/c45503b.dep: New file.
+ * ada/acats-2/tests/c4/c45503c.dep: New file.
+ * ada/acats-2/tests/c4/c45504a.ada: New file.
+ * ada/acats-2/tests/c4/c45504b.dep: New file.
+ * ada/acats-2/tests/c4/c45504c.dep: New file.
+ * ada/acats-2/tests/c4/c45504d.ada: New file.
+ * ada/acats-2/tests/c4/c45504e.dep: New file.
+ * ada/acats-2/tests/c4/c45504f.dep: New file.
+ * ada/acats-2/tests/c4/c45505a.ada: New file.
+ * ada/acats-2/tests/c4/c45523a.ada: New file.
+ * ada/acats-2/tests/c4/c45531a.ada: New file.
+ * ada/acats-2/tests/c4/c45531b.ada: New file.
+ * ada/acats-2/tests/c4/c45531c.ada: New file.
+ * ada/acats-2/tests/c4/c45531d.ada: New file.
+ * ada/acats-2/tests/c4/c45531e.ada: New file.
+ * ada/acats-2/tests/c4/c45531f.ada: New file.
+ * ada/acats-2/tests/c4/c45531g.ada: New file.
+ * ada/acats-2/tests/c4/c45531h.ada: New file.
+ * ada/acats-2/tests/c4/c45531i.ada: New file.
+ * ada/acats-2/tests/c4/c45531j.ada: New file.
+ * ada/acats-2/tests/c4/c45531k.ada: New file.
+ * ada/acats-2/tests/c4/c45531l.ada: New file.
+ * ada/acats-2/tests/c4/c45531m.dep: New file.
+ * ada/acats-2/tests/c4/c45531n.dep: New file.
+ * ada/acats-2/tests/c4/c45531o.dep: New file.
+ * ada/acats-2/tests/c4/c45531p.dep: New file.
+ * ada/acats-2/tests/c4/c45532a.ada: New file.
+ * ada/acats-2/tests/c4/c45532b.ada: New file.
+ * ada/acats-2/tests/c4/c45532c.ada: New file.
+ * ada/acats-2/tests/c4/c45532d.ada: New file.
+ * ada/acats-2/tests/c4/c45532e.ada: New file.
+ * ada/acats-2/tests/c4/c45532f.ada: New file.
+ * ada/acats-2/tests/c4/c45532g.ada: New file.
+ * ada/acats-2/tests/c4/c45532h.ada: New file.
+ * ada/acats-2/tests/c4/c45532i.ada: New file.
+ * ada/acats-2/tests/c4/c45532j.ada: New file.
+ * ada/acats-2/tests/c4/c45532k.ada: New file.
+ * ada/acats-2/tests/c4/c45532l.ada: New file.
+ * ada/acats-2/tests/c4/c45532m.dep: New file.
+ * ada/acats-2/tests/c4/c45532n.dep: New file.
+ * ada/acats-2/tests/c4/c45532o.dep: New file.
+ * ada/acats-2/tests/c4/c45532p.dep: New file.
+ * ada/acats-2/tests/c4/c45534b.ada: New file.
+ * ada/acats-2/tests/c4/c45536a.dep: New file.
+ * ada/acats-2/tests/c4/c456001.a: New file.
+ * ada/acats-2/tests/c4/c45611a.ada: New file.
+ * ada/acats-2/tests/c4/c45611b.dep: New file.
+ * ada/acats-2/tests/c4/c45611c.dep: New file.
+ * ada/acats-2/tests/c4/c45613a.ada: New file.
+ * ada/acats-2/tests/c4/c45613b.dep: New file.
+ * ada/acats-2/tests/c4/c45613c.dep: New file.
+ * ada/acats-2/tests/c4/c45614a.ada: New file.
+ * ada/acats-2/tests/c4/c45614b.dep: New file.
+ * ada/acats-2/tests/c4/c45614c.dep: New file.
+ * ada/acats-2/tests/c4/c45631a.ada: New file.
+ * ada/acats-2/tests/c4/c45631b.dep: New file.
+ * ada/acats-2/tests/c4/c45631c.dep: New file.
+ * ada/acats-2/tests/c4/c45632a.ada: New file.
+ * ada/acats-2/tests/c4/c45632b.dep: New file.
+ * ada/acats-2/tests/c4/c45632c.dep: New file.
+ * ada/acats-2/tests/c4/c45651a.ada: New file.
+ * ada/acats-2/tests/c4/c45662a.ada: New file.
+ * ada/acats-2/tests/c4/c45662b.ada: New file.
+ * ada/acats-2/tests/c4/c45672a.ada: New file.
+ * ada/acats-2/tests/c4/c460001.a: New file.
+ * ada/acats-2/tests/c4/c460002.a: New file.
+ * ada/acats-2/tests/c4/c460004.a: New file.
+ * ada/acats-2/tests/c4/c460005.a: New file.
+ * ada/acats-2/tests/c4/c460006.a: New file.
+ * ada/acats-2/tests/c4/c460007.a: New file.
+ * ada/acats-2/tests/c4/c460008.a: New file.
+ * ada/acats-2/tests/c4/c460009.a: New file.
+ * ada/acats-2/tests/c4/c460010.a: New file.
+ * ada/acats-2/tests/c4/c460011.a: New file.
+ * ada/acats-2/tests/c4/c460012.a: New file.
+ * ada/acats-2/tests/c4/c460013.a: New file.
+ * ada/acats-2/tests/c4/c460014.a: New file.
+ * ada/acats-2/tests/c4/c46011a.ada: New file.
+ * ada/acats-2/tests/c4/c46013a.ada: New file.
+ * ada/acats-2/tests/c4/c46014a.ada: New file.
+ * ada/acats-2/tests/c4/c46021a.ada: New file.
+ * ada/acats-2/tests/c4/c46024a.ada: New file.
+ * ada/acats-2/tests/c4/c46031a.ada: New file.
+ * ada/acats-2/tests/c4/c46032a.ada: New file.
+ * ada/acats-2/tests/c4/c46033a.ada: New file.
+ * ada/acats-2/tests/c4/c46041a.ada: New file.
+ * ada/acats-2/tests/c4/c46042a.ada: New file.
+ * ada/acats-2/tests/c4/c46043b.ada: New file.
+ * ada/acats-2/tests/c4/c46044b.ada: New file.
+ * ada/acats-2/tests/c4/c46051a.ada: New file.
+ * ada/acats-2/tests/c4/c46051b.ada: New file.
+ * ada/acats-2/tests/c4/c46051c.ada: New file.
+ * ada/acats-2/tests/c4/c46052a.ada: New file.
+ * ada/acats-2/tests/c4/c46053a.ada: New file.
+ * ada/acats-2/tests/c4/c46054a.ada: New file.
+ * ada/acats-2/tests/c4/c460a01.a: New file.
+ * ada/acats-2/tests/c4/c460a02.a: New file.
+ * ada/acats-2/tests/c4/c47002a.ada: New file.
+ * ada/acats-2/tests/c4/c47002b.ada: New file.
+ * ada/acats-2/tests/c4/c47002c.ada: New file.
+ * ada/acats-2/tests/c4/c47002d.ada: New file.
+ * ada/acats-2/tests/c4/c47003a.ada: New file.
+ * ada/acats-2/tests/c4/c47004a.ada: New file.
+ * ada/acats-2/tests/c4/c47005a.ada: New file.
+ * ada/acats-2/tests/c4/c47006a.ada: New file.
+ * ada/acats-2/tests/c4/c47007a.ada: New file.
+ * ada/acats-2/tests/c4/c47008a.ada: New file.
+ * ada/acats-2/tests/c4/c47009a.ada: New file.
+ * ada/acats-2/tests/c4/c47009b.ada: New file.
+ * ada/acats-2/tests/c4/c48004a.ada: New file.
+ * ada/acats-2/tests/c4/c48004b.ada: New file.
+ * ada/acats-2/tests/c4/c48004c.ada: New file.
+ * ada/acats-2/tests/c4/c48004d.ada: New file.
+ * ada/acats-2/tests/c4/c48004e.ada: New file.
+ * ada/acats-2/tests/c4/c48004f.ada: New file.
+ * ada/acats-2/tests/c4/c48005a.ada: New file.
+ * ada/acats-2/tests/c4/c48005b.ada: New file.
+ * ada/acats-2/tests/c4/c48006a.ada: New file.
+ * ada/acats-2/tests/c4/c48006b.ada: New file.
+ * ada/acats-2/tests/c4/c48007a.ada: New file.
+ * ada/acats-2/tests/c4/c48007b.ada: New file.
+ * ada/acats-2/tests/c4/c48007c.ada: New file.
+ * ada/acats-2/tests/c4/c48008a.ada: New file.
+ * ada/acats-2/tests/c4/c48008c.ada: New file.
+ * ada/acats-2/tests/c4/c48009a.ada: New file.
+ * ada/acats-2/tests/c4/c48009b.ada: New file.
+ * ada/acats-2/tests/c4/c48009c.ada: New file.
+ * ada/acats-2/tests/c4/c48009d.ada: New file.
+ * ada/acats-2/tests/c4/c48009e.ada: New file.
+ * ada/acats-2/tests/c4/c48009f.ada: New file.
+ * ada/acats-2/tests/c4/c48009g.ada: New file.
+ * ada/acats-2/tests/c4/c48009h.ada: New file.
+ * ada/acats-2/tests/c4/c48009i.ada: New file.
+ * ada/acats-2/tests/c4/c48009j.ada: New file.
+ * ada/acats-2/tests/c4/c48010a.ada: New file.
+ * ada/acats-2/tests/c4/c48011a.ada: New file.
+ * ada/acats-2/tests/c4/c48012a.ada: New file.
+ * ada/acats-2/tests/c4/c490001.a: New file.
+ * ada/acats-2/tests/c4/c490002.a: New file.
+ * ada/acats-2/tests/c4/c490003.a: New file.
+ * ada/acats-2/tests/c4/c49020a.ada: New file.
+ * ada/acats-2/tests/c4/c49021a.ada: New file.
+ * ada/acats-2/tests/c4/c49022a.ada: New file.
+ * ada/acats-2/tests/c4/c49022b.ada: New file.
+ * ada/acats-2/tests/c4/c49022c.ada: New file.
+ * ada/acats-2/tests/c4/c49023a.ada: New file.
+ * ada/acats-2/tests/c4/c49024a.ada: New file.
+ * ada/acats-2/tests/c4/c49025a.ada: New file.
+ * ada/acats-2/tests/c4/c49026a.ada: New file.
+ * ada/acats-2/tests/c4/c4a005b.ada: New file.
+ * ada/acats-2/tests/c4/c4a006a.ada: New file.
+ * ada/acats-2/tests/c4/c4a007a.tst: New file.
+ * ada/acats-2/tests/c4/c4a010a.ada: New file.
+ * ada/acats-2/tests/c4/c4a010b.ada: New file.
+ * ada/acats-2/tests/c4/c4a011a.ada: New file.
+ * ada/acats-2/tests/c4/c4a012b.ada: New file.
+ * ada/acats-2/tests/c4/c4a013a.ada: New file.
+ * ada/acats-2/tests/c4/c4a014a.ada: New file.
+ * ada/acats-2/tests/c5/c51004a.ada: New file.
+ * ada/acats-2/tests/c5/c52005a.ada: New file.
+ * ada/acats-2/tests/c5/c52005b.ada: New file.
+ * ada/acats-2/tests/c5/c52005c.ada: New file.
+ * ada/acats-2/tests/c5/c52005d.ada: New file.
+ * ada/acats-2/tests/c5/c52005e.ada: New file.
+ * ada/acats-2/tests/c5/c52005f.ada: New file.
+ * ada/acats-2/tests/c5/c52008a.ada: New file.
+ * ada/acats-2/tests/c5/c52008b.ada: New file.
+ * ada/acats-2/tests/c5/c52009a.ada: New file.
+ * ada/acats-2/tests/c5/c52009b.ada: New file.
+ * ada/acats-2/tests/c5/c52010a.ada: New file.
+ * ada/acats-2/tests/c5/c52011a.ada: New file.
+ * ada/acats-2/tests/c5/c52011b.ada: New file.
+ * ada/acats-2/tests/c5/c52101a.ada: New file.
+ * ada/acats-2/tests/c5/c52102a.ada: New file.
+ * ada/acats-2/tests/c5/c52102b.ada: New file.
+ * ada/acats-2/tests/c5/c52102c.ada: New file.
+ * ada/acats-2/tests/c5/c52102d.ada: New file.
+ * ada/acats-2/tests/c5/c52103a.ada: New file.
+ * ada/acats-2/tests/c5/c52103b.ada: New file.
+ * ada/acats-2/tests/c5/c52103c.ada: New file.
+ * ada/acats-2/tests/c5/c52103f.ada: New file.
+ * ada/acats-2/tests/c5/c52103g.ada: New file.
+ * ada/acats-2/tests/c5/c52103h.ada: New file.
+ * ada/acats-2/tests/c5/c52103k.ada: New file.
+ * ada/acats-2/tests/c5/c52103l.ada: New file.
+ * ada/acats-2/tests/c5/c52103m.ada: New file.
+ * ada/acats-2/tests/c5/c52103p.ada: New file.
+ * ada/acats-2/tests/c5/c52103q.ada: New file.
+ * ada/acats-2/tests/c5/c52103r.ada: New file.
+ * ada/acats-2/tests/c5/c52103x.ada: New file.
+ * ada/acats-2/tests/c5/c52104a.ada: New file.
+ * ada/acats-2/tests/c5/c52104b.ada: New file.
+ * ada/acats-2/tests/c5/c52104c.ada: New file.
+ * ada/acats-2/tests/c5/c52104f.ada: New file.
+ * ada/acats-2/tests/c5/c52104g.ada: New file.
+ * ada/acats-2/tests/c5/c52104h.ada: New file.
+ * ada/acats-2/tests/c5/c52104k.ada: New file.
+ * ada/acats-2/tests/c5/c52104l.ada: New file.
+ * ada/acats-2/tests/c5/c52104m.ada: New file.
+ * ada/acats-2/tests/c5/c52104p.ada: New file.
+ * ada/acats-2/tests/c5/c52104q.ada: New file.
+ * ada/acats-2/tests/c5/c52104r.ada: New file.
+ * ada/acats-2/tests/c5/c52104x.ada: New file.
+ * ada/acats-2/tests/c5/c52104y.ada: New file.
+ * ada/acats-2/tests/c5/c53007a.ada: New file.
+ * ada/acats-2/tests/c5/c540001.a: New file.
+ * ada/acats-2/tests/c5/c54a03a.ada: New file.
+ * ada/acats-2/tests/c5/c54a04a.ada: New file.
+ * ada/acats-2/tests/c5/c54a07a.ada: New file.
+ * ada/acats-2/tests/c5/c54a13a.ada: New file.
+ * ada/acats-2/tests/c5/c54a13b.ada: New file.
+ * ada/acats-2/tests/c5/c54a13c.ada: New file.
+ * ada/acats-2/tests/c5/c54a13d.ada: New file.
+ * ada/acats-2/tests/c5/c54a22a.ada: New file.
+ * ada/acats-2/tests/c5/c54a23a.ada: New file.
+ * ada/acats-2/tests/c5/c54a24a.ada: New file.
+ * ada/acats-2/tests/c5/c54a24b.ada: New file.
+ * ada/acats-2/tests/c5/c54a42a.ada: New file.
+ * ada/acats-2/tests/c5/c54a42b.ada: New file.
+ * ada/acats-2/tests/c5/c54a42c.ada: New file.
+ * ada/acats-2/tests/c5/c54a42d.ada: New file.
+ * ada/acats-2/tests/c5/c54a42e.ada: New file.
+ * ada/acats-2/tests/c5/c54a42f.ada: New file.
+ * ada/acats-2/tests/c5/c54a42g.ada: New file.
+ * ada/acats-2/tests/c5/c55b03a.ada: New file.
+ * ada/acats-2/tests/c5/c55b04a.ada: New file.
+ * ada/acats-2/tests/c5/c55b05a.ada: New file.
+ * ada/acats-2/tests/c5/c55b06a.ada: New file.
+ * ada/acats-2/tests/c5/c55b06b.ada: New file.
+ * ada/acats-2/tests/c5/c55b07a.dep: New file.
+ * ada/acats-2/tests/c5/c55b07b.dep: New file.
+ * ada/acats-2/tests/c5/c55b10a.ada: New file.
+ * ada/acats-2/tests/c5/c55b11a.ada: New file.
+ * ada/acats-2/tests/c5/c55b11b.ada: New file.
+ * ada/acats-2/tests/c5/c55b15a.ada: New file.
+ * ada/acats-2/tests/c5/c55b16a.ada: New file.
+ * ada/acats-2/tests/c5/c55c02a.ada: New file.
+ * ada/acats-2/tests/c5/c55c02b.ada: New file.
+ * ada/acats-2/tests/c5/c56002a.ada: New file.
+ * ada/acats-2/tests/c5/c57003a.ada: New file.
+ * ada/acats-2/tests/c5/c57004a.ada: New file.
+ * ada/acats-2/tests/c5/c57004b.ada: New file.
+ * ada/acats-2/tests/c5/c58004c.ada: New file.
+ * ada/acats-2/tests/c5/c58004d.ada: New file.
+ * ada/acats-2/tests/c5/c58004g.ada: New file.
+ * ada/acats-2/tests/c5/c58005a.ada: New file.
+ * ada/acats-2/tests/c5/c58005b.ada: New file.
+ * ada/acats-2/tests/c5/c58005h.ada: New file.
+ * ada/acats-2/tests/c5/c58006a.ada: New file.
+ * ada/acats-2/tests/c5/c58006b.ada: New file.
+ * ada/acats-2/tests/c5/c59002a.ada: New file.
+ * ada/acats-2/tests/c5/c59002b.ada: New file.
+ * ada/acats-2/tests/c5/c59002c.ada: New file.
+ * ada/acats-2/tests/c6/c61008a.ada: New file.
+ * ada/acats-2/tests/c6/c61009a.ada: New file.
+ * ada/acats-2/tests/c6/c61010a.ada: New file.
+ * ada/acats-2/tests/c6/c620001.a: New file.
+ * ada/acats-2/tests/c6/c620002.a: New file.
+ * ada/acats-2/tests/c6/c62002a.ada: New file.
+ * ada/acats-2/tests/c6/c62003a.ada: New file.
+ * ada/acats-2/tests/c6/c62003b.ada: New file.
+ * ada/acats-2/tests/c6/c62004a.ada: New file.
+ * ada/acats-2/tests/c6/c62006a.ada: New file.
+ * ada/acats-2/tests/c6/c631001.a: New file.
+ * ada/acats-2/tests/c6/c640001.a: New file.
+ * ada/acats-2/tests/c6/c64002b.ada: New file.
+ * ada/acats-2/tests/c6/c64004g.ada: New file.
+ * ada/acats-2/tests/c6/c64005a.ada: New file.
+ * ada/acats-2/tests/c6/c64005b.ada: New file.
+ * ada/acats-2/tests/c6/c64005c.ada: New file.
+ * ada/acats-2/tests/c6/c64005d0.ada: New file.
+ * ada/acats-2/tests/c6/c64005da.ada: New file.
+ * ada/acats-2/tests/c6/c64005db.ada: New file.
+ * ada/acats-2/tests/c6/c64005dc.ada: New file.
+ * ada/acats-2/tests/c6/c641001.a: New file.
+ * ada/acats-2/tests/c6/c64103b.ada: New file.
+ * ada/acats-2/tests/c6/c64103c.ada: New file.
+ * ada/acats-2/tests/c6/c64103d.ada: New file.
+ * ada/acats-2/tests/c6/c64103e.ada: New file.
+ * ada/acats-2/tests/c6/c64103f.ada: New file.
+ * ada/acats-2/tests/c6/c64104a.ada: New file.
+ * ada/acats-2/tests/c6/c64104b.ada: New file.
+ * ada/acats-2/tests/c6/c64104c.ada: New file.
+ * ada/acats-2/tests/c6/c64104d.ada: New file.
+ * ada/acats-2/tests/c6/c64104e.ada: New file.
+ * ada/acats-2/tests/c6/c64104f.ada: New file.
+ * ada/acats-2/tests/c6/c64104g.ada: New file.
+ * ada/acats-2/tests/c6/c64104h.ada: New file.
+ * ada/acats-2/tests/c6/c64104i.ada: New file.
+ * ada/acats-2/tests/c6/c64104j.ada: New file.
+ * ada/acats-2/tests/c6/c64104k.ada: New file.
+ * ada/acats-2/tests/c6/c64104l.ada: New file.
+ * ada/acats-2/tests/c6/c64104m.ada: New file.
+ * ada/acats-2/tests/c6/c64104n.ada: New file.
+ * ada/acats-2/tests/c6/c64104o.ada: New file.
+ * ada/acats-2/tests/c6/c64105a.ada: New file.
+ * ada/acats-2/tests/c6/c64105b.ada: New file.
+ * ada/acats-2/tests/c6/c64105c.ada: New file.
+ * ada/acats-2/tests/c6/c64105d.ada: New file.
+ * ada/acats-2/tests/c6/c64106a.ada: New file.
+ * ada/acats-2/tests/c6/c64106b.ada: New file.
+ * ada/acats-2/tests/c6/c64106c.ada: New file.
+ * ada/acats-2/tests/c6/c64106d.ada: New file.
+ * ada/acats-2/tests/c6/c64107a.ada: New file.
+ * ada/acats-2/tests/c6/c64108a.ada: New file.
+ * ada/acats-2/tests/c6/c64109a.ada: New file.
+ * ada/acats-2/tests/c6/c64109b.ada: New file.
+ * ada/acats-2/tests/c6/c64109c.ada: New file.
+ * ada/acats-2/tests/c6/c64109d.ada: New file.
+ * ada/acats-2/tests/c6/c64109e.ada: New file.
+ * ada/acats-2/tests/c6/c64109f.ada: New file.
+ * ada/acats-2/tests/c6/c64109g.ada: New file.
+ * ada/acats-2/tests/c6/c64109h.ada: New file.
+ * ada/acats-2/tests/c6/c64109i.ada: New file.
+ * ada/acats-2/tests/c6/c64109j.ada: New file.
+ * ada/acats-2/tests/c6/c64109k.ada: New file.
+ * ada/acats-2/tests/c6/c64109l.ada: New file.
+ * ada/acats-2/tests/c6/c64201b.ada: New file.
+ * ada/acats-2/tests/c6/c64201c.ada: New file.
+ * ada/acats-2/tests/c6/c64202a.ada: New file.
+ * ada/acats-2/tests/c6/c650001.a: New file.
+ * ada/acats-2/tests/c6/c65003a.ada: New file.
+ * ada/acats-2/tests/c6/c65003b.ada: New file.
+ * ada/acats-2/tests/c6/c66002a.ada: New file.
+ * ada/acats-2/tests/c6/c66002c.ada: New file.
+ * ada/acats-2/tests/c6/c66002d.ada: New file.
+ * ada/acats-2/tests/c6/c66002e.ada: New file.
+ * ada/acats-2/tests/c6/c66002f.ada: New file.
+ * ada/acats-2/tests/c6/c66002g.ada: New file.
+ * ada/acats-2/tests/c6/c67002a.ada: New file.
+ * ada/acats-2/tests/c6/c67002b.ada: New file.
+ * ada/acats-2/tests/c6/c67002c.ada: New file.
+ * ada/acats-2/tests/c6/c67002d.ada: New file.
+ * ada/acats-2/tests/c6/c67002e.ada: New file.
+ * ada/acats-2/tests/c6/c67003f.ada: New file.
+ * ada/acats-2/tests/c6/c67005a.ada: New file.
+ * ada/acats-2/tests/c6/c67005b.ada: New file.
+ * ada/acats-2/tests/c6/c67005c.ada: New file.
+ * ada/acats-2/tests/c6/c67005d.ada: New file.
+ * ada/acats-2/tests/c7/c72001b.ada: New file.
+ * ada/acats-2/tests/c7/c72002a.ada: New file.
+ * ada/acats-2/tests/c7/c730001.a: New file.
+ * ada/acats-2/tests/c7/c730002.a: New file.
+ * ada/acats-2/tests/c7/c730003.a: New file.
+ * ada/acats-2/tests/c7/c730004.a: New file.
+ * ada/acats-2/tests/c7/c73002a.ada: New file.
+ * ada/acats-2/tests/c7/c730a01.a: New file.
+ * ada/acats-2/tests/c7/c730a02.a: New file.
+ * ada/acats-2/tests/c7/c731001.a: New file.
+ * ada/acats-2/tests/c7/c74004a.ada: New file.
+ * ada/acats-2/tests/c7/c74203a.ada: New file.
+ * ada/acats-2/tests/c7/c74206a.ada: New file.
+ * ada/acats-2/tests/c7/c74207b.ada: New file.
+ * ada/acats-2/tests/c7/c74208a.ada: New file.
+ * ada/acats-2/tests/c7/c74208b.ada: New file.
+ * ada/acats-2/tests/c7/c74209a.ada: New file.
+ * ada/acats-2/tests/c7/c74210a.ada: New file.
+ * ada/acats-2/tests/c7/c74211a.ada: New file.
+ * ada/acats-2/tests/c7/c74211b.ada: New file.
+ * ada/acats-2/tests/c7/c74302a.ada: New file.
+ * ada/acats-2/tests/c7/c74302b.ada: New file.
+ * ada/acats-2/tests/c7/c74305a.ada: New file.
+ * ada/acats-2/tests/c7/c74305b.ada: New file.
+ * ada/acats-2/tests/c7/c74306a.ada: New file.
+ * ada/acats-2/tests/c7/c74307a.ada: New file.
+ * ada/acats-2/tests/c7/c74401d.ada: New file.
+ * ada/acats-2/tests/c7/c74401e.ada: New file.
+ * ada/acats-2/tests/c7/c74401k.ada: New file.
+ * ada/acats-2/tests/c7/c74401q.ada: New file.
+ * ada/acats-2/tests/c7/c74402a.ada: New file.
+ * ada/acats-2/tests/c7/c74402b.ada: New file.
+ * ada/acats-2/tests/c7/c74406a.ada: New file.
+ * ada/acats-2/tests/c7/c74407b.ada: New file.
+ * ada/acats-2/tests/c7/c74409b.ada: New file.
+ * ada/acats-2/tests/c7/c760001.a: New file.
+ * ada/acats-2/tests/c7/c760002.a: New file.
+ * ada/acats-2/tests/c7/c760007.a: New file.
+ * ada/acats-2/tests/c7/c760009.a: New file.
+ * ada/acats-2/tests/c7/c760010.a: New file.
+ * ada/acats-2/tests/c7/c760011.a: New file.
+ * ada/acats-2/tests/c7/c760012.a: New file.
+ * ada/acats-2/tests/c7/c760013.a: New file.
+ * ada/acats-2/tests/c7/c761001.a: New file.
+ * ada/acats-2/tests/c7/c761002.a: New file.
+ * ada/acats-2/tests/c7/c761003.a: New file.
+ * ada/acats-2/tests/c7/c761004.a: New file.
+ * ada/acats-2/tests/c7/c761005.a: New file.
+ * ada/acats-2/tests/c7/c761006.a: New file.
+ * ada/acats-2/tests/c7/c761007.a: New file.
+ * ada/acats-2/tests/c7/c761010.a: New file.
+ * ada/acats-2/tests/c7/c761011.a: New file.
+ * ada/acats-2/tests/c7/c761012.a: New file.
+ * ada/acats-2/tests/c8/c83007a.ada: New file.
+ * ada/acats-2/tests/c8/c83012d.ada: New file.
+ * ada/acats-2/tests/c8/c83022a.ada: New file.
+ * ada/acats-2/tests/c8/c83022g0.ada: New file.
+ * ada/acats-2/tests/c8/c83022g1.ada: New file.
+ * ada/acats-2/tests/c8/c83023a.ada: New file.
+ * ada/acats-2/tests/c8/c83024a.ada: New file.
+ * ada/acats-2/tests/c8/c83024e0.ada: New file.
+ * ada/acats-2/tests/c8/c83024e1.ada: New file.
+ * ada/acats-2/tests/c8/c83025a.ada: New file.
+ * ada/acats-2/tests/c8/c83025c.ada: New file.
+ * ada/acats-2/tests/c8/c83027a.ada: New file.
+ * ada/acats-2/tests/c8/c83027c.ada: New file.
+ * ada/acats-2/tests/c8/c83028a.ada: New file.
+ * ada/acats-2/tests/c8/c83029a.ada: New file.
+ * ada/acats-2/tests/c8/c83030a.ada: New file.
+ * ada/acats-2/tests/c8/c83030c.ada: New file.
+ * ada/acats-2/tests/c8/c83031a.ada: New file.
+ * ada/acats-2/tests/c8/c83031c.ada: New file.
+ * ada/acats-2/tests/c8/c83031e.ada: New file.
+ * ada/acats-2/tests/c8/c83032a.ada: New file.
+ * ada/acats-2/tests/c8/c83033a.ada: New file.
+ * ada/acats-2/tests/c8/c83051a.ada: New file.
+ * ada/acats-2/tests/c8/c83b02a.ada: New file.
+ * ada/acats-2/tests/c8/c83b02b.ada: New file.
+ * ada/acats-2/tests/c8/c83e02a.ada: New file.
+ * ada/acats-2/tests/c8/c83e02b.ada: New file.
+ * ada/acats-2/tests/c8/c83e03a.ada: New file.
+ * ada/acats-2/tests/c8/c83f01a.ada: New file.
+ * ada/acats-2/tests/c8/c83f01b.ada: New file.
+ * ada/acats-2/tests/c8/c83f01c0.ada: New file.
+ * ada/acats-2/tests/c8/c83f01c1.ada: New file.
+ * ada/acats-2/tests/c8/c83f01c2.ada: New file.
+ * ada/acats-2/tests/c8/c83f01d0.ada: New file.
+ * ada/acats-2/tests/c8/c83f01d1.ada: New file.
+ * ada/acats-2/tests/c8/c83f03a.ada: New file.
+ * ada/acats-2/tests/c8/c83f03b.ada: New file.
+ * ada/acats-2/tests/c8/c83f03c0.ada: New file.
+ * ada/acats-2/tests/c8/c83f03c1.ada: New file.
+ * ada/acats-2/tests/c8/c83f03c2.ada: New file.
+ * ada/acats-2/tests/c8/c83f03d0.ada: New file.
+ * ada/acats-2/tests/c8/c83f03d1.ada: New file.
+ * ada/acats-2/tests/c8/c840001.a: New file.
+ * ada/acats-2/tests/c8/c84002a.ada: New file.
+ * ada/acats-2/tests/c8/c84005a.ada: New file.
+ * ada/acats-2/tests/c8/c84008a.ada: New file.
+ * ada/acats-2/tests/c8/c84009a.ada: New file.
+ * ada/acats-2/tests/c8/c85004b.ada: New file.
+ * ada/acats-2/tests/c8/c85005a.ada: New file.
+ * ada/acats-2/tests/c8/c85005b.ada: New file.
+ * ada/acats-2/tests/c8/c85005c.ada: New file.
+ * ada/acats-2/tests/c8/c85005d.ada: New file.
+ * ada/acats-2/tests/c8/c85005e.ada: New file.
+ * ada/acats-2/tests/c8/c85005f.ada: New file.
+ * ada/acats-2/tests/c8/c85005g.ada: New file.
+ * ada/acats-2/tests/c8/c85006a.ada: New file.
+ * ada/acats-2/tests/c8/c85006b.ada: New file.
+ * ada/acats-2/tests/c8/c85006c.ada: New file.
+ * ada/acats-2/tests/c8/c85006d.ada: New file.
+ * ada/acats-2/tests/c8/c85006e.ada: New file.
+ * ada/acats-2/tests/c8/c85006f.ada: New file.
+ * ada/acats-2/tests/c8/c85006g.ada: New file.
+ * ada/acats-2/tests/c8/c85007a.ada: New file.
+ * ada/acats-2/tests/c8/c85007e.ada: New file.
+ * ada/acats-2/tests/c8/c85009a.ada: New file.
+ * ada/acats-2/tests/c8/c85011a.ada: New file.
+ * ada/acats-2/tests/c8/c85013a.ada: New file.
+ * ada/acats-2/tests/c8/c85014a.ada: New file.
+ * ada/acats-2/tests/c8/c85014b.ada: New file.
+ * ada/acats-2/tests/c8/c85014c.ada: New file.
+ * ada/acats-2/tests/c8/c85017a.ada: New file.
+ * ada/acats-2/tests/c8/c85018a.ada: New file.
+ * ada/acats-2/tests/c8/c85018b.ada: New file.
+ * ada/acats-2/tests/c8/c85019a.ada: New file.
+ * ada/acats-2/tests/c8/c854001.a: New file.
+ * ada/acats-2/tests/c8/c854002.a: New file.
+ * ada/acats-2/tests/c8/c854003.a: New file.
+ * ada/acats-2/tests/c8/c86003a.ada: New file.
+ * ada/acats-2/tests/c8/c86004a.ada: New file.
+ * ada/acats-2/tests/c8/c86004b0.ada: New file.
+ * ada/acats-2/tests/c8/c86004b1.ada: New file.
+ * ada/acats-2/tests/c8/c86004b2.ada: New file.
+ * ada/acats-2/tests/c8/c86004c0.ada: New file.
+ * ada/acats-2/tests/c8/c86004c1.ada: New file.
+ * ada/acats-2/tests/c8/c86004c2.ada: New file.
+ * ada/acats-2/tests/c8/c86006i.ada: New file.
+ * ada/acats-2/tests/c8/c86007a.ada: New file.
+ * ada/acats-2/tests/c8/c87a05a.ada: New file.
+ * ada/acats-2/tests/c8/c87a05b.ada: New file.
+ * ada/acats-2/tests/c8/c87b02a.ada: New file.
+ * ada/acats-2/tests/c8/c87b02b.ada: New file.
+ * ada/acats-2/tests/c8/c87b03a.ada: New file.
+ * ada/acats-2/tests/c8/c87b04a.ada: New file.
+ * ada/acats-2/tests/c8/c87b04b.ada: New file.
+ * ada/acats-2/tests/c8/c87b04c.ada: New file.
+ * ada/acats-2/tests/c8/c87b05a.ada: New file.
+ * ada/acats-2/tests/c8/c87b06a.ada: New file.
+ * ada/acats-2/tests/c8/c87b07a.ada: New file.
+ * ada/acats-2/tests/c8/c87b07b.ada: New file.
+ * ada/acats-2/tests/c8/c87b07c.ada: New file.
+ * ada/acats-2/tests/c8/c87b07d.ada: New file.
+ * ada/acats-2/tests/c8/c87b07e.ada: New file.
+ * ada/acats-2/tests/c8/c87b08a.ada: New file.
+ * ada/acats-2/tests/c8/c87b09a.ada: New file.
+ * ada/acats-2/tests/c8/c87b09c.ada: New file.
+ * ada/acats-2/tests/c8/c87b10a.ada: New file.
+ * ada/acats-2/tests/c8/c87b11a.ada: New file.
+ * ada/acats-2/tests/c8/c87b11b.ada: New file.
+ * ada/acats-2/tests/c8/c87b13a.ada: New file.
+ * ada/acats-2/tests/c8/c87b14a.ada: New file.
+ * ada/acats-2/tests/c8/c87b14b.ada: New file.
+ * ada/acats-2/tests/c8/c87b14c.ada: New file.
+ * ada/acats-2/tests/c8/c87b14d.ada: New file.
+ * ada/acats-2/tests/c8/c87b15a.ada: New file.
+ * ada/acats-2/tests/c8/c87b16a.ada: New file.
+ * ada/acats-2/tests/c8/c87b17a.ada: New file.
+ * ada/acats-2/tests/c8/c87b18a.ada: New file.
+ * ada/acats-2/tests/c8/c87b18b.ada: New file.
+ * ada/acats-2/tests/c8/c87b19a.ada: New file.
+ * ada/acats-2/tests/c8/c87b23a.ada: New file.
+ * ada/acats-2/tests/c8/c87b24a.ada: New file.
+ * ada/acats-2/tests/c8/c87b24b.ada: New file.
+ * ada/acats-2/tests/c8/c87b26b.ada: New file.
+ * ada/acats-2/tests/c8/c87b27a.ada: New file.
+ * ada/acats-2/tests/c8/c87b28a.ada: New file.
+ * ada/acats-2/tests/c8/c87b29a.ada: New file.
+ * ada/acats-2/tests/c8/c87b30a.ada: New file.
+ * ada/acats-2/tests/c8/c87b31a.ada: New file.
+ * ada/acats-2/tests/c8/c87b32a.ada: New file.
+ * ada/acats-2/tests/c8/c87b33a.ada: New file.
+ * ada/acats-2/tests/c8/c87b34a.ada: New file.
+ * ada/acats-2/tests/c8/c87b34b.ada: New file.
+ * ada/acats-2/tests/c8/c87b34c.ada: New file.
+ * ada/acats-2/tests/c8/c87b35c.ada: New file.
+ * ada/acats-2/tests/c8/c87b38a.ada: New file.
+ * ada/acats-2/tests/c8/c87b39a.ada: New file.
+ * ada/acats-2/tests/c8/c87b40a.ada: New file.
+ * ada/acats-2/tests/c8/c87b41a.ada: New file.
+ * ada/acats-2/tests/c8/c87b42a.ada: New file.
+ * ada/acats-2/tests/c8/c87b43a.ada: New file.
+ * ada/acats-2/tests/c8/c87b44a.ada: New file.
+ * ada/acats-2/tests/c8/c87b45a.ada: New file.
+ * ada/acats-2/tests/c8/c87b45c.ada: New file.
+ * ada/acats-2/tests/c8/c87b47a.ada: New file.
+ * ada/acats-2/tests/c8/c87b48a.ada: New file.
+ * ada/acats-2/tests/c8/c87b48b.ada: New file.
+ * ada/acats-2/tests/c8/c87b50a.ada: New file.
+ * ada/acats-2/tests/c8/c87b54a.ada: New file.
+ * ada/acats-2/tests/c8/c87b57a.ada: New file.
+ * ada/acats-2/tests/c8/c87b62a.ada: New file.
+ * ada/acats-2/tests/c8/c87b62b.ada: New file.
+ * ada/acats-2/tests/c8/c87b62c.ada: New file.
+ * ada/acats-2/tests/c8/c87b62d.tst: New file.
+ * ada/acats-2/tests/c9/c910001.a: New file.
+ * ada/acats-2/tests/c9/c910002.a: New file.
+ * ada/acats-2/tests/c9/c910003.a: New file.
+ * ada/acats-2/tests/c9/c91004b.ada: New file.
+ * ada/acats-2/tests/c9/c91004c.ada: New file.
+ * ada/acats-2/tests/c9/c91006a.ada: New file.
+ * ada/acats-2/tests/c9/c91007a.ada: New file.
+ * ada/acats-2/tests/c9/c92002a.ada: New file.
+ * ada/acats-2/tests/c9/c92003a.ada: New file.
+ * ada/acats-2/tests/c9/c92005a.ada: New file.
+ * ada/acats-2/tests/c9/c92005b.ada: New file.
+ * ada/acats-2/tests/c9/c92006a.ada: New file.
+ * ada/acats-2/tests/c9/c930001.a: New file.
+ * ada/acats-2/tests/c9/c93001a.ada: New file.
+ * ada/acats-2/tests/c9/c93002a.ada: New file.
+ * ada/acats-2/tests/c9/c93003a.ada: New file.
+ * ada/acats-2/tests/c9/c93004a.ada: New file.
+ * ada/acats-2/tests/c9/c93004b.ada: New file.
+ * ada/acats-2/tests/c9/c93004c.ada: New file.
+ * ada/acats-2/tests/c9/c93004d.ada: New file.
+ * ada/acats-2/tests/c9/c93004f.ada: New file.
+ * ada/acats-2/tests/c9/c93005a.ada: New file.
+ * ada/acats-2/tests/c9/c93005b.ada: New file.
+ * ada/acats-2/tests/c9/c93005c.ada: New file.
+ * ada/acats-2/tests/c9/c93005d.ada: New file.
+ * ada/acats-2/tests/c9/c93005e.ada: New file.
+ * ada/acats-2/tests/c9/c93005f.ada: New file.
+ * ada/acats-2/tests/c9/c93005g.ada: New file.
+ * ada/acats-2/tests/c9/c93005h.ada: New file.
+ * ada/acats-2/tests/c9/c93006a.ada: New file.
+ * ada/acats-2/tests/c9/c93007a.ada: New file.
+ * ada/acats-2/tests/c9/c93008a.ada: New file.
+ * ada/acats-2/tests/c9/c93008b.ada: New file.
+ * ada/acats-2/tests/c9/c940001.a: New file.
+ * ada/acats-2/tests/c9/c940002.a: New file.
+ * ada/acats-2/tests/c9/c940004.a: New file.
+ * ada/acats-2/tests/c9/c940005.a: New file.
+ * ada/acats-2/tests/c9/c940006.a: New file.
+ * ada/acats-2/tests/c9/c940007.a: New file.
+ * ada/acats-2/tests/c9/c940010.a: New file.
+ * ada/acats-2/tests/c9/c940011.a: New file.
+ * ada/acats-2/tests/c9/c940012.a: New file.
+ * ada/acats-2/tests/c9/c940013.a: New file.
+ * ada/acats-2/tests/c9/c940014.a: New file.
+ * ada/acats-2/tests/c9/c940015.a: New file.
+ * ada/acats-2/tests/c9/c940016.a: New file.
+ * ada/acats-2/tests/c9/c94001a.ada: New file.
+ * ada/acats-2/tests/c9/c94001b.ada: New file.
+ * ada/acats-2/tests/c9/c94001c.ada: New file.
+ * ada/acats-2/tests/c9/c94001e.ada: New file.
+ * ada/acats-2/tests/c9/c94001f.ada: New file.
+ * ada/acats-2/tests/c9/c94001g.ada: New file.
+ * ada/acats-2/tests/c9/c94002a.ada: New file.
+ * ada/acats-2/tests/c9/c94002b.ada: New file.
+ * ada/acats-2/tests/c9/c94002d.ada: New file.
+ * ada/acats-2/tests/c9/c94002e.ada: New file.
+ * ada/acats-2/tests/c9/c94002f.ada: New file.
+ * ada/acats-2/tests/c9/c94002g.ada: New file.
+ * ada/acats-2/tests/c9/c94004a.ada: New file.
+ * ada/acats-2/tests/c9/c94004b.ada: New file.
+ * ada/acats-2/tests/c9/c94004c.ada: New file.
+ * ada/acats-2/tests/c9/c94005a.ada: New file.
+ * ada/acats-2/tests/c9/c94005b.ada: New file.
+ * ada/acats-2/tests/c9/c94006a.ada: New file.
+ * ada/acats-2/tests/c9/c94007a.ada: New file.
+ * ada/acats-2/tests/c9/c94007b.ada: New file.
+ * ada/acats-2/tests/c9/c94008a.ada: New file.
+ * ada/acats-2/tests/c9/c94008b.ada: New file.
+ * ada/acats-2/tests/c9/c94008c.ada: New file.
+ * ada/acats-2/tests/c9/c94008d.ada: New file.
+ * ada/acats-2/tests/c9/c94010a.ada: New file.
+ * ada/acats-2/tests/c9/c94011a.ada: New file.
+ * ada/acats-2/tests/c9/c94020a.ada: New file.
+ * ada/acats-2/tests/c9/c940a03.a: New file.
+ * ada/acats-2/tests/c9/c95008a.ada: New file.
+ * ada/acats-2/tests/c9/c95009a.ada: New file.
+ * ada/acats-2/tests/c9/c95010a.ada: New file.
+ * ada/acats-2/tests/c9/c95011a.ada: New file.
+ * ada/acats-2/tests/c9/c95012a.ada: New file.
+ * ada/acats-2/tests/c9/c95021a.ada: New file.
+ * ada/acats-2/tests/c9/c95022a.ada: New file.
+ * ada/acats-2/tests/c9/c95022b.ada: New file.
+ * ada/acats-2/tests/c9/c95033a.ada: New file.
+ * ada/acats-2/tests/c9/c95033b.ada: New file.
+ * ada/acats-2/tests/c9/c95034a.ada: New file.
+ * ada/acats-2/tests/c9/c95034b.ada: New file.
+ * ada/acats-2/tests/c9/c95035a.ada: New file.
+ * ada/acats-2/tests/c9/c95040a.ada: New file.
+ * ada/acats-2/tests/c9/c95040b.ada: New file.
+ * ada/acats-2/tests/c9/c95040c.ada: New file.
+ * ada/acats-2/tests/c9/c95040d.ada: New file.
+ * ada/acats-2/tests/c9/c95041a.ada: New file.
+ * ada/acats-2/tests/c9/c95065a.ada: New file.
+ * ada/acats-2/tests/c9/c95065b.ada: New file.
+ * ada/acats-2/tests/c9/c95065c.ada: New file.
+ * ada/acats-2/tests/c9/c95065d.ada: New file.
+ * ada/acats-2/tests/c9/c95065e.ada: New file.
+ * ada/acats-2/tests/c9/c95065f.ada: New file.
+ * ada/acats-2/tests/c9/c95066a.ada: New file.
+ * ada/acats-2/tests/c9/c95067a.ada: New file.
+ * ada/acats-2/tests/c9/c95071a.ada: New file.
+ * ada/acats-2/tests/c9/c95072a.ada: New file.
+ * ada/acats-2/tests/c9/c95072b.ada: New file.
+ * ada/acats-2/tests/c9/c95073a.ada: New file.
+ * ada/acats-2/tests/c9/c95074c.ada: New file.
+ * ada/acats-2/tests/c9/c95076a.ada: New file.
+ * ada/acats-2/tests/c9/c95078a.ada: New file.
+ * ada/acats-2/tests/c9/c95080b.ada: New file.
+ * ada/acats-2/tests/c9/c95082g.ada: New file.
+ * ada/acats-2/tests/c9/c95085a.ada: New file.
+ * ada/acats-2/tests/c9/c95085b.ada: New file.
+ * ada/acats-2/tests/c9/c95085c.ada: New file.
+ * ada/acats-2/tests/c9/c95085d.ada: New file.
+ * ada/acats-2/tests/c9/c95085e.ada: New file.
+ * ada/acats-2/tests/c9/c95085f.ada: New file.
+ * ada/acats-2/tests/c9/c95085g.ada: New file.
+ * ada/acats-2/tests/c9/c95085h.ada: New file.
+ * ada/acats-2/tests/c9/c95085i.ada: New file.
+ * ada/acats-2/tests/c9/c95085j.ada: New file.
+ * ada/acats-2/tests/c9/c95085k.ada: New file.
+ * ada/acats-2/tests/c9/c95085l.ada: New file.
+ * ada/acats-2/tests/c9/c95085m.ada: New file.
+ * ada/acats-2/tests/c9/c95085n.ada: New file.
+ * ada/acats-2/tests/c9/c95085o.ada: New file.
+ * ada/acats-2/tests/c9/c95086a.ada: New file.
+ * ada/acats-2/tests/c9/c95086b.ada: New file.
+ * ada/acats-2/tests/c9/c95086c.ada: New file.
+ * ada/acats-2/tests/c9/c95086d.ada: New file.
+ * ada/acats-2/tests/c9/c95086e.ada: New file.
+ * ada/acats-2/tests/c9/c95086f.ada: New file.
+ * ada/acats-2/tests/c9/c95087a.ada: New file.
+ * ada/acats-2/tests/c9/c95087b.ada: New file.
+ * ada/acats-2/tests/c9/c95087c.ada: New file.
+ * ada/acats-2/tests/c9/c95087d.ada: New file.
+ * ada/acats-2/tests/c9/c95088a.ada: New file.
+ * ada/acats-2/tests/c9/c95089a.ada: New file.
+ * ada/acats-2/tests/c9/c95090a.ada: New file.
+ * ada/acats-2/tests/c9/c95092a.ada: New file.
+ * ada/acats-2/tests/c9/c95093a.ada: New file.
+ * ada/acats-2/tests/c9/c95095a.ada: New file.
+ * ada/acats-2/tests/c9/c95095b.ada: New file.
+ * ada/acats-2/tests/c9/c95095c.ada: New file.
+ * ada/acats-2/tests/c9/c95095d.ada: New file.
+ * ada/acats-2/tests/c9/c95095e.ada: New file.
+ * ada/acats-2/tests/c9/c951001.a: New file.
+ * ada/acats-2/tests/c9/c951002.a: New file.
+ * ada/acats-2/tests/c9/c953001.a: New file.
+ * ada/acats-2/tests/c9/c953002.a: New file.
+ * ada/acats-2/tests/c9/c953003.a: New file.
+ * ada/acats-2/tests/c9/c954001.a: New file.
+ * ada/acats-2/tests/c9/c954010.a: New file.
+ * ada/acats-2/tests/c9/c954011.a: New file.
+ * ada/acats-2/tests/c9/c954012.a: New file.
+ * ada/acats-2/tests/c9/c954013.a: New file.
+ * ada/acats-2/tests/c9/c954014.a: New file.
+ * ada/acats-2/tests/c9/c954015.a: New file.
+ * ada/acats-2/tests/c9/c954016.a: New file.
+ * ada/acats-2/tests/c9/c954017.a: New file.
+ * ada/acats-2/tests/c9/c954018.a: New file.
+ * ada/acats-2/tests/c9/c954019.a: New file.
+ * ada/acats-2/tests/c9/c954020.a: New file.
+ * ada/acats-2/tests/c9/c954021.a: New file.
+ * ada/acats-2/tests/c9/c954022.a: New file.
+ * ada/acats-2/tests/c9/c954023.a: New file.
+ * ada/acats-2/tests/c9/c954024.a: New file.
+ * ada/acats-2/tests/c9/c954025.a: New file.
+ * ada/acats-2/tests/c9/c954026.a: New file.
+ * ada/acats-2/tests/c9/c954a01.a: New file.
+ * ada/acats-2/tests/c9/c954a02.a: New file.
+ * ada/acats-2/tests/c9/c954a03.a: New file.
+ * ada/acats-2/tests/c9/c960001.a: New file.
+ * ada/acats-2/tests/c9/c960002.a: New file.
+ * ada/acats-2/tests/c9/c960004.a: New file.
+ * ada/acats-2/tests/c9/c96001a.ada: New file.
+ * ada/acats-2/tests/c9/c96004a.ada: New file.
+ * ada/acats-2/tests/c9/c96005a.ada: New file.
+ * ada/acats-2/tests/c9/c96005b.tst: New file.
+ * ada/acats-2/tests/c9/c96005d.ada: New file.
+ * ada/acats-2/tests/c9/c96005f.ada: New file.
+ * ada/acats-2/tests/c9/c96006a.ada: New file.
+ * ada/acats-2/tests/c9/c96007a.ada: New file.
+ * ada/acats-2/tests/c9/c96008a.ada: New file.
+ * ada/acats-2/tests/c9/c96008b.ada: New file.
+ * ada/acats-2/tests/c9/c97112a.ada: New file.
+ * ada/acats-2/tests/c9/c97113a.ada: New file.
+ * ada/acats-2/tests/c9/c97114a.ada: New file.
+ * ada/acats-2/tests/c9/c97115a.ada: New file.
+ * ada/acats-2/tests/c9/c97116a.ada: New file.
+ * ada/acats-2/tests/c9/c97117a.ada: New file.
+ * ada/acats-2/tests/c9/c97117b.ada: New file.
+ * ada/acats-2/tests/c9/c97117c.ada: New file.
+ * ada/acats-2/tests/c9/c97118a.ada: New file.
+ * ada/acats-2/tests/c9/c97120a.ada: New file.
+ * ada/acats-2/tests/c9/c97120b.ada: New file.
+ * ada/acats-2/tests/c9/c97201a.ada: New file.
+ * ada/acats-2/tests/c9/c97201b.ada: New file.
+ * ada/acats-2/tests/c9/c97201c.ada: New file.
+ * ada/acats-2/tests/c9/c97201d.ada: New file.
+ * ada/acats-2/tests/c9/c97201e.ada: New file.
+ * ada/acats-2/tests/c9/c97201g.ada: New file.
+ * ada/acats-2/tests/c9/c97201h.ada: New file.
+ * ada/acats-2/tests/c9/c97201x.ada: New file.
+ * ada/acats-2/tests/c9/c97202a.ada: New file.
+ * ada/acats-2/tests/c9/c97203a.ada: New file.
+ * ada/acats-2/tests/c9/c97203b.ada: New file.
+ * ada/acats-2/tests/c9/c97203c.ada: New file.
+ * ada/acats-2/tests/c9/c97204a.ada: New file.
+ * ada/acats-2/tests/c9/c97204b.ada: New file.
+ * ada/acats-2/tests/c9/c97205a.ada: New file.
+ * ada/acats-2/tests/c9/c97205b.ada: New file.
+ * ada/acats-2/tests/c9/c97301a.ada: New file.
+ * ada/acats-2/tests/c9/c97301b.ada: New file.
+ * ada/acats-2/tests/c9/c97301c.ada: New file.
+ * ada/acats-2/tests/c9/c97301d.ada: New file.
+ * ada/acats-2/tests/c9/c97301e.ada: New file.
+ * ada/acats-2/tests/c9/c97302a.ada: New file.
+ * ada/acats-2/tests/c9/c97303a.ada: New file.
+ * ada/acats-2/tests/c9/c97303b.ada: New file.
+ * ada/acats-2/tests/c9/c97303c.ada: New file.
+ * ada/acats-2/tests/c9/c97304a.ada: New file.
+ * ada/acats-2/tests/c9/c97304b.ada: New file.
+ * ada/acats-2/tests/c9/c97305a.ada: New file.
+ * ada/acats-2/tests/c9/c97305b.ada: New file.
+ * ada/acats-2/tests/c9/c97305c.ada: New file.
+ * ada/acats-2/tests/c9/c97305d.ada: New file.
+ * ada/acats-2/tests/c9/c97307a.ada: New file.
+ * ada/acats-2/tests/c9/c974001.a: New file.
+ * ada/acats-2/tests/c9/c974002.a: New file.
+ * ada/acats-2/tests/c9/c974003.a: New file.
+ * ada/acats-2/tests/c9/c974004.a: New file.
+ * ada/acats-2/tests/c9/c974005.a: New file.
+ * ada/acats-2/tests/c9/c974006.a: New file.
+ * ada/acats-2/tests/c9/c974007.a: New file.
+ * ada/acats-2/tests/c9/c974008.a: New file.
+ * ada/acats-2/tests/c9/c974009.a: New file.
+ * ada/acats-2/tests/c9/c974010.a: New file.
+ * ada/acats-2/tests/c9/c974011.a: New file.
+ * ada/acats-2/tests/c9/c974012.a: New file.
+ * ada/acats-2/tests/c9/c974013.a: New file.
+ * ada/acats-2/tests/c9/c974014.a: New file.
+ * ada/acats-2/tests/c9/c980001.a: New file.
+ * ada/acats-2/tests/c9/c980002.a: New file.
+ * ada/acats-2/tests/c9/c980003.a: New file.
+ * ada/acats-2/tests/c9/c99004a.ada: New file.
+ * ada/acats-2/tests/c9/c99005a.ada: New file.
+ * ada/acats-2/tests/c9/c9a003a.ada: New file.
+ * ada/acats-2/tests/c9/c9a004a.ada: New file.
+ * ada/acats-2/tests/c9/c9a007a.ada: New file.
+ * ada/acats-2/tests/c9/c9a009a.ada: New file.
+ * ada/acats-2/tests/c9/c9a009c.ada: New file.
+ * ada/acats-2/tests/c9/c9a009f.ada: New file.
+ * ada/acats-2/tests/c9/c9a009g.ada: New file.
+ * ada/acats-2/tests/c9/c9a009h.ada: New file.
+ * ada/acats-2/tests/c9/c9a010a.ada: New file.
+ * ada/acats-2/tests/c9/c9a011a.ada: New file.
+ * ada/acats-2/tests/c9/c9a011b.ada: New file.
+ * ada/acats-2/tests/ca/ca1003a.ada: New file.
+ * ada/acats-2/tests/ca/ca1004a.ada: New file.
+ * ada/acats-2/tests/ca/ca1005a.ada: New file.
+ * ada/acats-2/tests/ca/ca1006a.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a0.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a1.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a2.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a3.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a4.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a5.ada: New file.
+ * ada/acats-2/tests/ca/ca1011a6.ada: New file.
+ * ada/acats-2/tests/ca/ca1012a0.ada: New file.
+ * ada/acats-2/tests/ca/ca1012a1.ada: New file.
+ * ada/acats-2/tests/ca/ca1012a2.ada: New file.
+ * ada/acats-2/tests/ca/ca1012a3.ada: New file.
+ * ada/acats-2/tests/ca/ca1012a4.ada: New file.
+ * ada/acats-2/tests/ca/ca1012b0.ada: New file.
+ * ada/acats-2/tests/ca/ca1012b2.ada: New file.
+ * ada/acats-2/tests/ca/ca1012b4.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a0.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a1.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a2.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a3.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a4.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a5.ada: New file.
+ * ada/acats-2/tests/ca/ca1013a6.ada: New file.
+ * ada/acats-2/tests/ca/ca1014a0.ada: New file.
+ * ada/acats-2/tests/ca/ca1014a1.ada: New file.
+ * ada/acats-2/tests/ca/ca1014a2.ada: New file.
+ * ada/acats-2/tests/ca/ca1014a3.ada: New file.
+ * ada/acats-2/tests/ca/ca1020e0.ada: New file.
+ * ada/acats-2/tests/ca/ca1020e1.ada: New file.
+ * ada/acats-2/tests/ca/ca1020e2.ada: New file.
+ * ada/acats-2/tests/ca/ca1020e3.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a0.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a1.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a2.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a3.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a4.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a5.ada: New file.
+ * ada/acats-2/tests/ca/ca1022a6.ada: New file.
+ * ada/acats-2/tests/ca/ca11001.a: New file.
+ * ada/acats-2/tests/ca/ca11002.a: New file.
+ * ada/acats-2/tests/ca/ca11003.a: New file.
+ * ada/acats-2/tests/ca/ca110040.a: New file.
+ * ada/acats-2/tests/ca/ca110041.a: New file.
+ * ada/acats-2/tests/ca/ca110042.am: New file.
+ * ada/acats-2/tests/ca/ca110050.a: New file.
+ * ada/acats-2/tests/ca/ca110051.am: New file.
+ * ada/acats-2/tests/ca/ca11006.a: New file.
+ * ada/acats-2/tests/ca/ca11007.a: New file.
+ * ada/acats-2/tests/ca/ca11008.a: New file.
+ * ada/acats-2/tests/ca/ca11009.a: New file.
+ * ada/acats-2/tests/ca/ca11010.a: New file.
+ * ada/acats-2/tests/ca/ca11011.a: New file.
+ * ada/acats-2/tests/ca/ca11012.a: New file.
+ * ada/acats-2/tests/ca/ca11013.a: New file.
+ * ada/acats-2/tests/ca/ca11014.a: New file.
+ * ada/acats-2/tests/ca/ca11015.a: New file.
+ * ada/acats-2/tests/ca/ca11016.a: New file.
+ * ada/acats-2/tests/ca/ca11017.a: New file.
+ * ada/acats-2/tests/ca/ca11018.a: New file.
+ * ada/acats-2/tests/ca/ca11019.a: New file.
+ * ada/acats-2/tests/ca/ca11020.a: New file.
+ * ada/acats-2/tests/ca/ca11021.a: New file.
+ * ada/acats-2/tests/ca/ca11022.a: New file.
+ * ada/acats-2/tests/ca/ca1102a0.ada: New file.
+ * ada/acats-2/tests/ca/ca1102a1.ada: New file.
+ * ada/acats-2/tests/ca/ca1102a2.ada: New file.
+ * ada/acats-2/tests/ca/ca1106a.ada: New file.
+ * ada/acats-2/tests/ca/ca1108a.ada: New file.
+ * ada/acats-2/tests/ca/ca1108b.ada: New file.
+ * ada/acats-2/tests/ca/ca11a01.a: New file.
+ * ada/acats-2/tests/ca/ca11a02.a: New file.
+ * ada/acats-2/tests/ca/ca11b01.a: New file.
+ * ada/acats-2/tests/ca/ca11b02.a: New file.
+ * ada/acats-2/tests/ca/ca11c01.a: New file.
+ * ada/acats-2/tests/ca/ca11c02.a: New file.
+ * ada/acats-2/tests/ca/ca11c03.a: New file.
+ * ada/acats-2/tests/ca/ca11d010.a: New file.
+ * ada/acats-2/tests/ca/ca11d011.a: New file.
+ * ada/acats-2/tests/ca/ca11d012.a: New file.
+ * ada/acats-2/tests/ca/ca11d013.am: New file.
+ * ada/acats-2/tests/ca/ca11d02.a: New file.
+ * ada/acats-2/tests/ca/ca11d03.a: New file.
+ * ada/acats-2/tests/ca/ca13001.a: New file.
+ * ada/acats-2/tests/ca/ca13002.a: New file.
+ * ada/acats-2/tests/ca/ca13003.a: New file.
+ * ada/acats-2/tests/ca/ca13a01.a: New file.
+ * ada/acats-2/tests/ca/ca13a02.a: New file.
+ * ada/acats-2/tests/ca/ca140230.a: New file.
+ * ada/acats-2/tests/ca/ca140231.a: New file.
+ * ada/acats-2/tests/ca/ca140232.am: New file.
+ * ada/acats-2/tests/ca/ca140233.a: New file.
+ * ada/acats-2/tests/ca/ca140280.a: New file.
+ * ada/acats-2/tests/ca/ca140281.a: New file.
+ * ada/acats-2/tests/ca/ca140282.a: New file.
+ * ada/acats-2/tests/ca/ca140283.am: New file.
+ * ada/acats-2/tests/ca/ca15003.a: New file.
+ * ada/acats-2/tests/ca/ca200020.a: New file.
+ * ada/acats-2/tests/ca/ca200021.a: New file.
+ * ada/acats-2/tests/ca/ca200022.am: New file.
+ * ada/acats-2/tests/ca/ca2001h0.ada: New file.
+ * ada/acats-2/tests/ca/ca2001h1.ada: New file.
+ * ada/acats-2/tests/ca/ca2001h2.ada: New file.
+ * ada/acats-2/tests/ca/ca2001h3.ada: New file.
+ * ada/acats-2/tests/ca/ca2002a0.ada: New file.
+ * ada/acats-2/tests/ca/ca2002a1.ada: New file.
+ * ada/acats-2/tests/ca/ca2002a2.ada: New file.
+ * ada/acats-2/tests/ca/ca2003a0.ada: New file.
+ * ada/acats-2/tests/ca/ca2003a1.ada: New file.
+ * ada/acats-2/tests/ca/ca2004a0.ada: New file.
+ * ada/acats-2/tests/ca/ca2004a1.ada: New file.
+ * ada/acats-2/tests/ca/ca2004a2.ada: New file.
+ * ada/acats-2/tests/ca/ca2004a3.ada: New file.
+ * ada/acats-2/tests/ca/ca2004a4.ada: New file.
+ * ada/acats-2/tests/ca/ca2007a0.ada: New file.
+ * ada/acats-2/tests/ca/ca2007a1.ada: New file.
+ * ada/acats-2/tests/ca/ca2007a2.ada: New file.
+ * ada/acats-2/tests/ca/ca2007a3.ada: New file.
+ * ada/acats-2/tests/ca/ca2008a0.ada: New file.
+ * ada/acats-2/tests/ca/ca2008a1.ada: New file.
+ * ada/acats-2/tests/ca/ca2008a2.ada: New file.
+ * ada/acats-2/tests/ca/ca2009a.ada: New file.
+ * ada/acats-2/tests/ca/ca2009c0.ada: New file.
+ * ada/acats-2/tests/ca/ca2009c1.ada: New file.
+ * ada/acats-2/tests/ca/ca2009d.ada: New file.
+ * ada/acats-2/tests/ca/ca2009f0.ada: New file.
+ * ada/acats-2/tests/ca/ca2009f1.ada: New file.
+ * ada/acats-2/tests/ca/ca2009f2.ada: New file.
+ * ada/acats-2/tests/ca/ca2011b.ada: New file.
+ * ada/acats-2/tests/ca/ca21001.a: New file.
+ * ada/acats-2/tests/ca/ca3011a0.ada: New file.
+ * ada/acats-2/tests/ca/ca3011a1.ada: New file.
+ * ada/acats-2/tests/ca/ca3011a2.ada: New file.
+ * ada/acats-2/tests/ca/ca3011a3.ada: New file.
+ * ada/acats-2/tests/ca/ca3011a4.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a0.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a1.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a2.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a3.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a4.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a5.ada: New file.
+ * ada/acats-2/tests/ca/ca5003a6.ada: New file.
+ * ada/acats-2/tests/ca/ca5003b0.ada: New file.
+ * ada/acats-2/tests/ca/ca5003b1.ada: New file.
+ * ada/acats-2/tests/ca/ca5003b2.ada: New file.
+ * ada/acats-2/tests/ca/ca5003b3.ada: New file.
+ * ada/acats-2/tests/ca/ca5003b4.ada: New file.
+ * ada/acats-2/tests/ca/ca5003b5.ada: New file.
+ * ada/acats-2/tests/ca/ca5004a.ada: New file.
+ * ada/acats-2/tests/ca/ca5004b0.ada: New file.
+ * ada/acats-2/tests/ca/ca5004b1.ada: New file.
+ * ada/acats-2/tests/ca/ca5004b2.ada: New file.
+ * ada/acats-2/tests/ca/ca5006a.ada: New file.
+ * ada/acats-2/tests/cb/cb10002.a: New file.
+ * ada/acats-2/tests/cb/cb1001a.ada: New file.
+ * ada/acats-2/tests/cb/cb1004a.ada: New file.
+ * ada/acats-2/tests/cb/cb1005a.ada: New file.
+ * ada/acats-2/tests/cb/cb1010a.ada: New file.
+ * ada/acats-2/tests/cb/cb1010c.ada: New file.
+ * ada/acats-2/tests/cb/cb1010d.ada: New file.
+ * ada/acats-2/tests/cb/cb20001.a: New file.
+ * ada/acats-2/tests/cb/cb20003.a: New file.
+ * ada/acats-2/tests/cb/cb20004.a: New file.
+ * ada/acats-2/tests/cb/cb20005.a: New file.
+ * ada/acats-2/tests/cb/cb20006.a: New file.
+ * ada/acats-2/tests/cb/cb20007.a: New file.
+ * ada/acats-2/tests/cb/cb2004a.ada: New file.
+ * ada/acats-2/tests/cb/cb2005a.ada: New file.
+ * ada/acats-2/tests/cb/cb2006a.ada: New file.
+ * ada/acats-2/tests/cb/cb2007a.ada: New file.
+ * ada/acats-2/tests/cb/cb20a02.a: New file.
+ * ada/acats-2/tests/cb/cb3003a.ada: New file.
+ * ada/acats-2/tests/cb/cb3003b.ada: New file.
+ * ada/acats-2/tests/cb/cb3004a.ada: New file.
+ * ada/acats-2/tests/cb/cb40005.a: New file.
+ * ada/acats-2/tests/cb/cb4001a.ada: New file.
+ * ada/acats-2/tests/cb/cb4002a.ada: New file.
+ * ada/acats-2/tests/cb/cb4003a.ada: New file.
+ * ada/acats-2/tests/cb/cb4004a.ada: New file.
+ * ada/acats-2/tests/cb/cb4005a.ada: New file.
+ * ada/acats-2/tests/cb/cb4006a.ada: New file.
+ * ada/acats-2/tests/cb/cb4007a.ada: New file.
+ * ada/acats-2/tests/cb/cb4008a.ada: New file.
+ * ada/acats-2/tests/cb/cb4009a.ada: New file.
+ * ada/acats-2/tests/cb/cb4013a.ada: New file.
+ * ada/acats-2/tests/cb/cb40a01.a: New file.
+ * ada/acats-2/tests/cb/cb40a020.a: New file.
+ * ada/acats-2/tests/cb/cb40a021.am: New file.
+ * ada/acats-2/tests/cb/cb40a030.a: New file.
+ * ada/acats-2/tests/cb/cb40a031.am: New file.
+ * ada/acats-2/tests/cb/cb40a04.a: New file.
+ * ada/acats-2/tests/cb/cb41001.a: New file.
+ * ada/acats-2/tests/cb/cb41002.a: New file.
+ * ada/acats-2/tests/cb/cb41003.a: New file.
+ * ada/acats-2/tests/cb/cb41004.a: New file.
+ * ada/acats-2/tests/cb/cb5001a.ada: New file.
+ * ada/acats-2/tests/cb/cb5001b.ada: New file.
+ * ada/acats-2/tests/cb/cb5002a.ada: New file.
+ * ada/acats-2/tests/cc/cc1004a.ada: New file.
+ * ada/acats-2/tests/cc/cc1005b.ada: New file.
+ * ada/acats-2/tests/cc/cc1010a.ada: New file.
+ * ada/acats-2/tests/cc/cc1010b.ada: New file.
+ * ada/acats-2/tests/cc/cc1018a.ada: New file.
+ * ada/acats-2/tests/cc/cc1104c.ada: New file.
+ * ada/acats-2/tests/cc/cc1107b.ada: New file.
+ * ada/acats-2/tests/cc/cc1111a.ada: New file.
+ * ada/acats-2/tests/cc/cc1204a.ada: New file.
+ * ada/acats-2/tests/cc/cc1207b.ada: New file.
+ * ada/acats-2/tests/cc/cc1220a.ada: New file.
+ * ada/acats-2/tests/cc/cc1221a.ada: New file.
+ * ada/acats-2/tests/cc/cc1221b.ada: New file.
+ * ada/acats-2/tests/cc/cc1221c.ada: New file.
+ * ada/acats-2/tests/cc/cc1221d.ada: New file.
+ * ada/acats-2/tests/cc/cc1222a.ada: New file.
+ * ada/acats-2/tests/cc/cc1223a.ada: New file.
+ * ada/acats-2/tests/cc/cc1224a.ada: New file.
+ * ada/acats-2/tests/cc/cc1225a.tst: New file.
+ * ada/acats-2/tests/cc/cc1226b.ada: New file.
+ * ada/acats-2/tests/cc/cc1227a.ada: New file.
+ * ada/acats-2/tests/cc/cc1301a.ada: New file.
+ * ada/acats-2/tests/cc/cc1302a.ada: New file.
+ * ada/acats-2/tests/cc/cc1304a.ada: New file.
+ * ada/acats-2/tests/cc/cc1304b.ada: New file.
+ * ada/acats-2/tests/cc/cc1307a.ada: New file.
+ * ada/acats-2/tests/cc/cc1307b.ada: New file.
+ * ada/acats-2/tests/cc/cc1308a.ada: New file.
+ * ada/acats-2/tests/cc/cc1310a.ada: New file.
+ * ada/acats-2/tests/cc/cc1311a.ada: New file.
+ * ada/acats-2/tests/cc/cc1311b.ada: New file.
+ * ada/acats-2/tests/cc/cc2002a.ada: New file.
+ * ada/acats-2/tests/cc/cc30001.a: New file.
+ * ada/acats-2/tests/cc/cc30002.a: New file.
+ * ada/acats-2/tests/cc/cc3004a.ada: New file.
+ * ada/acats-2/tests/cc/cc3007a.ada: New file.
+ * ada/acats-2/tests/cc/cc3007b.ada: New file.
+ * ada/acats-2/tests/cc/cc3011a.ada: New file.
+ * ada/acats-2/tests/cc/cc3011d.ada: New file.
+ * ada/acats-2/tests/cc/cc3012a.ada: New file.
+ * ada/acats-2/tests/cc/cc3015a.ada: New file.
+ * ada/acats-2/tests/cc/cc3016b.ada: New file.
+ * ada/acats-2/tests/cc/cc3016c.ada: New file.
+ * ada/acats-2/tests/cc/cc3016f.ada: New file.
+ * ada/acats-2/tests/cc/cc3016i.ada: New file.
+ * ada/acats-2/tests/cc/cc3017b.ada: New file.
+ * ada/acats-2/tests/cc/cc3017c.ada: New file.
+ * ada/acats-2/tests/cc/cc3019a.ada: New file.
+ * ada/acats-2/tests/cc/cc3019b0.ada: New file.
+ * ada/acats-2/tests/cc/cc3019b1.ada: New file.
+ * ada/acats-2/tests/cc/cc3019b2.ada: New file.
+ * ada/acats-2/tests/cc/cc3019c0.ada: New file.
+ * ada/acats-2/tests/cc/cc3019c1.ada: New file.
+ * ada/acats-2/tests/cc/cc3019c2.ada: New file.
+ * ada/acats-2/tests/cc/cc3106b.ada: New file.
+ * ada/acats-2/tests/cc/cc3120a.ada: New file.
+ * ada/acats-2/tests/cc/cc3120b.ada: New file.
+ * ada/acats-2/tests/cc/cc3121a.ada: New file.
+ * ada/acats-2/tests/cc/cc3123a.ada: New file.
+ * ada/acats-2/tests/cc/cc3125a.ada: New file.
+ * ada/acats-2/tests/cc/cc3125b.ada: New file.
+ * ada/acats-2/tests/cc/cc3125c.ada: New file.
+ * ada/acats-2/tests/cc/cc3125d.ada: New file.
+ * ada/acats-2/tests/cc/cc3126a.ada: New file.
+ * ada/acats-2/tests/cc/cc3127a.ada: New file.
+ * ada/acats-2/tests/cc/cc3128a.ada: New file.
+ * ada/acats-2/tests/cc/cc3203a.ada: New file.
+ * ada/acats-2/tests/cc/cc3207b.ada: New file.
+ * ada/acats-2/tests/cc/cc3220a.ada: New file.
+ * ada/acats-2/tests/cc/cc3221a.ada: New file.
+ * ada/acats-2/tests/cc/cc3222a.ada: New file.
+ * ada/acats-2/tests/cc/cc3223a.ada: New file.
+ * ada/acats-2/tests/cc/cc3224a.ada: New file.
+ * ada/acats-2/tests/cc/cc3225a.ada: New file.
+ * ada/acats-2/tests/cc/cc3230a.ada: New file.
+ * ada/acats-2/tests/cc/cc3231a.ada: New file.
+ * ada/acats-2/tests/cc/cc3232a.ada: New file.
+ * ada/acats-2/tests/cc/cc3233a.ada: New file.
+ * ada/acats-2/tests/cc/cc3234a.ada: New file.
+ * ada/acats-2/tests/cc/cc3235a.ada: New file.
+ * ada/acats-2/tests/cc/cc3236a.ada: New file.
+ * ada/acats-2/tests/cc/cc3240a.ada: New file.
+ * ada/acats-2/tests/cc/cc3305a.ada: New file.
+ * ada/acats-2/tests/cc/cc3305b.ada: New file.
+ * ada/acats-2/tests/cc/cc3305c.ada: New file.
+ * ada/acats-2/tests/cc/cc3305d.ada: New file.
+ * ada/acats-2/tests/cc/cc3601a.ada: New file.
+ * ada/acats-2/tests/cc/cc3601c.ada: New file.
+ * ada/acats-2/tests/cc/cc3602a.ada: New file.
+ * ada/acats-2/tests/cc/cc3603a.ada: New file.
+ * ada/acats-2/tests/cc/cc3605a.ada: New file.
+ * ada/acats-2/tests/cc/cc3606a.ada: New file.
+ * ada/acats-2/tests/cc/cc3606b.ada: New file.
+ * ada/acats-2/tests/cc/cc3607b.ada: New file.
+ * ada/acats-2/tests/cc/cc40001.a: New file.
+ * ada/acats-2/tests/cc/cc50001.a: New file.
+ * ada/acats-2/tests/cc/cc50a01.a: New file.
+ * ada/acats-2/tests/cc/cc50a02.a: New file.
+ * ada/acats-2/tests/cc/cc51001.a: New file.
+ * ada/acats-2/tests/cc/cc51002.a: New file.
+ * ada/acats-2/tests/cc/cc51003.a: New file.
+ * ada/acats-2/tests/cc/cc51004.a: New file.
+ * ada/acats-2/tests/cc/cc51006.a: New file.
+ * ada/acats-2/tests/cc/cc51007.a: New file.
+ * ada/acats-2/tests/cc/cc51008.a: New file.
+ * ada/acats-2/tests/cc/cc51a01.a: New file.
+ * ada/acats-2/tests/cc/cc51b03.a: New file.
+ * ada/acats-2/tests/cc/cc51d01.a: New file.
+ * ada/acats-2/tests/cc/cc51d02.a: New file.
+ * ada/acats-2/tests/cc/cc54001.a: New file.
+ * ada/acats-2/tests/cc/cc54002.a: New file.
+ * ada/acats-2/tests/cc/cc54003.a: New file.
+ * ada/acats-2/tests/cc/cc54004.a: New file.
+ * ada/acats-2/tests/cc/cc70001.a: New file.
+ * ada/acats-2/tests/cc/cc70002.a: New file.
+ * ada/acats-2/tests/cc/cc70003.a: New file.
+ * ada/acats-2/tests/cc/cc70a01.a: New file.
+ * ada/acats-2/tests/cc/cc70a02.a: New file.
+ * ada/acats-2/tests/cc/cc70b01.a: New file.
+ * ada/acats-2/tests/cc/cc70b02.a: New file.
+ * ada/acats-2/tests/cc/cc70c01.a: New file.
+ * ada/acats-2/tests/cc/cc70c02.a: New file.
+ * ada/acats-2/tests/cd/cd10001.a: New file.
+ * ada/acats-2/tests/cd/cd10002.a: New file.
+ * ada/acats-2/tests/cd/cd1009a.ada: New file.
+ * ada/acats-2/tests/cd/cd1009b.ada: New file.
+ * ada/acats-2/tests/cd/cd1009d.ada: New file.
+ * ada/acats-2/tests/cd/cd1009e.ada: New file.
+ * ada/acats-2/tests/cd/cd1009f.ada: New file.
+ * ada/acats-2/tests/cd/cd1009g.ada: New file.
+ * ada/acats-2/tests/cd/cd1009h.ada: New file.
+ * ada/acats-2/tests/cd/cd1009i.ada: New file.
+ * ada/acats-2/tests/cd/cd1009j.ada: New file.
+ * ada/acats-2/tests/cd/cd1009k.tst: New file.
+ * ada/acats-2/tests/cd/cd1009l.ada: New file.
+ * ada/acats-2/tests/cd/cd1009m.ada: New file.
+ * ada/acats-2/tests/cd/cd1009n.ada: New file.
+ * ada/acats-2/tests/cd/cd1009o.ada: New file.
+ * ada/acats-2/tests/cd/cd1009p.ada: New file.
+ * ada/acats-2/tests/cd/cd1009q.ada: New file.
+ * ada/acats-2/tests/cd/cd1009r.ada: New file.
+ * ada/acats-2/tests/cd/cd1009s.ada: New file.
+ * ada/acats-2/tests/cd/cd1009t.tst: New file.
+ * ada/acats-2/tests/cd/cd1009u.tst: New file.
+ * ada/acats-2/tests/cd/cd1009v.ada: New file.
+ * ada/acats-2/tests/cd/cd1009w.ada: New file.
+ * ada/acats-2/tests/cd/cd1009x.ada: New file.
+ * ada/acats-2/tests/cd/cd1009y.ada: New file.
+ * ada/acats-2/tests/cd/cd1009z.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03a.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03b.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03c.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03e.tst: New file.
+ * ada/acats-2/tests/cd/cd1c03f.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03g.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03h.ada: New file.
+ * ada/acats-2/tests/cd/cd1c03i.ada: New file.
+ * ada/acats-2/tests/cd/cd1c04a.ada: New file.
+ * ada/acats-2/tests/cd/cd1c04d.ada: New file.
+ * ada/acats-2/tests/cd/cd1c04e.ada: New file.
+ * ada/acats-2/tests/cd/cd1c06a.tst: New file.
+ * ada/acats-2/tests/cd/cd20001.a: New file.
+ * ada/acats-2/tests/cd/cd2a21a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a21c.ada: New file.
+ * ada/acats-2/tests/cd/cd2a21e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a22a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a22e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a22i.ada: New file.
+ * ada/acats-2/tests/cd/cd2a22j.ada: New file.
+ * ada/acats-2/tests/cd/cd2a23a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a23e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a24a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a24e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a24i.ada: New file.
+ * ada/acats-2/tests/cd/cd2a24j.ada: New file.
+ * ada/acats-2/tests/cd/cd2a31a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a31c.ada: New file.
+ * ada/acats-2/tests/cd/cd2a31e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a32a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a32c.ada: New file.
+ * ada/acats-2/tests/cd/cd2a32e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a32g.ada: New file.
+ * ada/acats-2/tests/cd/cd2a32i.ada: New file.
+ * ada/acats-2/tests/cd/cd2a32j.ada: New file.
+ * ada/acats-2/tests/cd/cd2a51a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a53a.ada: New file.
+ * ada/acats-2/tests/cd/cd2a53e.ada: New file.
+ * ada/acats-2/tests/cd/cd2a83c.tst: New file.
+ * ada/acats-2/tests/cd/cd2a91c.tst: New file.
+ * ada/acats-2/tests/cd/cd2b11a.ada: New file.
+ * ada/acats-2/tests/cd/cd2b11b.ada: New file.
+ * ada/acats-2/tests/cd/cd2b11d.ada: New file.
+ * ada/acats-2/tests/cd/cd2b11e.ada: New file.
+ * ada/acats-2/tests/cd/cd2b11f.ada: New file.
+ * ada/acats-2/tests/cd/cd2b15c.ada: New file.
+ * ada/acats-2/tests/cd/cd2b16a.ada: New file.
+ * ada/acats-2/tests/cd/cd2c11a.tst: New file.
+ * ada/acats-2/tests/cd/cd2c11d.tst: New file.
+ * ada/acats-2/tests/cd/cd2d11a.ada: New file.
+ * ada/acats-2/tests/cd/cd2d13a.ada: New file.
+ * ada/acats-2/tests/cd/cd30001.a: New file.
+ * ada/acats-2/tests/cd/cd30002.a: New file.
+ * ada/acats-2/tests/cd/cd30003.a: New file.
+ * ada/acats-2/tests/cd/cd30004.a: New file.
+ * ada/acats-2/tests/cd/cd300050.am: New file.
+ * ada/acats-2/tests/cd/cd300051.c: New file.
+ * ada/acats-2/tests/cd/cd30011.a: New file.
+ * ada/acats-2/tests/cd/cd30012.a: New file.
+ * ada/acats-2/tests/cd/cd3014a.ada: New file.
+ * ada/acats-2/tests/cd/cd3014c.ada: New file.
+ * ada/acats-2/tests/cd/cd3014d.ada: New file.
+ * ada/acats-2/tests/cd/cd3014f.ada: New file.
+ * ada/acats-2/tests/cd/cd3015a.ada: New file.
+ * ada/acats-2/tests/cd/cd3015c.ada: New file.
+ * ada/acats-2/tests/cd/cd3015e.ada: New file.
+ * ada/acats-2/tests/cd/cd3015f.ada: New file.
+ * ada/acats-2/tests/cd/cd3015g.ada: New file.
+ * ada/acats-2/tests/cd/cd3015h.ada: New file.
+ * ada/acats-2/tests/cd/cd3015i.ada: New file.
+ * ada/acats-2/tests/cd/cd3015k.ada: New file.
+ * ada/acats-2/tests/cd/cd3021a.ada: New file.
+ * ada/acats-2/tests/cd/cd33001.a: New file.
+ * ada/acats-2/tests/cd/cd33002.a: New file.
+ * ada/acats-2/tests/cd/cd40001.a: New file.
+ * ada/acats-2/tests/cd/cd4031a.ada: New file.
+ * ada/acats-2/tests/cd/cd4041a.tst: New file.
+ * ada/acats-2/tests/cd/cd4051a.ada: New file.
+ * ada/acats-2/tests/cd/cd4051b.ada: New file.
+ * ada/acats-2/tests/cd/cd4051c.ada: New file.
+ * ada/acats-2/tests/cd/cd4051d.ada: New file.
+ * ada/acats-2/tests/cd/cd5003a.ada: New file.
+ * ada/acats-2/tests/cd/cd5003b.ada: New file.
+ * ada/acats-2/tests/cd/cd5003c.ada: New file.
+ * ada/acats-2/tests/cd/cd5003d.ada: New file.
+ * ada/acats-2/tests/cd/cd5003e.ada: New file.
+ * ada/acats-2/tests/cd/cd5003f.ada: New file.
+ * ada/acats-2/tests/cd/cd5003g.ada: New file.
+ * ada/acats-2/tests/cd/cd5003h.ada: New file.
+ * ada/acats-2/tests/cd/cd5003i.ada: New file.
+ * ada/acats-2/tests/cd/cd5011a.ada: New file.
+ * ada/acats-2/tests/cd/cd5011c.ada: New file.
+ * ada/acats-2/tests/cd/cd5011e.ada: New file.
+ * ada/acats-2/tests/cd/cd5011g.ada: New file.
+ * ada/acats-2/tests/cd/cd5011i.ada: New file.
+ * ada/acats-2/tests/cd/cd5011k.ada: New file.
+ * ada/acats-2/tests/cd/cd5011m.ada: New file.
+ * ada/acats-2/tests/cd/cd5011q.ada: New file.
+ * ada/acats-2/tests/cd/cd5011s.ada: New file.
+ * ada/acats-2/tests/cd/cd5012a.ada: New file.
+ * ada/acats-2/tests/cd/cd5012b.ada: New file.
+ * ada/acats-2/tests/cd/cd5012e.ada: New file.
+ * ada/acats-2/tests/cd/cd5012f.ada: New file.
+ * ada/acats-2/tests/cd/cd5012i.ada: New file.
+ * ada/acats-2/tests/cd/cd5012m.ada: New file.
+ * ada/acats-2/tests/cd/cd5013a.ada: New file.
+ * ada/acats-2/tests/cd/cd5013c.ada: New file.
+ * ada/acats-2/tests/cd/cd5013e.ada: New file.
+ * ada/acats-2/tests/cd/cd5013g.ada: New file.
+ * ada/acats-2/tests/cd/cd5013i.ada: New file.
+ * ada/acats-2/tests/cd/cd5013k.ada: New file.
+ * ada/acats-2/tests/cd/cd5013m.ada: New file.
+ * ada/acats-2/tests/cd/cd5013o.ada: New file.
+ * ada/acats-2/tests/cd/cd5014a.ada: New file.
+ * ada/acats-2/tests/cd/cd5014c.ada: New file.
+ * ada/acats-2/tests/cd/cd5014e.ada: New file.
+ * ada/acats-2/tests/cd/cd5014g.ada: New file.
+ * ada/acats-2/tests/cd/cd5014i.ada: New file.
+ * ada/acats-2/tests/cd/cd5014k.ada: New file.
+ * ada/acats-2/tests/cd/cd5014m.ada: New file.
+ * ada/acats-2/tests/cd/cd5014o.ada: New file.
+ * ada/acats-2/tests/cd/cd5014t.ada: New file.
+ * ada/acats-2/tests/cd/cd5014v.ada: New file.
+ * ada/acats-2/tests/cd/cd5014x.ada: New file.
+ * ada/acats-2/tests/cd/cd5014y.ada: New file.
+ * ada/acats-2/tests/cd/cd5014z.ada: New file.
+ * ada/acats-2/tests/cd/cd70001.a: New file.
+ * ada/acats-2/tests/cd/cd7002a.ada: New file.
+ * ada/acats-2/tests/cd/cd7007b.ada: New file.
+ * ada/acats-2/tests/cd/cd7101d.ada: New file.
+ * ada/acats-2/tests/cd/cd7101e.dep: New file.
+ * ada/acats-2/tests/cd/cd7101f.dep: New file.
+ * ada/acats-2/tests/cd/cd7101g.tst: New file.
+ * ada/acats-2/tests/cd/cd7103d.ada: New file.
+ * ada/acats-2/tests/cd/cd7202a.ada: New file.
+ * ada/acats-2/tests/cd/cd7204b.ada: New file.
+ * ada/acats-2/tests/cd/cd7204c.ada: New file.
+ * ada/acats-2/tests/cd/cd72a01.a: New file.
+ * ada/acats-2/tests/cd/cd72a02.a: New file.
+ * ada/acats-2/tests/cd/cd7305a.ada: New file.
+ * ada/acats-2/tests/cd/cd90001.a: New file.
+ * ada/acats-2/tests/cd/cd92001.a: New file.
+ * ada/acats-2/tests/cd/cda201a.ada: New file.
+ * ada/acats-2/tests/cd/cda201b.ada: New file.
+ * ada/acats-2/tests/cd/cda201c.ada: New file.
+ * ada/acats-2/tests/cd/cda201e.ada: New file.
+ * ada/acats-2/tests/cd/cdb0a01.a: New file.
+ * ada/acats-2/tests/cd/cdb0a02.a: New file.
+ * ada/acats-2/tests/cd/cdd1001.a: New file.
+ * ada/acats-2/tests/cd/cdd2001.a: New file.
+ * ada/acats-2/tests/cd/cdd2a01.a: New file.
+ * ada/acats-2/tests/cd/cdd2a02.a: New file.
+ * ada/acats-2/tests/cd/cdd2a03.a: New file.
+ * ada/acats-2/tests/cd/cde0001.a: New file.
+ * ada/acats-2/tests/ce/ce2102a.ada: New file.
+ * ada/acats-2/tests/ce/ce2102b.ada: New file.
+ * ada/acats-2/tests/ce/ce2102c.tst: New file.
+ * ada/acats-2/tests/ce/ce2102d.ada: New file.
+ * ada/acats-2/tests/ce/ce2102e.ada: New file.
+ * ada/acats-2/tests/ce/ce2102f.ada: New file.
+ * ada/acats-2/tests/ce/ce2102g.ada: New file.
+ * ada/acats-2/tests/ce/ce2102h.tst: New file.
+ * ada/acats-2/tests/ce/ce2102i.ada: New file.
+ * ada/acats-2/tests/ce/ce2102j.ada: New file.
+ * ada/acats-2/tests/ce/ce2102k.ada: New file.
+ * ada/acats-2/tests/ce/ce2102l.ada: New file.
+ * ada/acats-2/tests/ce/ce2102m.ada: New file.
+ * ada/acats-2/tests/ce/ce2102n.ada: New file.
+ * ada/acats-2/tests/ce/ce2102o.ada: New file.
+ * ada/acats-2/tests/ce/ce2102p.ada: New file.
+ * ada/acats-2/tests/ce/ce2102q.ada: New file.
+ * ada/acats-2/tests/ce/ce2102r.ada: New file.
+ * ada/acats-2/tests/ce/ce2102s.ada: New file.
+ * ada/acats-2/tests/ce/ce2102t.ada: New file.
+ * ada/acats-2/tests/ce/ce2102u.ada: New file.
+ * ada/acats-2/tests/ce/ce2102v.ada: New file.
+ * ada/acats-2/tests/ce/ce2102w.ada: New file.
+ * ada/acats-2/tests/ce/ce2102x.ada: New file.
+ * ada/acats-2/tests/ce/ce2102y.ada: New file.
+ * ada/acats-2/tests/ce/ce2103a.tst: New file.
+ * ada/acats-2/tests/ce/ce2103b.tst: New file.
+ * ada/acats-2/tests/ce/ce2103c.ada: New file.
+ * ada/acats-2/tests/ce/ce2103d.ada: New file.
+ * ada/acats-2/tests/ce/ce2104a.ada: New file.
+ * ada/acats-2/tests/ce/ce2104b.ada: New file.
+ * ada/acats-2/tests/ce/ce2104c.ada: New file.
+ * ada/acats-2/tests/ce/ce2104d.ada: New file.
+ * ada/acats-2/tests/ce/ce2106a.ada: New file.
+ * ada/acats-2/tests/ce/ce2106b.ada: New file.
+ * ada/acats-2/tests/ce/ce2108e.ada: New file.
+ * ada/acats-2/tests/ce/ce2108f.ada: New file.
+ * ada/acats-2/tests/ce/ce2108g.ada: New file.
+ * ada/acats-2/tests/ce/ce2108h.ada: New file.
+ * ada/acats-2/tests/ce/ce2109a.ada: New file.
+ * ada/acats-2/tests/ce/ce2109b.ada: New file.
+ * ada/acats-2/tests/ce/ce2109c.ada: New file.
+ * ada/acats-2/tests/ce/ce2110a.ada: New file.
+ * ada/acats-2/tests/ce/ce2110c.ada: New file.
+ * ada/acats-2/tests/ce/ce2111a.ada: New file.
+ * ada/acats-2/tests/ce/ce2111b.ada: New file.
+ * ada/acats-2/tests/ce/ce2111c.ada: New file.
+ * ada/acats-2/tests/ce/ce2111e.ada: New file.
+ * ada/acats-2/tests/ce/ce2111f.ada: New file.
+ * ada/acats-2/tests/ce/ce2111g.ada: New file.
+ * ada/acats-2/tests/ce/ce2111i.ada: New file.
+ * ada/acats-2/tests/ce/ce2201a.ada: New file.
+ * ada/acats-2/tests/ce/ce2201b.ada: New file.
+ * ada/acats-2/tests/ce/ce2201c.ada: New file.
+ * ada/acats-2/tests/ce/ce2201d.dep: New file.
+ * ada/acats-2/tests/ce/ce2201e.dep: New file.
+ * ada/acats-2/tests/ce/ce2201f.ada: New file.
+ * ada/acats-2/tests/ce/ce2201g.ada: New file.
+ * ada/acats-2/tests/ce/ce2201h.ada: New file.
+ * ada/acats-2/tests/ce/ce2201i.ada: New file.
+ * ada/acats-2/tests/ce/ce2201j.ada: New file.
+ * ada/acats-2/tests/ce/ce2201k.ada: New file.
+ * ada/acats-2/tests/ce/ce2201l.ada: New file.
+ * ada/acats-2/tests/ce/ce2201m.ada: New file.
+ * ada/acats-2/tests/ce/ce2201n.ada: New file.
+ * ada/acats-2/tests/ce/ce2202a.ada: New file.
+ * ada/acats-2/tests/ce/ce2203a.tst: New file.
+ * ada/acats-2/tests/ce/ce2204a.ada: New file.
+ * ada/acats-2/tests/ce/ce2204b.ada: New file.
+ * ada/acats-2/tests/ce/ce2204c.ada: New file.
+ * ada/acats-2/tests/ce/ce2204d.ada: New file.
+ * ada/acats-2/tests/ce/ce2205a.ada: New file.
+ * ada/acats-2/tests/ce/ce2206a.ada: New file.
+ * ada/acats-2/tests/ce/ce2208b.ada: New file.
+ * ada/acats-2/tests/ce/ce2401a.ada: New file.
+ * ada/acats-2/tests/ce/ce2401b.ada: New file.
+ * ada/acats-2/tests/ce/ce2401c.ada: New file.
+ * ada/acats-2/tests/ce/ce2401e.ada: New file.
+ * ada/acats-2/tests/ce/ce2401f.ada: New file.
+ * ada/acats-2/tests/ce/ce2401h.ada: New file.
+ * ada/acats-2/tests/ce/ce2401i.ada: New file.
+ * ada/acats-2/tests/ce/ce2401j.ada: New file.
+ * ada/acats-2/tests/ce/ce2401k.ada: New file.
+ * ada/acats-2/tests/ce/ce2401l.ada: New file.
+ * ada/acats-2/tests/ce/ce2402a.ada: New file.
+ * ada/acats-2/tests/ce/ce2403a.tst: New file.
+ * ada/acats-2/tests/ce/ce2404a.ada: New file.
+ * ada/acats-2/tests/ce/ce2404b.ada: New file.
+ * ada/acats-2/tests/ce/ce2405b.ada: New file.
+ * ada/acats-2/tests/ce/ce2406a.ada: New file.
+ * ada/acats-2/tests/ce/ce2407a.ada: New file.
+ * ada/acats-2/tests/ce/ce2407b.ada: New file.
+ * ada/acats-2/tests/ce/ce2408a.ada: New file.
+ * ada/acats-2/tests/ce/ce2408b.ada: New file.
+ * ada/acats-2/tests/ce/ce2409a.ada: New file.
+ * ada/acats-2/tests/ce/ce2409b.ada: New file.
+ * ada/acats-2/tests/ce/ce2410a.ada: New file.
+ * ada/acats-2/tests/ce/ce2410b.ada: New file.
+ * ada/acats-2/tests/ce/ce2411a.ada: New file.
+ * ada/acats-2/tests/ce/ce3002b.tst: New file.
+ * ada/acats-2/tests/ce/ce3002c.tst: New file.
+ * ada/acats-2/tests/ce/ce3002d.ada: New file.
+ * ada/acats-2/tests/ce/ce3002f.ada: New file.
+ * ada/acats-2/tests/ce/ce3102a.ada: New file.
+ * ada/acats-2/tests/ce/ce3102b.tst: New file.
+ * ada/acats-2/tests/ce/ce3102d.ada: New file.
+ * ada/acats-2/tests/ce/ce3102e.ada: New file.
+ * ada/acats-2/tests/ce/ce3102f.ada: New file.
+ * ada/acats-2/tests/ce/ce3102g.ada: New file.
+ * ada/acats-2/tests/ce/ce3102h.ada: New file.
+ * ada/acats-2/tests/ce/ce3102i.ada: New file.
+ * ada/acats-2/tests/ce/ce3102j.ada: New file.
+ * ada/acats-2/tests/ce/ce3102k.ada: New file.
+ * ada/acats-2/tests/ce/ce3103a.ada: New file.
+ * ada/acats-2/tests/ce/ce3104a.ada: New file.
+ * ada/acats-2/tests/ce/ce3104b.ada: New file.
+ * ada/acats-2/tests/ce/ce3104c.ada: New file.
+ * ada/acats-2/tests/ce/ce3106a.ada: New file.
+ * ada/acats-2/tests/ce/ce3106b.ada: New file.
+ * ada/acats-2/tests/ce/ce3107a.tst: New file.
+ * ada/acats-2/tests/ce/ce3107b.ada: New file.
+ * ada/acats-2/tests/ce/ce3108a.ada: New file.
+ * ada/acats-2/tests/ce/ce3108b.ada: New file.
+ * ada/acats-2/tests/ce/ce3110a.ada: New file.
+ * ada/acats-2/tests/ce/ce3112c.ada: New file.
+ * ada/acats-2/tests/ce/ce3112d.ada: New file.
+ * ada/acats-2/tests/ce/ce3114a.ada: New file.
+ * ada/acats-2/tests/ce/ce3115a.ada: New file.
+ * ada/acats-2/tests/ce/ce3201a.ada: New file.
+ * ada/acats-2/tests/ce/ce3202a.ada: New file.
+ * ada/acats-2/tests/ce/ce3206a.ada: New file.
+ * ada/acats-2/tests/ce/ce3207a.ada: New file.
+ * ada/acats-2/tests/ce/ce3301a.ada: New file.
+ * ada/acats-2/tests/ce/ce3302a.ada: New file.
+ * ada/acats-2/tests/ce/ce3303a.ada: New file.
+ * ada/acats-2/tests/ce/ce3304a.tst: New file.
+ * ada/acats-2/tests/ce/ce3305a.ada: New file.
+ * ada/acats-2/tests/ce/ce3306a.ada: New file.
+ * ada/acats-2/tests/ce/ce3401a.ada: New file.
+ * ada/acats-2/tests/ce/ce3402a.ada: New file.
+ * ada/acats-2/tests/ce/ce3402c.ada: New file.
+ * ada/acats-2/tests/ce/ce3402d.ada: New file.
+ * ada/acats-2/tests/ce/ce3402e.ada: New file.
+ * ada/acats-2/tests/ce/ce3403a.ada: New file.
+ * ada/acats-2/tests/ce/ce3403b.ada: New file.
+ * ada/acats-2/tests/ce/ce3403c.ada: New file.
+ * ada/acats-2/tests/ce/ce3403d.ada: New file.
+ * ada/acats-2/tests/ce/ce3403e.ada: New file.
+ * ada/acats-2/tests/ce/ce3403f.ada: New file.
+ * ada/acats-2/tests/ce/ce3404a.ada: New file.
+ * ada/acats-2/tests/ce/ce3404b.ada: New file.
+ * ada/acats-2/tests/ce/ce3404c.ada: New file.
+ * ada/acats-2/tests/ce/ce3404d.ada: New file.
+ * ada/acats-2/tests/ce/ce3405a.ada: New file.
+ * ada/acats-2/tests/ce/ce3405c.ada: New file.
+ * ada/acats-2/tests/ce/ce3405d.ada: New file.
+ * ada/acats-2/tests/ce/ce3406a.ada: New file.
+ * ada/acats-2/tests/ce/ce3406b.ada: New file.
+ * ada/acats-2/tests/ce/ce3406c.ada: New file.
+ * ada/acats-2/tests/ce/ce3406d.ada: New file.
+ * ada/acats-2/tests/ce/ce3407a.ada: New file.
+ * ada/acats-2/tests/ce/ce3407b.ada: New file.
+ * ada/acats-2/tests/ce/ce3407c.ada: New file.
+ * ada/acats-2/tests/ce/ce3408a.ada: New file.
+ * ada/acats-2/tests/ce/ce3408b.ada: New file.
+ * ada/acats-2/tests/ce/ce3408c.ada: New file.
+ * ada/acats-2/tests/ce/ce3409a.ada: New file.
+ * ada/acats-2/tests/ce/ce3409b.ada: New file.
+ * ada/acats-2/tests/ce/ce3409c.ada: New file.
+ * ada/acats-2/tests/ce/ce3409d.ada: New file.
+ * ada/acats-2/tests/ce/ce3409e.ada: New file.
+ * ada/acats-2/tests/ce/ce3410a.ada: New file.
+ * ada/acats-2/tests/ce/ce3410b.ada: New file.
+ * ada/acats-2/tests/ce/ce3410c.ada: New file.
+ * ada/acats-2/tests/ce/ce3410d.ada: New file.
+ * ada/acats-2/tests/ce/ce3410e.ada: New file.
+ * ada/acats-2/tests/ce/ce3411a.ada: New file.
+ * ada/acats-2/tests/ce/ce3411c.ada: New file.
+ * ada/acats-2/tests/ce/ce3412a.ada: New file.
+ * ada/acats-2/tests/ce/ce3413a.ada: New file.
+ * ada/acats-2/tests/ce/ce3413b.ada: New file.
+ * ada/acats-2/tests/ce/ce3413c.ada: New file.
+ * ada/acats-2/tests/ce/ce3414a.ada: New file.
+ * ada/acats-2/tests/ce/ce3601a.ada: New file.
+ * ada/acats-2/tests/ce/ce3602a.ada: New file.
+ * ada/acats-2/tests/ce/ce3602b.ada: New file.
+ * ada/acats-2/tests/ce/ce3602c.ada: New file.
+ * ada/acats-2/tests/ce/ce3602d.ada: New file.
+ * ada/acats-2/tests/ce/ce3603a.ada: New file.
+ * ada/acats-2/tests/ce/ce3604a.ada: New file.
+ * ada/acats-2/tests/ce/ce3604b.ada: New file.
+ * ada/acats-2/tests/ce/ce3605a.ada: New file.
+ * ada/acats-2/tests/ce/ce3605b.ada: New file.
+ * ada/acats-2/tests/ce/ce3605c.ada: New file.
+ * ada/acats-2/tests/ce/ce3605d.ada: New file.
+ * ada/acats-2/tests/ce/ce3605e.ada: New file.
+ * ada/acats-2/tests/ce/ce3606a.ada: New file.
+ * ada/acats-2/tests/ce/ce3606b.ada: New file.
+ * ada/acats-2/tests/ce/ce3701a.ada: New file.
+ * ada/acats-2/tests/ce/ce3704a.ada: New file.
+ * ada/acats-2/tests/ce/ce3704b.ada: New file.
+ * ada/acats-2/tests/ce/ce3704c.ada: New file.
+ * ada/acats-2/tests/ce/ce3704d.ada: New file.
+ * ada/acats-2/tests/ce/ce3704e.ada: New file.
+ * ada/acats-2/tests/ce/ce3704f.ada: New file.
+ * ada/acats-2/tests/ce/ce3704m.ada: New file.
+ * ada/acats-2/tests/ce/ce3704n.ada: New file.
+ * ada/acats-2/tests/ce/ce3704o.ada: New file.
+ * ada/acats-2/tests/ce/ce3705a.ada: New file.
+ * ada/acats-2/tests/ce/ce3705b.ada: New file.
+ * ada/acats-2/tests/ce/ce3705c.ada: New file.
+ * ada/acats-2/tests/ce/ce3705d.ada: New file.
+ * ada/acats-2/tests/ce/ce3705e.ada: New file.
+ * ada/acats-2/tests/ce/ce3706c.ada: New file.
+ * ada/acats-2/tests/ce/ce3706d.ada: New file.
+ * ada/acats-2/tests/ce/ce3706f.ada: New file.
+ * ada/acats-2/tests/ce/ce3706g.ada: New file.
+ * ada/acats-2/tests/ce/ce3707a.ada: New file.
+ * ada/acats-2/tests/ce/ce3708a.ada: New file.
+ * ada/acats-2/tests/ce/ce3801a.ada: New file.
+ * ada/acats-2/tests/ce/ce3801b.ada: New file.
+ * ada/acats-2/tests/ce/ce3804a.ada: New file.
+ * ada/acats-2/tests/ce/ce3804b.ada: New file.
+ * ada/acats-2/tests/ce/ce3804c.ada: New file.
+ * ada/acats-2/tests/ce/ce3804d.ada: New file.
+ * ada/acats-2/tests/ce/ce3804e.ada: New file.
+ * ada/acats-2/tests/ce/ce3804f.ada: New file.
+ * ada/acats-2/tests/ce/ce3804g.ada: New file.
+ * ada/acats-2/tests/ce/ce3804h.ada: New file.
+ * ada/acats-2/tests/ce/ce3804i.ada: New file.
+ * ada/acats-2/tests/ce/ce3804j.ada: New file.
+ * ada/acats-2/tests/ce/ce3804m.ada: New file.
+ * ada/acats-2/tests/ce/ce3804o.ada: New file.
+ * ada/acats-2/tests/ce/ce3804p.ada: New file.
+ * ada/acats-2/tests/ce/ce3805a.ada: New file.
+ * ada/acats-2/tests/ce/ce3805b.ada: New file.
+ * ada/acats-2/tests/ce/ce3806a.ada: New file.
+ * ada/acats-2/tests/ce/ce3806b.ada: New file.
+ * ada/acats-2/tests/ce/ce3806c.ada: New file.
+ * ada/acats-2/tests/ce/ce3806d.ada: New file.
+ * ada/acats-2/tests/ce/ce3806e.ada: New file.
+ * ada/acats-2/tests/ce/ce3806f.ada: New file.
+ * ada/acats-2/tests/ce/ce3806g.ada: New file.
+ * ada/acats-2/tests/ce/ce3806h.ada: New file.
+ * ada/acats-2/tests/ce/ce3809a.ada: New file.
+ * ada/acats-2/tests/ce/ce3809b.ada: New file.
+ * ada/acats-2/tests/ce/ce3810a.ada: New file.
+ * ada/acats-2/tests/ce/ce3810b.ada: New file.
+ * ada/acats-2/tests/ce/ce3815a.ada: New file.
+ * ada/acats-2/tests/ce/ce3901a.ada: New file.
+ * ada/acats-2/tests/ce/ce3902b.ada: New file.
+ * ada/acats-2/tests/ce/ce3904a.ada: New file.
+ * ada/acats-2/tests/ce/ce3904b.ada: New file.
+ * ada/acats-2/tests/ce/ce3905a.ada: New file.
+ * ada/acats-2/tests/ce/ce3905b.ada: New file.
+ * ada/acats-2/tests/ce/ce3905c.ada: New file.
+ * ada/acats-2/tests/ce/ce3905l.ada: New file.
+ * ada/acats-2/tests/ce/ce3906a.ada: New file.
+ * ada/acats-2/tests/ce/ce3906b.ada: New file.
+ * ada/acats-2/tests/ce/ce3906c.ada: New file.
+ * ada/acats-2/tests/ce/ce3906d.ada: New file.
+ * ada/acats-2/tests/ce/ce3906e.ada: New file.
+ * ada/acats-2/tests/ce/ce3906f.ada: New file.
+ * ada/acats-2/tests/ce/ce3907a.ada: New file.
+ * ada/acats-2/tests/ce/ce3908a.ada: New file.
+ * ada/acats-2/tests/cxa/cxa3001.a: New file.
+ * ada/acats-2/tests/cxa/cxa3002.a: New file.
+ * ada/acats-2/tests/cxa/cxa3003.a: New file.
+ * ada/acats-2/tests/cxa/cxa3004.a: New file.
+ * ada/acats-2/tests/cxa/cxa4001.a: New file.
+ * ada/acats-2/tests/cxa/cxa4002.a: New file.
+ * ada/acats-2/tests/cxa/cxa4003.a: New file.
+ * ada/acats-2/tests/cxa/cxa4004.a: New file.
+ * ada/acats-2/tests/cxa/cxa4005.a: New file.
+ * ada/acats-2/tests/cxa/cxa4006.a: New file.
+ * ada/acats-2/tests/cxa/cxa4007.a: New file.
+ * ada/acats-2/tests/cxa/cxa4008.a: New file.
+ * ada/acats-2/tests/cxa/cxa4009.a: New file.
+ * ada/acats-2/tests/cxa/cxa4010.a: New file.
+ * ada/acats-2/tests/cxa/cxa4011.a: New file.
+ * ada/acats-2/tests/cxa/cxa4012.a: New file.
+ * ada/acats-2/tests/cxa/cxa4013.a: New file.
+ * ada/acats-2/tests/cxa/cxa4014.a: New file.
+ * ada/acats-2/tests/cxa/cxa4015.a: New file.
+ * ada/acats-2/tests/cxa/cxa4016.a: New file.
+ * ada/acats-2/tests/cxa/cxa4017.a: New file.
+ * ada/acats-2/tests/cxa/cxa4018.a: New file.
+ * ada/acats-2/tests/cxa/cxa4019.a: New file.
+ * ada/acats-2/tests/cxa/cxa4020.a: New file.
+ * ada/acats-2/tests/cxa/cxa4021.a: New file.
+ * ada/acats-2/tests/cxa/cxa4022.a: New file.
+ * ada/acats-2/tests/cxa/cxa4023.a: New file.
+ * ada/acats-2/tests/cxa/cxa4024.a: New file.
+ * ada/acats-2/tests/cxa/cxa4025.a: New file.
+ * ada/acats-2/tests/cxa/cxa4026.a: New file.
+ * ada/acats-2/tests/cxa/cxa4027.a: New file.
+ * ada/acats-2/tests/cxa/cxa4028.a: New file.
+ * ada/acats-2/tests/cxa/cxa4029.a: New file.
+ * ada/acats-2/tests/cxa/cxa4030.a: New file.
+ * ada/acats-2/tests/cxa/cxa4031.a: New file.
+ * ada/acats-2/tests/cxa/cxa4032.a: New file.
+ * ada/acats-2/tests/cxa/cxa4033.a: New file.
+ * ada/acats-2/tests/cxa/cxa4034.a: New file.
+ * ada/acats-2/tests/cxa/cxa5011.a: New file.
+ * ada/acats-2/tests/cxa/cxa5012.a: New file.
+ * ada/acats-2/tests/cxa/cxa5013.a: New file.
+ * ada/acats-2/tests/cxa/cxa5015.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a01.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a02.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a03.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a04.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a05.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a06.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a07.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a08.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a09.a: New file.
+ * ada/acats-2/tests/cxa/cxa5a10.a: New file.
+ * ada/acats-2/tests/cxa/cxa8001.a: New file.
+ * ada/acats-2/tests/cxa/cxa8002.a: New file.
+ * ada/acats-2/tests/cxa/cxa8003.a: New file.
+ * ada/acats-2/tests/cxa/cxa9001.a: New file.
+ * ada/acats-2/tests/cxa/cxa9002.a: New file.
+ * ada/acats-2/tests/cxa/cxaa001.a: New file.
+ * ada/acats-2/tests/cxa/cxaa002.a: New file.
+ * ada/acats-2/tests/cxa/cxaa003.a: New file.
+ * ada/acats-2/tests/cxa/cxaa004.a: New file.
+ * ada/acats-2/tests/cxa/cxaa005.a: New file.
+ * ada/acats-2/tests/cxa/cxaa006.a: New file.
+ * ada/acats-2/tests/cxa/cxaa007.a: New file.
+ * ada/acats-2/tests/cxa/cxaa008.a: New file.
+ * ada/acats-2/tests/cxa/cxaa009.a: New file.
+ * ada/acats-2/tests/cxa/cxaa010.a: New file.
+ * ada/acats-2/tests/cxa/cxaa011.a: New file.
+ * ada/acats-2/tests/cxa/cxaa012.a: New file.
+ * ada/acats-2/tests/cxa/cxaa013.a: New file.
+ * ada/acats-2/tests/cxa/cxaa014.a: New file.
+ * ada/acats-2/tests/cxa/cxaa015.a: New file.
+ * ada/acats-2/tests/cxa/cxaa016.a: New file.
+ * ada/acats-2/tests/cxa/cxaa017.a: New file.
+ * ada/acats-2/tests/cxa/cxaa018.a: New file.
+ * ada/acats-2/tests/cxa/cxaa019.a: New file.
+ * ada/acats-2/tests/cxa/cxab001.a: New file.
+ * ada/acats-2/tests/cxa/cxac001.a: New file.
+ * ada/acats-2/tests/cxa/cxac002.a: New file.
+ * ada/acats-2/tests/cxa/cxac003.a: New file.
+ * ada/acats-2/tests/cxa/cxac004.a: New file.
+ * ada/acats-2/tests/cxa/cxac005.a: New file.
+ * ada/acats-2/tests/cxa/cxaca01.a: New file.
+ * ada/acats-2/tests/cxa/cxaca02.a: New file.
+ * ada/acats-2/tests/cxa/cxacb01.a: New file.
+ * ada/acats-2/tests/cxa/cxacb02.a: New file.
+ * ada/acats-2/tests/cxa/cxacc01.a: New file.
+ * ada/acats-2/tests/cxa/cxaf001.a: New file.
+ * ada/acats-2/tests/cxb/cxb2001.a: New file.
+ * ada/acats-2/tests/cxb/cxb2002.a: New file.
+ * ada/acats-2/tests/cxb/cxb2003.a: New file.
+ * ada/acats-2/tests/cxb/cxb3001.a: New file.
+ * ada/acats-2/tests/cxb/cxb3002.a: New file.
+ * ada/acats-2/tests/cxb/cxb3003.a: New file.
+ * ada/acats-2/tests/cxb/cxb30040.c: New file.
+ * ada/acats-2/tests/cxb/cxb30041.am: New file.
+ * ada/acats-2/tests/cxb/cxb3005.a: New file.
+ * ada/acats-2/tests/cxb/cxb30060.c: New file.
+ * ada/acats-2/tests/cxb/cxb30061.am: New file.
+ * ada/acats-2/tests/cxb/cxb3007.a: New file.
+ * ada/acats-2/tests/cxb/cxb3008.a: New file.
+ * ada/acats-2/tests/cxb/cxb3009.a: New file.
+ * ada/acats-2/tests/cxb/cxb3010.a: New file.
+ * ada/acats-2/tests/cxb/cxb3011.a: New file.
+ * ada/acats-2/tests/cxb/cxb3012.a: New file.
+ * ada/acats-2/tests/cxb/cxb30130.c: New file.
+ * ada/acats-2/tests/cxb/cxb30131.c: New file.
+ * ada/acats-2/tests/cxb/cxb30132.am: New file.
+ * ada/acats-2/tests/cxb/cxb3014.a: New file.
+ * ada/acats-2/tests/cxb/cxb3015.a: New file.
+ * ada/acats-2/tests/cxb/cxb3016.a: New file.
+ * ada/acats-2/tests/cxb/cxb4001.a: New file.
+ * ada/acats-2/tests/cxb/cxb4002.a: New file.
+ * ada/acats-2/tests/cxb/cxb4003.a: New file.
+ * ada/acats-2/tests/cxb/cxb4004.a: New file.
+ * ada/acats-2/tests/cxb/cxb4005.a: New file.
+ * ada/acats-2/tests/cxb/cxb4006.a: New file.
+ * ada/acats-2/tests/cxb/cxb4007.a: New file.
+ * ada/acats-2/tests/cxb/cxb4008.a: New file.
+ * ada/acats-2/tests/cxb/cxb5001.a: New file.
+ * ada/acats-2/tests/cxb/cxb5002.a: New file.
+ * ada/acats-2/tests/cxb/cxb5003.a: New file.
+ * ada/acats-2/tests/cxf/cxf1001.a: New file.
+ * ada/acats-2/tests/cxf/cxf2001.a: New file.
+ * ada/acats-2/tests/cxf/cxf2002.a: New file.
+ * ada/acats-2/tests/cxf/cxf2003.a: New file.
+ * ada/acats-2/tests/cxf/cxf2004.a: New file.
+ * ada/acats-2/tests/cxf/cxf2005.a: New file.
+ * ada/acats-2/tests/cxf/cxf2a01.a: New file.
+ * ada/acats-2/tests/cxf/cxf2a02.a: New file.
+ * ada/acats-2/tests/cxf/cxf3001.a: New file.
+ * ada/acats-2/tests/cxf/cxf3002.a: New file.
+ * ada/acats-2/tests/cxf/cxf3003.a: New file.
+ * ada/acats-2/tests/cxf/cxf3004.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a01.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a02.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a03.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a04.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a05.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a06.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a07.a: New file.
+ * ada/acats-2/tests/cxf/cxf3a08.a: New file.
+ * ada/acats-2/tests/cxg/cxg1001.a: New file.
+ * ada/acats-2/tests/cxg/cxg1002.a: New file.
+ * ada/acats-2/tests/cxg/cxg1003.a: New file.
+ * ada/acats-2/tests/cxg/cxg1004.a: New file.
+ * ada/acats-2/tests/cxg/cxg1005.a: New file.
+ * ada/acats-2/tests/cxg/cxg2001.a: New file.
+ * ada/acats-2/tests/cxg/cxg2002.a: New file.
+ * ada/acats-2/tests/cxg/cxg2003.a: New file.
+ * ada/acats-2/tests/cxg/cxg2004.a: New file.
+ * ada/acats-2/tests/cxg/cxg2005.a: New file.
+ * ada/acats-2/tests/cxg/cxg2006.a: New file.
+ * ada/acats-2/tests/cxg/cxg2007.a: New file.
+ * ada/acats-2/tests/cxg/cxg2008.a: New file.
+ * ada/acats-2/tests/cxg/cxg2009.a: New file.
+ * ada/acats-2/tests/cxg/cxg2010.a: New file.
+ * ada/acats-2/tests/cxg/cxg2011.a: New file.
+ * ada/acats-2/tests/cxg/cxg2012.a: New file.
+ * ada/acats-2/tests/cxg/cxg2013.a: New file.
+ * ada/acats-2/tests/cxg/cxg2014.a: New file.
+ * ada/acats-2/tests/cxg/cxg2015.a: New file.
+ * ada/acats-2/tests/cxg/cxg2016.a: New file.
+ * ada/acats-2/tests/cxg/cxg2017.a: New file.
+ * ada/acats-2/tests/cxg/cxg2018.a: New file.
+ * ada/acats-2/tests/cxg/cxg2019.a: New file.
+ * ada/acats-2/tests/cxg/cxg2020.a: New file.
+ * ada/acats-2/tests/cxg/cxg2021.a: New file.
+ * ada/acats-2/tests/cxg/cxg2022.a: New file.
+ * ada/acats-2/tests/cxg/cxg2023.a: New file.
+ * ada/acats-2/tests/cxg/cxg2024.a: New file.
+ * ada/acats-2/tests/cxh/cxh3001.a: New file.
+ * ada/acats-2/tests/cxh/cxh3002.a: New file.
+ * ada/acats-2/tests/cxh/cxh30030.a: New file.
+ * ada/acats-2/tests/cxh/cxh30031.am: New file.
+ * ada/acats-2/tests/cz/cz1101a.ada: New file.
+ * ada/acats-2/tests/cz/cz1102a.ada: New file.
+ * ada/acats-2/tests/cz/cz1103a.ada: New file.
+ * ada/acats-2/tests/d/d4a002a.ada: New file.
+ * ada/acats-2/tests/d/d4a002b.ada: New file.
+ * ada/acats-2/tests/d/d4a004a.ada: New file.
+ * ada/acats-2/tests/d/d4a004b.ada: New file.
+ * ada/acats-2/tests/e/e28002b.ada: New file.
+ * ada/acats-2/tests/e/e28005d.ada: New file.
+ * ada/acats-2/tests/e/e52103y.ada: New file.
+ * ada/acats-2/tests/e/eb4011a.ada: New file.
+ * ada/acats-2/tests/e/eb4012a.ada: New file.
+ * ada/acats-2/tests/e/eb4014a.ada: New file.
+ * ada/acats-2/tests/e/ee3203a.ada: New file.
+ * ada/acats-2/tests/e/ee3204a.ada: New file.
+ * ada/acats-2/tests/e/ee3402b.ada: New file.
+ * ada/acats-2/tests/e/ee3409f.ada: New file.
+ * ada/acats-2/tests/e/ee3412c.ada: New file.
+ * ada/acats-2/tests/l/la140010.a: New file.
+ * ada/acats-2/tests/l/la140011.am: New file.
+ * ada/acats-2/tests/l/la140012.a: New file.
+ * ada/acats-2/tests/l/la140020.a: New file.
+ * ada/acats-2/tests/l/la140021.am: New file.
+ * ada/acats-2/tests/l/la140022.a: New file.
+ * ada/acats-2/tests/l/la140030.a: New file.
+ * ada/acats-2/tests/l/la140031.a: New file.
+ * ada/acats-2/tests/l/la140032.am: New file.
+ * ada/acats-2/tests/l/la140033.a: New file.
+ * ada/acats-2/tests/l/la140040.a: New file.
+ * ada/acats-2/tests/l/la140041.am: New file.
+ * ada/acats-2/tests/l/la140042.a: New file.
+ * ada/acats-2/tests/l/la140050.a: New file.
+ * ada/acats-2/tests/l/la140051.a: New file.
+ * ada/acats-2/tests/l/la140052.am: New file.
+ * ada/acats-2/tests/l/la140053.a: New file.
+ * ada/acats-2/tests/l/la140060.a: New file.
+ * ada/acats-2/tests/l/la140061.a: New file.
+ * ada/acats-2/tests/l/la140062.am: New file.
+ * ada/acats-2/tests/l/la140063.a: New file.
+ * ada/acats-2/tests/l/la140070.a: New file.
+ * ada/acats-2/tests/l/la140071.a: New file.
+ * ada/acats-2/tests/l/la140072.am: New file.
+ * ada/acats-2/tests/l/la140073.a: New file.
+ * ada/acats-2/tests/l/la140080.a: New file.
+ * ada/acats-2/tests/l/la140081.a: New file.
+ * ada/acats-2/tests/l/la140082.am: New file.
+ * ada/acats-2/tests/l/la140083.a: New file.
+ * ada/acats-2/tests/l/la140090.a: New file.
+ * ada/acats-2/tests/l/la140091.a: New file.
+ * ada/acats-2/tests/l/la140092.am: New file.
+ * ada/acats-2/tests/l/la140093.a: New file.
+ * ada/acats-2/tests/l/la140100.a: New file.
+ * ada/acats-2/tests/l/la140101.a: New file.
+ * ada/acats-2/tests/l/la140102.am: New file.
+ * ada/acats-2/tests/l/la140103.a: New file.
+ * ada/acats-2/tests/l/la140110.a: New file.
+ * ada/acats-2/tests/l/la140111.a: New file.
+ * ada/acats-2/tests/l/la140112.am: New file.
+ * ada/acats-2/tests/l/la140113.a: New file.
+ * ada/acats-2/tests/l/la140120.a: New file.
+ * ada/acats-2/tests/l/la140121.a: New file.
+ * ada/acats-2/tests/l/la140122.am: New file.
+ * ada/acats-2/tests/l/la140123.a: New file.
+ * ada/acats-2/tests/l/la140130.a: New file.
+ * ada/acats-2/tests/l/la140131.a: New file.
+ * ada/acats-2/tests/l/la140132.am: New file.
+ * ada/acats-2/tests/l/la140133.a: New file.
+ * ada/acats-2/tests/l/la140140.a: New file.
+ * ada/acats-2/tests/l/la140141.a: New file.
+ * ada/acats-2/tests/l/la140142.am: New file.
+ * ada/acats-2/tests/l/la140143.a: New file.
+ * ada/acats-2/tests/l/la140150.a: New file.
+ * ada/acats-2/tests/l/la140151.a: New file.
+ * ada/acats-2/tests/l/la140152.am: New file.
+ * ada/acats-2/tests/l/la140153.a: New file.
+ * ada/acats-2/tests/l/la140160.a: New file.
+ * ada/acats-2/tests/l/la140161.a: New file.
+ * ada/acats-2/tests/l/la140162.am: New file.
+ * ada/acats-2/tests/l/la140163.a: New file.
+ * ada/acats-2/tests/l/la140170.a: New file.
+ * ada/acats-2/tests/l/la140171.a: New file.
+ * ada/acats-2/tests/l/la140172.am: New file.
+ * ada/acats-2/tests/l/la140173.a: New file.
+ * ada/acats-2/tests/l/la140180.a: New file.
+ * ada/acats-2/tests/l/la140181.a: New file.
+ * ada/acats-2/tests/l/la140182.am: New file.
+ * ada/acats-2/tests/l/la140183.a: New file.
+ * ada/acats-2/tests/l/la140190.a: New file.
+ * ada/acats-2/tests/l/la140191.a: New file.
+ * ada/acats-2/tests/l/la140192.am: New file.
+ * ada/acats-2/tests/l/la140193.a: New file.
+ * ada/acats-2/tests/l/la140200.a: New file.
+ * ada/acats-2/tests/l/la140201.a: New file.
+ * ada/acats-2/tests/l/la140202.am: New file.
+ * ada/acats-2/tests/l/la140203.a: New file.
+ * ada/acats-2/tests/l/la140210.a: New file.
+ * ada/acats-2/tests/l/la140211.am: New file.
+ * ada/acats-2/tests/l/la140212.a: New file.
+ * ada/acats-2/tests/l/la140220.a: New file.
+ * ada/acats-2/tests/l/la140221.am: New file.
+ * ada/acats-2/tests/l/la140222.a: New file.
+ * ada/acats-2/tests/l/la140240.a: New file.
+ * ada/acats-2/tests/l/la140241.a: New file.
+ * ada/acats-2/tests/l/la140242.am: New file.
+ * ada/acats-2/tests/l/la140243.a: New file.
+ * ada/acats-2/tests/l/la140250.a: New file.
+ * ada/acats-2/tests/l/la140251.am: New file.
+ * ada/acats-2/tests/l/la140252.a: New file.
+ * ada/acats-2/tests/l/la140260.a: New file.
+ * ada/acats-2/tests/l/la140261.a: New file.
+ * ada/acats-2/tests/l/la140262.am: New file.
+ * ada/acats-2/tests/l/la140263.a: New file.
+ * ada/acats-2/tests/l/la140270.a: New file.
+ * ada/acats-2/tests/l/la140271.a: New file.
+ * ada/acats-2/tests/l/la140272.am: New file.
+ * ada/acats-2/tests/l/la140273.a: New file.
+
+2025-05-24 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c: Add asm check
+ for vor.vx combine.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c: Ditto.
+
+2025-05-24 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add test cases
+ for vor vx combine case 0 on GR2VR cost.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ data for vor.vx run test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-i64.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-i8.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-u16.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-u64.c: New test.
+ * gcc.target/riscv/rvv/autovec/vx_vf/vx_vor-run-1-u8.c: New test.
+
2025-05-23 Nathaniel Shead <nathanieloshead@gmail.com>
PR c++/120363
diff --git a/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c b/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
index 31dd054..803bf0a 100644
--- a/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
+++ b/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
@@ -9,7 +9,7 @@ f (int x[], int y[], int z[])
{
int i;
- [[omp::sequence (directive (target map(to: x, y) map(from: z)),
+ [[omp::sequence (directive (target map(to: x, y) map(from: z)), /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } } */
directive (metadirective
when (device={arch("nvptx")}: teams loop)
default (parallel loop)))]]
@@ -20,5 +20,6 @@ f (int x[], int y[], int z[])
/* If offload device "nvptx" isn't supported, the front end can eliminate
that alternative and not produce a metadirective at all. Otherwise this
won't be resolved until late. */
-/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" { target { ! offload_nvptx } } } } */
-/* { dg-final { scan-tree-dump "#pragma omp metadirective" "gimple" { target { offload_nvptx } } } } */
+/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" } } */
+/* { dg-final { scan-tree-dump-not " teams" "gimple" { target { ! offload_nvptx } } } } */
+/* { dg-final { scan-tree-dump "variant.\[0-9\]+ = \\\[omp_next_variant\\\] OMP_NEXT_VARIANT <0,\[\r\n \]+construct context = 14\[\r\n \]+1: device = \\{arch \\(.nvptx.\\)\\}\[\r\n \]+2: >;" "gimple" { target { offload_nvptx } } } } */
diff --git a/gcc/testsuite/c-c++-common/gomp/metadirective-3.c b/gcc/testsuite/c-c++-common/gomp/metadirective-3.c
index 0ac0d1d..b6c1601 100644
--- a/gcc/testsuite/c-c++-common/gomp/metadirective-3.c
+++ b/gcc/testsuite/c-c++-common/gomp/metadirective-3.c
@@ -8,7 +8,7 @@ f (int x[], int y[], int z[])
{
int i;
- #pragma omp target map(to: x, y) map(from: z)
+ #pragma omp target map(to: x, y) map(from: z) /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } } */
#pragma omp metadirective \
when (device={arch("nvptx")}: teams loop) \
default (parallel loop)
@@ -19,5 +19,6 @@ f (int x[], int y[], int z[])
/* If offload device "nvptx" isn't supported, the front end can eliminate
that alternative and not produce a metadirective at all. Otherwise this
won't be resolved until late. */
-/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" { target { ! offload_nvptx } } } } */
-/* { dg-final { scan-tree-dump "#pragma omp metadirective" "gimple" { target { offload_nvptx } } } } */
+/* { dg-final { scan-tree-dump-not "#pragma omp metadirective" "gimple" } } */
+/* { dg-final { scan-tree-dump-not " teams" "gimple" { target { ! offload_nvptx } } } } */
+/* { dg-final { scan-tree-dump "variant.\[0-9\]+ = \\\[omp_next_variant\\\] OMP_NEXT_VARIANT <0,\[\r\n \]+construct context = 14\[\r\n \]+1: device = \\{arch \\(.nvptx.\\)\\}\[\r\n \]+2: >;" "gimple" { target { offload_nvptx } } } } */
diff --git a/gcc/testsuite/g++.dg/ext/is_destructible1.C b/gcc/testsuite/g++.dg/ext/is_destructible1.C
new file mode 100644
index 0000000..994c388
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/is_destructible1.C
@@ -0,0 +1,60 @@
+// PR c++/107600
+// { dg-do compile { target c++11 } }
+
+#define SA(X) static_assert ((X), #X)
+
+namespace N1 {
+ struct A { ~A() = delete; };
+
+ SA (!__is_destructible (A));
+ SA (!__is_nothrow_destructible (A));
+ SA (!__is_trivially_destructible (A));
+
+ bool b = __has_trivial_destructor (A); // { dg-message "has_trivial_destructor" }
+}
+
+namespace N2 {
+ struct A { protected: ~A() = default; };
+
+ SA (!__is_destructible (A));
+ SA (!__is_nothrow_destructible (A));
+ SA (!__is_trivially_destructible (A));
+ SA (__has_trivial_destructor (A));
+}
+
+namespace N3 {
+ struct A { ~A(); };
+
+ SA (__is_destructible (A));
+ SA (__is_nothrow_destructible (A));
+ SA (!__is_trivially_destructible (A));
+ SA (!__has_trivial_destructor (A));
+}
+
+namespace N4 {
+ struct A { ~A() noexcept (false); };
+
+ SA (__is_destructible (A));
+ SA (!__is_nothrow_destructible (A));
+ SA (!__is_trivially_destructible (A));
+ SA (!__has_trivial_destructor (A));
+}
+
+namespace N5 {
+ struct A { ~A() = default; };
+
+ SA (__is_destructible (A));
+ SA (__is_nothrow_destructible (A));
+ SA (__is_trivially_destructible (A));
+ SA (__has_trivial_destructor (A));
+}
+
+namespace N6 {
+ struct A { };
+
+ SA (__is_destructible (A));
+ SA (__is_nothrow_destructible (A));
+ SA (__is_trivially_destructible (A));
+ SA (__has_trivial_destructor (A));
+}
+
diff --git a/gcc/testsuite/g++.dg/gomp/target-4.C b/gcc/testsuite/g++.dg/gomp/target-4.C
new file mode 100644
index 0000000..80fc9df
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/target-4.C
@@ -0,0 +1,22 @@
+// { dg-do compile { target c++11 } }
+// PR c++/120413
+
+struct S
+{
+ S() {}
+ ~S() {}
+};
+
+struct array
+{
+ S _arr[1];
+};
+
+int main()
+{
+#pragma omp target
+ {
+ array arr{};
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-10_a.C b/gcc/testsuite/g++.dg/modules/namespace-10_a.C
new file mode 100644
index 0000000..c67c93a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-10_a.C
@@ -0,0 +1,11 @@
+// { dg-additional-options -fmodules }
+
+export module M1;
+
+namespace A
+{
+ export using AT = int;
+}
+
+export using namespace A;
+inline AT var;
diff --git a/gcc/testsuite/g++.dg/modules/namespace-10_b.C b/gcc/testsuite/g++.dg/modules/namespace-10_b.C
new file mode 100644
index 0000000..5a3558d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-10_b.C
@@ -0,0 +1,9 @@
+// { dg-additional-options "-fmodules" }
+
+export module M2;
+import M1;
+
+namespace A
+{
+ export using A::AT;
+}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-10_c.C b/gcc/testsuite/g++.dg/modules/namespace-10_c.C
new file mode 100644
index 0000000..aee00bd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-10_c.C
@@ -0,0 +1,6 @@
+// { dg-additional-options -fmodules }
+
+import M2;
+
+A::AT var1;
+AT var2; // { dg-error "AT" }
diff --git a/gcc/testsuite/g++.dg/modules/namespace-11_a.C b/gcc/testsuite/g++.dg/modules/namespace-11_a.C
new file mode 100644
index 0000000..c67c93a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-11_a.C
@@ -0,0 +1,11 @@
+// { dg-additional-options -fmodules }
+
+export module M1;
+
+namespace A
+{
+ export using AT = int;
+}
+
+export using namespace A;
+inline AT var;
diff --git a/gcc/testsuite/g++.dg/modules/namespace-11_b.C b/gcc/testsuite/g++.dg/modules/namespace-11_b.C
new file mode 100644
index 0000000..c0e0b9e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-11_b.C
@@ -0,0 +1,9 @@
+// { dg-additional-options "-fmodules" }
+
+export module M2;
+export import M1;
+
+namespace A
+{
+ export using A::AT;
+}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-11_c.C b/gcc/testsuite/g++.dg/modules/namespace-11_c.C
new file mode 100644
index 0000000..e12a8ae
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-11_c.C
@@ -0,0 +1,6 @@
+// { dg-additional-options -fmodules }
+
+import M2;
+
+A::AT var1;
+AT var2;
diff --git a/gcc/testsuite/g++.dg/modules/namespace-8_a.C b/gcc/testsuite/g++.dg/modules/namespace-8_a.C
new file mode 100644
index 0000000..67ffc6a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-8_a.C
@@ -0,0 +1,12 @@
+// { dg-additional-options "-fmodules" }
+
+export module M;
+
+export namespace B
+{
+ int i;
+}
+export namespace C
+{
+ using namespace B;
+}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-8_b.C b/gcc/testsuite/g++.dg/modules/namespace-8_b.C
new file mode 100644
index 0000000..7db35bf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-8_b.C
@@ -0,0 +1,8 @@
+// { dg-additional-options "-fmodules" }
+
+import M;
+
+int main()
+{
+ C::i = 42;
+}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-9_a.C b/gcc/testsuite/g++.dg/modules/namespace-9_a.C
new file mode 100644
index 0000000..4cc3ab0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-9_a.C
@@ -0,0 +1,11 @@
+// { dg-additional-options -fmodules }
+
+export module M;
+
+namespace A
+{
+ export using AT = int;
+}
+
+using namespace A;
+inline AT var;
diff --git a/gcc/testsuite/g++.dg/modules/namespace-9_b.C b/gcc/testsuite/g++.dg/modules/namespace-9_b.C
new file mode 100644
index 0000000..05bb300
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/namespace-9_b.C
@@ -0,0 +1,6 @@
+// { dg-additional-options -fmodules }
+
+import M;
+
+A::AT var1;
+AT var2; // { dg-error "AT" }
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr117965-1.C b/gcc/testsuite/g++.dg/tree-ssa/pr117965-1.C
new file mode 100644
index 0000000..84f0f2b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr117965-1.C
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-options "-O2 -fdump-tree-phiopt1" }
+
+void f();
+void f(int&);
+
+static inline const int &
+clamp(const int &v, const int &min, const int &max)
+{
+ const int &t = (v > min) ? v : min;
+ return t > max ? max : t;
+}
+
+void clamp2(int num1) {
+ try {
+ int low = -12, high = 12;
+ f();
+ num1 = clamp(num1, low, high);
+ f(num1);
+ } catch(...)
+ {
+ __builtin_printf("caught.\n");
+ return;
+ }
+}
+
+// { dg-final { scan-tree-dump-times "MAX" 1 "phiopt1" } } */
+// { dg-final { scan-tree-dump-times "MIN" 1 "phiopt1" } } */
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr117965-2.C b/gcc/testsuite/g++.dg/tree-ssa/pr117965-2.C
new file mode 100644
index 0000000..3e94fb3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr117965-2.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++17 } }
+// { dg-options "-O2 -fdump-tree-phiopt1" }
+
+#include <iostream>
+#include <algorithm>
+
+void clamp2 ()
+{
+ float low = -1.0f, high = 1.0f;
+ float num1, num2, num3;
+ std::cin >> num1;
+ num1 = std::clamp(num1, low, high);
+ std::cout << num1;
+}
+
+// { dg-final { scan-tree-dump-times " < -1.0" 1 "phiopt1" } }
+// { dg-final { scan-tree-dump-times " \\\? -1.0e\\\+0 : " 1 "phiopt1" } }
+// { dg-final { scan-tree-dump-times " > 1.0" 1 "phiopt1" } }
+// { dg-final { scan-tree-dump-times " \\\? 1.0e\\\+0 : " 1 "phiopt1" } }
diff --git a/gcc/testsuite/gcc.dg/countof-compat.c b/gcc/testsuite/gcc.dg/countof-compat.c
new file mode 100644
index 0000000..ab5b4ae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-compat.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2y -pedantic-errors -Wc23-c2y-compat" } */
+
+#include <stdcountof.h>
+
+int a[1];
+int b[countof(a)];
+int c[_Countof(a)]; /* { dg-warning "ISO C does not support" } */
diff --git a/gcc/testsuite/gcc.dg/countof-compile.c b/gcc/testsuite/gcc.dg/countof-compile.c
new file mode 100644
index 0000000..afd5659
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-compile.c
@@ -0,0 +1,124 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2y -pedantic-errors" } */
+
+#define NULL ((void *) 0)
+
+extern int x[];
+
+static int w[] = {1, 2, 3};
+
+void
+completed (void)
+{
+ int i = 42;
+ int a[] = {1, 2, i};
+
+ _Static_assert(_Countof (w) == 3);
+ _Static_assert(_Countof (a) == 3);
+}
+
+void
+incomplete (int p[])
+{
+ _Countof (x); /* { dg-error "incomplete" } */
+
+ /* We want to support array parameters in the future,
+ which should change this from "invalid" to "incomplete". */
+ _Countof (p); /* { dg-error "invalid" } */
+}
+
+void
+fam (void)
+{
+ struct {
+ int x;
+ int fam[];
+ } s;
+
+ _Countof (s.fam); /* { dg-error "incomplete" } */
+}
+
+void
+param (int n, int p[n])
+{
+ /* We want to support array parameters in the future,
+ which would make this work. */
+ _Countof (p); /* { dg-error "invalid" } */
+}
+
+void fix_fix (int i, char (*a)[3][5], int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[3]: 1)]);
+void fix_var (int i, char (*a)[3][i], int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[3]: 1)]);
+void fix_uns (int i, char (*a)[3][*], int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[3]: 1)]);
+
+void
+func (void)
+{
+ int i3[3];
+ int i5[5];
+ char c35[3][5];
+
+ fix_fix (5, &c35, &i3, NULL);
+ fix_fix (5, &c35, &i5, NULL); /* { dg-error "incompatible-pointer-types" } */
+
+ fix_var (5, &c35, &i3, NULL);
+ fix_var (5, &c35, &i5, NULL); /* { dg-error "incompatible-pointer-types" } */
+
+ fix_uns (5, &c35, &i3, NULL);
+ fix_uns (5, &c35, &i5, NULL); /* { dg-error "incompatible-pointer-types" } */
+}
+
+void
+non_arr(void)
+{
+ int x;
+ int *p;
+ struct s {
+ int x[3];
+ } s;
+
+ _Countof (x); /* { dg-error "invalid" } */
+ _Countof (int); /* { dg-error "invalid" } */
+ _Countof (s); /* { dg-error "invalid" } */
+ _Countof (struct s); /* { dg-error "invalid" } */
+ _Countof (&x); /* { dg-error "invalid" } */
+ _Countof (p); /* { dg-error "invalid" } */
+ _Countof (int *); /* { dg-error "invalid" } */
+ _Countof (&s.x); /* { dg-error "invalid" } */
+ _Countof (int (*)[3]); /* { dg-error "invalid" } */
+}
+
+static int f1();
+static int f2(); /* { dg-error "never defined" } */
+int a[10][9];
+int n;
+
+void
+syms(void)
+{
+ int b[n][n];
+
+ _Countof (a[f1()]);
+ _Countof (b[f2()]);
+}
+
+void
+no_parens(void)
+{
+ _Static_assert(_Countof a == 10);
+ _Static_assert(_Countof *a == 9);
+ _Static_assert(_Countof (int [3]) {} == 3);
+
+ _Countof int [3]; /* { dg-error "expected expression before" } */
+}
+
+void
+const_expr(void)
+{
+ int n = 7;
+
+ _Static_assert (_Countof (int [3][n]) == 3);
+ _Static_assert (_Countof (int [n][3]) == 7); /* { dg-error "not constant" } */
+}
diff --git a/gcc/testsuite/gcc.dg/countof-no-compat.c b/gcc/testsuite/gcc.dg/countof-no-compat.c
new file mode 100644
index 0000000..4a244cf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-no-compat.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c23 -pedantic-errors -Wno-c23-c2y-compat" } */
+
+int a[1];
+int b[_Countof(a)];
diff --git a/gcc/testsuite/gcc.dg/countof-pedantic-errors.c b/gcc/testsuite/gcc.dg/countof-pedantic-errors.c
new file mode 100644
index 0000000..5d5bedb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-pedantic-errors.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c23 -pedantic-errors" } */
+
+#include <stdcountof.h>
+
+int a[1];
+int b[countof(a)];
+int c[_Countof(a)]; /* { dg-error "ISO C does not support" } */
diff --git a/gcc/testsuite/gcc.dg/countof-pedantic.c b/gcc/testsuite/gcc.dg/countof-pedantic.c
new file mode 100644
index 0000000..408dc6f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-pedantic.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c23 -pedantic" } */
+
+#include <stdcountof.h>
+
+int a[1];
+int b[countof(a)];
+int c[_Countof(a)]; /* { dg-warning "ISO C does not support" } */
diff --git a/gcc/testsuite/gcc.dg/countof-stdcountof.c b/gcc/testsuite/gcc.dg/countof-stdcountof.c
new file mode 100644
index 0000000..2fb0c63
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-stdcountof.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-std=c2y -pedantic-errors" } */
+
+#include <stdcountof.h>
+
+#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+extern int strcmp (const char *, const char *);
+
+#ifndef countof
+#error "countof not defined"
+#endif
+
+int a[3];
+int b[countof a];
+
+#define str(x) #x
+#define xstr(x) str(x)
+
+int
+main (void)
+{
+ assert (strcmp (xstr(countof), "_Countof") == 0);
+}
diff --git a/gcc/testsuite/gcc.dg/countof-vla.c b/gcc/testsuite/gcc.dg/countof-vla.c
new file mode 100644
index 0000000..cc225df
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-vla.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2y -pedantic-errors -Wvla-parameter" } */
+
+void fix_fix (int i,
+ char (*a)[3][5],
+ int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[3]: 1)]);
+void fix_var (int i,
+ char (*a)[3][i], /* dg-warn "variable" */
+ int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[3]: 1)]);
+void fix_uns (int i,
+ char (*a)[3][*],
+ int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[3]: 1)]);
+
+void var_fix (int i,
+ char (*a)[i][5], /* dg-warn "variable" */
+ int (*x)[_Countof (*a)]); /* dg-warn "variable" */
+void var_var (int i,
+ char (*a)[i][i], /* dg-warn "variable" */
+ int (*x)[_Countof (*a)]); /* dg-warn "variable" */
+void var_uns (int i,
+ char (*a)[i][*], /* dg-warn "variable" */
+ int (*x)[_Countof (*a)]); /* dg-warn "variable" */
+
+void uns_fix (int i,
+ char (*a)[*][5],
+ int (*x)[_Countof (*a)]);
+void uns_var (int i,
+ char (*a)[*][i], /* dg-warn "variable" */
+ int (*x)[_Countof (*a)]);
+void uns_uns (int i,
+ char (*a)[*][*],
+ int (*x)[_Countof (*a)]);
diff --git a/gcc/testsuite/gcc.dg/countof-vmt.c b/gcc/testsuite/gcc.dg/countof-vmt.c
new file mode 100644
index 0000000..67467b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-vmt.c
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+/* { dg-options "-std=gnu2y" } */
+
+#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+void
+inner_vla_noeval (void)
+{
+ int i;
+
+ i = 3;
+ static_assert (_Countof (struct {int x[i++];}[3]) == 3);
+ assert (i == 3);
+}
+
+int
+main (void)
+{
+ inner_vla_noeval ();
+}
diff --git a/gcc/testsuite/gcc.dg/countof-zero-compile.c b/gcc/testsuite/gcc.dg/countof-zero-compile.c
new file mode 100644
index 0000000..b561186
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-zero-compile.c
@@ -0,0 +1,38 @@
+/* { dg-do compile } */
+/* { dg-options "-std=gnu2y" } */
+
+static int z[0];
+static int y[_Countof (z)];
+
+_Static_assert(_Countof (y) == 0);
+
+void
+completed (void)
+{
+ int z[] = {};
+
+ static_assert (_Countof (z) == 0);
+}
+
+void zro_fix (int i,
+ char (*a)[0][5],
+ int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[0]: 1)]);
+void zro_var (int i,
+ char (*a)[0][i], /* dg-warn "variable" */
+ int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[0]: 1)]);
+void zro_uns (int i,
+ char (*a)[0][*],
+ int (*x)[_Countof (*a)],
+ short (*)[_Generic(x, int (*)[0]: 1)]);
+
+void
+const_expr(void)
+{
+ int n = 7;
+
+ _Static_assert (_Countof (int [0][3]) == 0);
+ _Static_assert (_Countof (int [0]) == 0);
+ _Static_assert (_Countof (int [0][n]) == 0);
+}
diff --git a/gcc/testsuite/gcc.dg/countof-zero.c b/gcc/testsuite/gcc.dg/countof-zero.c
new file mode 100644
index 0000000..27b5bdd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof-zero.c
@@ -0,0 +1,31 @@
+/* { dg-do run } */
+/* { dg-options "-std=gnu2y" } */
+
+#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+void
+vla (void)
+{
+ unsigned n;
+
+ n = 0;
+ int z[n];
+ assert (_Countof (z) == 0);
+}
+
+void
+matrix_vla (void)
+{
+ int i;
+
+ i = 0;
+ assert (_Countof (int [i++][4]) == 0);
+ assert (i == 0 + 1);
+}
+
+int
+main (void)
+{
+ vla ();
+ matrix_vla ();
+}
diff --git a/gcc/testsuite/gcc.dg/countof.c b/gcc/testsuite/gcc.dg/countof.c
new file mode 100644
index 0000000..5344885
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/countof.c
@@ -0,0 +1,120 @@
+/* { dg-do run } */
+/* { dg-options "-std=c2y -pedantic-errors" } */
+
+#define assert(e) ((e) ? (void) 0 : __builtin_abort ())
+
+void
+array (void)
+{
+ short a[7];
+
+ static_assert (_Countof (a) == 7);
+ static_assert (_Countof (unsigned [99]) == 99);
+}
+
+void
+completed (void)
+{
+ int a[] = {1, 2, 3};
+
+ static_assert (_Countof (a) == 3);
+}
+
+void
+vla (void)
+{
+ unsigned n;
+
+ n = 99;
+ assert (_Countof (short [n - 10]) == 99 - 10);
+
+ int v[n / 2];
+ assert (_Countof (v) == 99 / 2);
+}
+
+void
+member (void)
+{
+ struct {
+ int a[8];
+ } s;
+
+ static_assert (_Countof (s.a) == 8);
+}
+
+void
+vla_eval (void)
+{
+ int i;
+
+ i = 7;
+ assert (_Countof (struct {int x;}[i++]) == 7);
+ assert (i == 7 + 1);
+
+ int v[i];
+ int (*p)[i];
+ p = &v;
+ assert (_Countof (*p++) == i);
+ assert (p - 1 == &v);
+}
+
+void
+array_noeval (void)
+{
+ long a[5];
+ long (*p)[_Countof (a)];
+
+ p = &a;
+ static_assert (_Countof (*p++) == 5);
+ assert (p == &a);
+}
+
+void
+matrix_fixed (void)
+{
+ int i;
+
+ static_assert (_Countof (int [7][4]) == 7);
+ i = 3;
+ static_assert (_Countof (int [7][i]) == 7);
+}
+
+void
+matrix_vla (void)
+{
+ int i, j;
+
+ i = 7;
+ assert (_Countof (int [i++][4]) == 7);
+ assert (i == 7 + 1);
+
+ i = 9;
+ j = 3;
+ assert (_Countof (int [i++][j]) == 9);
+ assert (i == 9 + 1);
+}
+
+void
+no_parens(void)
+{
+ int n = 3;
+ int a[7];
+ int v[n];
+
+ static_assert (_Countof a == 7);
+ assert (_Countof v == 3);
+}
+
+int
+main (void)
+{
+ array ();
+ completed ();
+ vla ();
+ member ();
+ vla_eval ();
+ array_noeval ();
+ matrix_fixed ();
+ matrix_vla ();
+ no_parens ();
+}
diff --git a/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c b/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c
index c211f4f..fe5f081 100644
--- a/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c
+++ b/gcc/testsuite/gcc.dg/html-output/missing-semicolon.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fdiagnostics-add-output=experimental-html" } */
+/* { dg-options "-fdiagnostics-add-output=experimental-html:javascript=no" } */
/* Verify that basics of HTML output work. */
diff --git a/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py b/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
index 8ac1f14..02ff84c 100644
--- a/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
+++ b/gcc/testsuite/gcc.dg/html-output/missing-semicolon.py
@@ -18,12 +18,6 @@ import pytest
def html_tree():
return html_tree_from_env()
-XHTML = 'http://www.w3.org/1999/xhtml'
-ns = {'xhtml': XHTML}
-
-def make_tag(local_name):
- return f'{{{XHTML}}}' + local_name
-
def test_basics(html_tree):
root = html_tree.getroot ()
assert root.tag == make_tag('html')
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c
index 2499e8d..df57b25 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
-/* { dg-options "-fdiagnostics-set-output=experimental-html" } */
-/* { dg-additional-options "-fdiagnostics-show-caret" } */
+/* { dg-options "-fdiagnostics-set-output=experimental-html:javascript=no" } */
+/* { dg-additional-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } */
extern char *gets (char *s);
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py
index e475e95..b4c75b2 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-metadata-html.py
@@ -8,12 +8,6 @@ import pytest
def html_tree():
return html_tree_from_env()
-XHTML = 'http://www.w3.org/1999/xhtml'
-ns = {'xhtml': XHTML}
-
-def make_tag(local_name):
- return f'{{{XHTML}}}' + local_name
-
def test_metadata(html_tree):
root = html_tree.getroot ()
assert root.tag == make_tag('html')
@@ -48,11 +42,21 @@ def test_metadata(html_tree):
assert metadata[1][0].text == 'STR34-C'
assert metadata[1][0].tail == ']'
- src = diag.find('xhtml:pre', ns)
- assert src.attrib['class'] == 'gcc-annotated-source'
- assert src.text == (
- ' gets (buf);\n'
- ' ^~~~~~~~~~\n')
+ src = diag.find('xhtml:table', ns)
+ assert src.attrib['class'] == 'locus'
+
+ tbody = src.find('xhtml:tbody', ns)
+ assert tbody.attrib['class'] == 'line-span'
+
+ rows = tbody.findall('xhtml:tr', ns)
+
+ quoted_src_tr = rows[0]
+ assert_quoted_line(quoted_src_tr,
+ ' 10', ' gets (buf);')
+
+ annotation_tr = rows[1]
+ assert_annotation_line(annotation_tr,
+ ' ^~~~~~~~~~')
# For reference, here's the generated HTML:
"""
@@ -60,8 +64,13 @@ def test_metadata(html_tree):
<div class="gcc-diagnostic-list">
<div class="gcc-diagnostic">
<span class="gcc-message">never use &apos;<span class="gcc-quoted-text">gets</span>&apos;</span>
- <span class="gcc-metadata"><span class="gcc-metadata-item">[<a href="https://cwe.mitre.org/data/definitions/242.html">CWE-242</a>]</span><span class="gcc-metadata-item">[<a href="https://example.com/">STR34-C</a>]</span></span>
- ...etc...
+ <span class="gcc-metadata"><span class="gcc-metadata-item">[<a href="https://cwe.mitre.org/data/definitions/242.html">CWE-242</a>]</span><span class="gcc-metadata-item">[<a href="https://example.com/">STR34-C</a>]</span></span><table class="locus">
+<tbody class="line-span">
+<tr><td class="linenum"> 10</td> <td class="source"> gets (buf);</td></tr>
+<tr><td class="linenum"/><td class="annotation"> ^~~~~~~~~~</td></tr>
+</tbody>
+</table>
+
</div>
</div>
</body>
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
index 26605f7..dab9c38 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-add-output=experimental-html" } */
+/* { dg-options "-fdiagnostics-show-caret -fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-add-output=experimental-html:javascript=no" } */
#include <stddef.h>
#include <stdlib.h>
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py
index c212e49..59bee24 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-2.py
@@ -8,12 +8,6 @@ import pytest
def html_tree():
return html_tree_from_env()
-XHTML = 'http://www.w3.org/1999/xhtml'
-ns = {'xhtml': XHTML}
-
-def make_tag(local_name):
- return f'{{{XHTML}}}' + local_name
-
def test_paths(html_tree):
root = html_tree.getroot ()
assert root.tag == make_tag('html')
@@ -29,7 +23,19 @@ def test_paths(html_tree):
assert diag is not None
assert diag.attrib['class'] == 'gcc-diagnostic'
- pre = diag.findall('xhtml:pre', ns)
- assert pre[0].attrib['class'] == 'gcc-annotated-source'
- assert pre[1].attrib['class'] == 'gcc-execution-path'
- assert pre[1].text.startswith(" 'make_a_list_of_random_ints_badly': events 1-3")
+ event_ranges = diag.find('xhtml:div', ns)
+ assert_class(event_ranges, 'event-ranges')
+
+ frame_margin = event_ranges.find('xhtml:table', ns)
+ assert_class(frame_margin, 'stack-frame-with-margin')
+
+ tr = frame_margin.find('xhtml:tr', ns)
+ assert tr is not None
+ tds = tr.findall('xhtml:td', ns)
+ assert len(tds) == 2
+
+ assert_class(tds[0], 'interprocmargin')
+
+ test_frame = tds[1]
+ assert_frame(test_frame, 'make_a_list_of_random_ints_badly')
+ assert_event_range_with_margin(test_frame[1])
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.c
index 847b6d4..7eb0c50 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fdiagnostics-path-format=inline-events -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } */
+/* { dg-options "-fdiagnostics-path-format=inline-events -fdiagnostics-show-caret -fdiagnostics-show-line-numbers -fdiagnostics-add-output=experimental-html:javascript=no" } */
/* { dg-enable-nn-line-numbers "" } */
#include <stdio.h>
@@ -82,3 +82,7 @@ void test (void)
| | (9) calling 'fprintf'
|
{ dg-end-multiline-output "" } */
+
+/* Use a Python script to verify various properties about the generated
+ HTML file:
+ { dg-final { run-html-pytest diagnostic-test-paths-4.c "diagnostic-test-paths-4.py" } } */
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.py
new file mode 100644
index 0000000..e738729
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-paths-4.py
@@ -0,0 +1,190 @@
+# Verify that interprocedural execution paths work in HTML output.
+
+from htmltest import *
+
+import pytest
+
+@pytest.fixture(scope='function', autouse=True)
+def html_tree():
+ return html_tree_from_env()
+
+def test_paths(html_tree):
+ diag = get_diag_by_index(html_tree, 0)
+ src = get_locus_within_diag (diag)
+
+ tbody = src.find('xhtml:tbody', ns)
+ assert_class(tbody, 'line-span')
+
+ rows = tbody.findall('xhtml:tr', ns)
+
+ quoted_src_tr = rows[0]
+ assert_quoted_line(quoted_src_tr,
+ ' 13', ' fprintf(stderr, "LOG: %s", msg); /* { dg-warning "call to \'fprintf\' from within signal handler" } */')
+
+ annotation_tr = rows[1]
+ assert_annotation_line(annotation_tr,
+ ' ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
+
+ event_ranges = diag.find('xhtml:div', ns)
+ assert_class(event_ranges, 'event-ranges')
+
+ test_frame_margin = event_ranges.find('xhtml:table', ns)
+ assert_class(test_frame_margin, 'stack-frame-with-margin')
+
+ tr = test_frame_margin.find('xhtml:tr', ns)
+ assert tr is not None
+ tds = tr.findall('xhtml:td', ns)
+ assert len(tds) == 2
+
+ assert_class(tds[0], 'interprocmargin')
+
+ test_frame = tds[1]
+ assert_frame(test_frame, 'test')
+ assert_event_range_with_margin(test_frame[1])
+
+# For reference, generated HTML looks like this:
+"""
+<table class="stack-frame-with-margin"><tr>
+ <td class="interprocmargin" style="padding-left: 100px"/>
+ <td class="stack-frame">
+<div class="frame-funcname"><span>test</span></div><table class="event-range-with-margin"><tr>
+ <td class="event-range">
+ <div class="events-hdr"><span class="funcname">test</span>: <span class="event-ids">events 1-2</span></div>
+<table class="locus">
+<tbody class="line-span">
+<tr><td class="linenum"> 27</td> <td class="source">{</td></tr>
+<tr><td class="linenum"/><td class="annotation">^</td></tr>
+<tr><td class="linenum"/><td class="annotation">|</td></tr>
+<tr><td class="linenum"/><td class="annotation">(1) entering 'test'</td></tr>
+<tr><td class="linenum"> 28</td> <td class="source"> register_handler ();</td></tr>
+<tr><td class="linenum"/><td class="annotation"> ~~~~~~~~~~~~~~~~~~~</td></tr>
+<tr><td class="linenum"/><td class="annotation"> |</td></tr>
+<tr><td class="linenum"/><td class="annotation"> (2) calling 'register_handler'</td></tr>
+</tbody>
+</table>
+</td></tr></table>
+<div class="between-ranges-call">
+ <svg height="30" width="150">
+ <defs>
+ <marker id="arrowhead" markerWidth="10" markerHeight="7"
+ refX="0" refY="3.5" orient="auto" stroke="#0088ce" fill="#0088ce">
+ <polygon points="0 0, 10 3.5, 0 7"/>
+ </marker>
+ </defs>
+ <polyline points="20,0 20,10 120,10 120,20"
+ style="fill:none;stroke: #0088ce"
+ marker-end="url(#arrowhead)"/>
+ </svg>
+</div>
+
+<table class="stack-frame-with-margin"><tr>
+ <td class="interprocmargin" style="padding-left: 100px"/>
+ <td class="stack-frame">
+<div class="frame-funcname"><span>register_handler</span></div><table class="event-range-with-margin"><tr>
+ <td class="event-range">
+ <div class="events-hdr"><span class="funcname">register_handler</span>: <span class="event-ids">events 3-4</span></div>
+<table class="locus">
+<tbody class="line-span">
+<tr><td class="linenum"> 22</td> <td class="source">{</td></tr>
+<tr><td class="linenum"/><td class="annotation">^</td></tr>
+<tr><td class="linenum"/><td class="annotation">|</td></tr>
+<tr><td class="linenum"/><td class="annotation">(3) entering 'register_handler'</td></tr>
+<tr><td class="linenum"> 23</td> <td class="source"> signal(SIGINT, int_handler);</td></tr>
+<tr><td class="linenum"/><td class="annotation"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~</td></tr>
+<tr><td class="linenum"/><td class="annotation"> |</td></tr>
+<tr><td class="linenum"/><td class="annotation"> (4) registering 'int_handler' as signal handler</td></tr>
+</tbody>
+</table>
+</td></tr></table>
+</td></tr></table>
+</td></tr></table>
+<div class="between-ranges-return">
+ <svg height="30" width="250">
+ <defs>
+ <marker id="arrowhead" markerWidth="10" markerHeight="7"
+ refX="0" refY="3.5" orient="auto" stroke="#0088ce" fill="#0088ce">
+ <polygon points="0 0, 10 3.5, 0 7"/>
+ </marker>
+ </defs>
+ <polyline points="220,0 220,10 20,10 20,20"
+ style="fill:none;stroke: #0088ce"
+ marker-end="url(#arrowhead)"/>
+ </svg>
+</div>
+
+<table class="event-range-with-margin"><tr>
+ <td class="event-range">
+ <div class="events-hdr"><span class="event-ids">event 5</span></div>
+ (5): later on, when the signal is delivered to the process
+</td></tr></table>
+<div class="between-ranges-call">
+ <svg height="30" width="150">
+ <defs>
+ <marker id="arrowhead" markerWidth="10" markerHeight="7"
+ refX="0" refY="3.5" orient="auto" stroke="#0088ce" fill="#0088ce">
+ <polygon points="0 0, 10 3.5, 0 7"/>
+ </marker>
+ </defs>
+ <polyline points="20,0 20,10 120,10 120,20"
+ style="fill:none;stroke: #0088ce"
+ marker-end="url(#arrowhead)"/>
+ </svg>
+</div>
+
+<table class="stack-frame-with-margin"><tr>
+ <td class="interprocmargin" style="padding-left: 100px"/>
+ <td class="stack-frame">
+<div class="frame-funcname"><span>int_handler</span></div><table class="event-range-with-margin"><tr>
+ <td class="event-range">
+ <div class="events-hdr"><span class="funcname">int_handler</span>: <span class="event-ids">events 6-7</span></div>
+<table class="locus">
+<tbody class="line-span">
+<tr><td class="linenum"> 17</td> <td class="source">{</td></tr>
+<tr><td class="linenum"/><td class="annotation">^</td></tr>
+<tr><td class="linenum"/><td class="annotation">|</td></tr>
+<tr><td class="linenum"/><td class="annotation">(6) entering 'int_handler'</td></tr>
+<tr><td class="linenum"> 18</td> <td class="source"> custom_logger("got signal");</td></tr>
+<tr><td class="linenum"/><td class="annotation"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~</td></tr>
+<tr><td class="linenum"/><td class="annotation"> |</td></tr>
+<tr><td class="linenum"/><td class="annotation"> (7) calling 'custom_logger'</td></tr>
+</tbody>
+</table>
+</td></tr></table>
+<div class="between-ranges-call">
+ <svg height="30" width="150">
+ <defs>
+ <marker id="arrowhead" markerWidth="10" markerHeight="7"
+ refX="0" refY="3.5" orient="auto" stroke="#0088ce" fill="#0088ce">
+ <polygon points="0 0, 10 3.5, 0 7"/>
+ </marker>
+ </defs>
+ <polyline points="20,0 20,10 120,10 120,20"
+ style="fill:none;stroke: #0088ce"
+ marker-end="url(#arrowhead)"/>
+ </svg>
+</div>
+
+<table class="stack-frame-with-margin"><tr>
+ <td class="interprocmargin" style="padding-left: 100px"/>
+ <td class="stack-frame">
+<div class="frame-funcname"><span>custom_logger</span></div><table class="event-range-with-margin"><tr>
+ <td class="event-range">
+ <div class="events-hdr"><span class="funcname">custom_logger</span>: <span class="event-ids">events 8-9</span></div>
+<table class="locus">
+<tbody class="line-span">
+<tr><td class="linenum"> 12</td> <td class="source">{</td></tr>
+<tr><td class="linenum"/><td class="annotation">^</td></tr>
+<tr><td class="linenum"/><td class="annotation">|</td></tr>
+<tr><td class="linenum"/><td class="annotation">(8) entering 'custom_logger'</td></tr>
+<tr><td class="linenum"> 13</td> <td class="source"> fprintf(stderr, "LOG: %s", msg); /* { dg-warning "call to 'fprintf' from within signal handler" } */</td></tr>
+<tr><td class="linenum"/><td class="annotation"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</td></tr>
+<tr><td class="linenum"/><td class="annotation"> |</td></tr>
+<tr><td class="linenum"/><td class="annotation"> (9) calling 'fprintf'</td></tr>
+</tbody>
+</table>
+</td></tr></table>
+</td></tr></table>
+</td></tr></table>
+
+</div>
+ """
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c
index 1e8f73b..e81856a 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O -fdiagnostics-show-caret -fdiagnostics-show-line-numbers" } */
+/* { dg-options "-O -fdiagnostics-show-caret -fdiagnostics-show-line-numbers -fdiagnostics-add-output=experimental-html:javascript=no" } */
/* This is a collection of unittests for diagnostic_show_locus;
see the overview in diagnostic_plugin_test_show_locus.c.
@@ -118,3 +118,7 @@ void test_fixit_insert_newline (void)
{ dg-end-multiline-output "" } */
#endif
}
+
+/* Use a Python script to verify various properties about the generated
+ HTML file:
+ { dg-final { run-html-pytest diagnostic-test-show-locus-bw-line-numbers.c "diagnostic-test-show-locus.py" } } */
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus.py b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus.py
new file mode 100644
index 0000000..d963b29
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus.py
@@ -0,0 +1,111 @@
+# Verify that diagnostic-show-locus.cc works with HTML output.
+
+from htmltest import *
+
+import pytest
+
+@pytest.fixture(scope='function', autouse=True)
+def html_tree():
+ return html_tree_from_env()
+
+#def get_tr_within_thead(thead, idx)
+
+def get_ruler_text(thead, idx):
+ trs = thead.findall('xhtml:tr', ns)
+ tr = trs[idx]
+ tds = tr.findall('xhtml:td', ns)
+ assert len(tds) == 3
+ assert_class(tds[2], 'ruler')
+ return tds[2].text
+
+def test_very_wide_line(html_tree):
+ diag = get_diag_by_index(html_tree, 2)
+ src = get_locus_within_diag(diag)
+
+ # Check ruler
+ thead = src.find('xhtml:thead', ns)
+ assert_class(thead, 'ruler')
+ trs = thead.findall('xhtml:tr', ns)
+ assert len(trs) == 3
+
+ assert get_ruler_text(thead, 0) == ' 0 0 0 0 0 1 1 '
+ assert get_ruler_text(thead, 1) == ' 5 6 7 8 9 0 1 '
+ assert get_ruler_text(thead, 2) == '34567890123456789012345678901234567890123456789012345678901234567890123'
+
+ # Check quoted source
+ tbody = src.find('xhtml:tbody', ns)
+ assert_class(tbody, 'line-span')
+ trs = tbody.findall('xhtml:tr', ns)
+ assert len(trs) == 5
+ assert_quoted_line(trs[0], ' 43', ' float f = foo * bar; /* { dg-warning "95: test" } */')
+ assert_annotation_line(trs[1], ' ~~~~^~~~~')
+ assert_annotation_line(trs[2], ' |')
+ assert_annotation_line(trs[3], ' label 0')
+ assert_annotation_line(trs[4], ' bar * foo')
+
+def test_fixit_insert(html_tree):
+ diag = get_diag_by_index(html_tree, 3)
+ msg = get_message_within_diag(diag)
+ assert msg.text == 'example of insertion hints'
+
+ src = get_locus_within_diag(diag)
+
+ # Check quoted source
+ tbody = src.find('xhtml:tbody', ns)
+ assert_class(tbody, 'line-span')
+ trs = tbody.findall('xhtml:tr', ns)
+ assert len(trs) == 3
+ assert_quoted_line(trs[0], ' 63', ' int a[2][2] = { 0, 1 , 2, 3 }; /* { dg-warning "insertion hints" } */')
+ assert_annotation_line(trs[1], ' ^~~~')
+ assert_annotation_line(trs[2], ' { }')
+
+def test_fixit_remove(html_tree):
+ diag = get_diag_by_index(html_tree, 4)
+ msg = get_message_within_diag(diag)
+ assert msg.text == 'example of a removal hint'
+
+ src = get_locus_within_diag(diag)
+
+ # Check quoted source
+ tbody = src.find('xhtml:tbody', ns)
+ assert_class(tbody, 'line-span')
+ trs = tbody.findall('xhtml:tr', ns)
+ assert len(trs) == 3
+ assert_quoted_line(trs[0], ' 77', ' int a;; /* { dg-warning "example of a removal hint" } */')
+ assert_annotation_line(trs[1], ' ^')
+ assert_annotation_line(trs[2], ' -')
+
+def test_fixit_replace(html_tree):
+ diag = get_diag_by_index(html_tree, 5)
+ msg = get_message_within_diag(diag)
+ assert msg.text == 'example of a replacement hint'
+
+ src = get_locus_within_diag(diag)
+
+ # Check quoted source
+ tbody = src.find('xhtml:tbody', ns)
+ assert_class(tbody, 'line-span')
+ trs = tbody.findall('xhtml:tr', ns)
+ assert len(trs) == 3
+ assert_quoted_line(trs[0], ' 91', ' gtk_widget_showall (dlg); /* { dg-warning "example of a replacement hint" } */')
+ assert_annotation_line(trs[1], ' ^~~~~~~~~~~~~~~~~~')
+ assert_annotation_line(trs[2], ' gtk_widget_show_all')
+
+def test_fixit_insert_newline(html_tree):
+ diag = get_diag_by_index(html_tree, 6)
+ msg = get_message_within_diag(diag)
+ assert msg.text == 'example of newline insertion hint'
+
+ src = get_locus_within_diag(diag)
+
+ # Check quoted source
+ tbody = src.find('xhtml:tbody', ns)
+ assert_class(tbody, 'line-span')
+ trs = tbody.findall('xhtml:tr', ns)
+ assert len(trs) == 4
+ assert_quoted_line(trs[0], ' 109', ' x = a;')
+ assert_annotation_line(trs[1], ' break;',
+ expected_line_num=' +++',
+ expected_left_margin='+')
+ assert_quoted_line(trs[2], ' 110', " case 'b': /* { dg-warning \"newline insertion\" } */")
+ assert_annotation_line(trs[3], ' ^~~~~~~~')
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc
index 5ec3418..4ade232 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.cc
@@ -176,9 +176,10 @@ test_diagnostic_text_starter (diagnostic_text_output_format &text_output,
void
test_diagnostic_start_span_fn (const diagnostic_location_print_policy &,
- pretty_printer *pp,
+ to_text &sink,
expanded_location)
{
+ pretty_printer *pp = get_printer (sink);
pp_string (pp, "START_SPAN_FN: ");
pp_newline (pp);
}
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr119181.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr119181.c
new file mode 100644
index 0000000..b0d3e5a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr119181.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+void
+foo (int* a, int* restrict b)
+{
+ b[0] = a[0] * a[64];
+ b[1] = a[65] * a[1];
+ b[2] = a[2] * a[66];
+ b[3] = a[67] * a[3];
+ b[4] = a[68] * a[4];
+ b[5] = a[69] * a[5];
+ b[6] = a[6] * a[70];
+ b[7] = a[7] * a[71];
+}
+
+/* { dg-final { scan-tree-dump-times "optimized: basic block" 1 "slp2" { target vect_int_mult } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr119884.c b/gcc/testsuite/gcc.target/i386/pr119884.c
new file mode 100644
index 0000000..34d5b68
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr119884.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-dse -favoid-store-forwarding" } */
+
+typedef __attribute__((__vector_size__(64))) char V;
+char c;
+V v;
+
+char
+foo()
+{
+ v *= c;
+ return v[0];
+} \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/i386/vect-epilogues-5.c b/gcc/testsuite/gcc.target/i386/vect-epilogues-5.c
index 6772cab..d7c75df 100644
--- a/gcc/testsuite/gcc.target/i386/vect-epilogues-5.c
+++ b/gcc/testsuite/gcc.target/i386/vect-epilogues-5.c
@@ -9,5 +9,6 @@ int test (signed char *data, int n)
return sum;
}
-/* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "epilogue loop vectorized using masked 64 byte vectors" 1 "vect" } } */
/* { dg-final { scan-tree-dump-not "loop vectorized using 32 byte vectors" "vect" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h
new file mode 100644
index 0000000..746c635
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h
@@ -0,0 +1,23 @@
+#ifndef HAVE_DEFINED_AVG_H
+#define HAVE_DEFINED_AVG_H
+
+#include <stdint.h>
+
+#define DEF_AVG_0(NT, WT, NAME) \
+__attribute__((noinline)) \
+void \
+test_##NAME##_##WT##_##NT##_0(NT * restrict a, NT * restrict b, \
+ NT * restrict out, int n) \
+{ \
+ for (int i = 0; i < n; i++) { \
+ out[i] = (NT)(((WT)a[i] + (WT)b[i]) >> 1); \
+ } \
+}
+#define DEF_AVG_0_WRAP(NT, WT, NAME) DEF_AVG_0(NT, WT, NAME)
+
+#define RUN_AVG_0(NT, WT, NAME, a, b, out, n) \
+ test_##NAME##_##WT##_##NT##_0(a, b, out, n)
+#define RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n) \
+ RUN_AVG_0(NT, WT, NAME, a, b, out, n)
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h
new file mode 100644
index 0000000..cbeed14
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h
@@ -0,0 +1,185 @@
+#ifndef HAVE_DEFINED_AVG_DATA_H
+#define HAVE_DEFINED_AVG_DATA_H
+
+#define N 16
+
+#define TEST_AVG_DATA(T, NAME) test_##T##_##NAME##_data
+#define TEST_AVG_DATA_WRAP(T, NAME) TEST_AVG_DATA(T, NAME)
+
+int8_t TEST_AVG_DATA(int8_t, avg_floor)[][3][N] =
+{
+ {
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ 8, 8, 8, 8,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 1, 1, 1, 1,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 4, 4, 4, 4,
+ },
+ },
+ {
+ {
+ 127, 127, 127, 127,
+ 127, 127, 127, 127,
+ -128, -128, -128, -128,
+ -128, -128, -128, -128,
+ },
+ {
+ 126, 126, 126, 126,
+ -2, -2, -2, -2,
+ 127, 127, 127, 127,
+ -127, -127, -127, -127,
+ },
+ {
+ 126, 126, 126, 126,
+ 62, 62, 62, 62,
+ -1, -1, -1, -1,
+ -128, -128, -128, -128,
+ },
+ },
+};
+
+int16_t TEST_AVG_DATA(int16_t, avg_floor)[][3][N] =
+{
+ {
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ 8, 8, 8, 8,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 1, 1, 1, 1,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 4, 4, 4, 4,
+ },
+ },
+ {
+ {
+ 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767,
+ -32768, -32768, -32768, -32768,
+ -32768, -32768, -32768, -32768,
+ },
+ {
+ 32766, 32766, 32766, 32766,
+ -2, -2, -2, -2,
+ 32767, 32767, 32767, 32767,
+ -32767, -32767, -32767, -32767,
+ },
+ {
+ 32766, 32766, 32766, 32766,
+ 16382, 16382, 16382, 16382,
+ -1, -1, -1, -1,
+ -32768, -32768, -32768, -32768,
+ },
+ },
+};
+
+int32_t TEST_AVG_DATA(int32_t, avg_floor)[][3][N] =
+{
+ {
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ 8, 8, 8, 8,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 1, 1, 1, 1,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 4, 4, 4, 4,
+ },
+ },
+ {
+ {
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ },
+ {
+ 2147483646, 2147483646, 2147483646, 2147483646,
+ -2, -2, -2, -2,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ -2147483647, -2147483647, -2147483647, -2147483647,
+ },
+ {
+ 2147483646, 2147483646, 2147483646, 2147483646,
+ 1073741822, 1073741822, 1073741822, 1073741822,
+ -1, -1, -1, -1,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ },
+ },
+};
+
+int64_t TEST_AVG_DATA(int64_t, avg_floor)[][3][N] =
+{
+ {
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ 8, 8, 8, 8,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 1, 1, 1, 1,
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ -2, -2, -2, -2,
+ 4, 4, 4, 4,
+ },
+ },
+ {
+ {
+ 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull,
+ 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ },
+ {
+ 9223372036854775806ull, 9223372036854775806ull, 9223372036854775806ull, 9223372036854775806ull,
+ 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull,
+ -2ull, -2ull, -2ull, -2ull,
+ -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull, -9223372036854775807ull,
+ },
+ {
+ 9223372036854775806ull, 9223372036854775806ull, 9223372036854775806ull, 9223372036854775806ull,
+ 4611686018427387902ull, 4611686018427387902ull, 4611686018427387902ull, 4611686018427387902ull,
+ -1ull, -1ull, -1ull, -1ull,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ },
+ },
+};
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c
new file mode 100644
index 0000000..16ba967
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "avg.h"
+
+#define NT int16_t
+#define WT int32_t
+
+DEF_AVG_0(NT, WT, avg_floor)
+
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+/* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c
new file mode 100644
index 0000000..b229b4b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "avg.h"
+
+#define NT int16_t
+#define WT int64_t
+
+DEF_AVG_0(NT, WT, avg_floor)
+
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+/* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c
new file mode 100644
index 0000000..5f946bb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "avg.h"
+
+#define NT int32_t
+#define WT int64_t
+
+DEF_AVG_0(NT, WT, avg_floor)
+
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+/* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c
new file mode 100644
index 0000000..5d9297a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "avg.h"
+
+#define NT int8_t
+#define WT int16_t
+
+DEF_AVG_0(NT, WT, avg_floor)
+
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+/* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c
new file mode 100644
index 0000000..5c5d4ea
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "avg.h"
+
+#define NT int8_t
+#define WT int32_t
+
+DEF_AVG_0(NT, WT, avg_floor)
+
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+/* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c
new file mode 100644
index 0000000..f297953
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include "avg.h"
+
+#define NT int8_t
+#define WT int64_t
+
+DEF_AVG_0(NT, WT, avg_floor)
+
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 1 } } */
+/* { dg-final { scan-assembler-times {vaadd.vv} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c
new file mode 100644
index 0000000..9d0dd61
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c
@@ -0,0 +1,16 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 -O3" } */
+
+#include "avg.h"
+#include "avg_data.h"
+
+#define WT int32_t
+#define NT int16_t
+#define NAME avg_floor
+
+DEF_AVG_0_WRAP(NT, WT, NAME)
+
+#define TEST_DATA TEST_AVG_DATA_WRAP(NT, NAME)
+#define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+
+#include "avg_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c
new file mode 100644
index 0000000..2736baa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c
@@ -0,0 +1,16 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 -O3" } */
+
+#include "avg.h"
+#include "avg_data.h"
+
+#define WT int64_t
+#define NT int16_t
+#define NAME avg_floor
+
+DEF_AVG_0_WRAP(NT, WT, NAME)
+
+#define TEST_DATA TEST_AVG_DATA_WRAP(NT, NAME)
+#define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+
+#include "avg_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c
new file mode 100644
index 0000000..2334045
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c
@@ -0,0 +1,16 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 -O3" } */
+
+#include "avg.h"
+#include "avg_data.h"
+
+#define WT int64_t
+#define NT int32_t
+#define NAME avg_floor
+
+DEF_AVG_0_WRAP(NT, WT, NAME)
+
+#define TEST_DATA TEST_AVG_DATA_WRAP(NT, NAME)
+#define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+
+#include "avg_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c
new file mode 100644
index 0000000..8364748
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c
@@ -0,0 +1,16 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 -O3" } */
+
+#include "avg.h"
+#include "avg_data.h"
+
+#define WT int16_t
+#define NT int8_t
+#define NAME avg_floor
+
+DEF_AVG_0_WRAP(NT, WT, NAME)
+
+#define TEST_DATA TEST_AVG_DATA_WRAP(NT, NAME)
+#define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+
+#include "avg_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c
new file mode 100644
index 0000000..157c936
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c
@@ -0,0 +1,16 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 -O3" } */
+
+#include "avg.h"
+#include "avg_data.h"
+
+#define WT int32_t
+#define NT int8_t
+#define NAME avg_floor
+
+DEF_AVG_0_WRAP(NT, WT, NAME)
+
+#define TEST_DATA TEST_AVG_DATA_WRAP(NT, NAME)
+#define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+
+#include "avg_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c
new file mode 100644
index 0000000..2db0d3c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c
@@ -0,0 +1,16 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 -O3" } */
+
+#include "avg.h"
+#include "avg_data.h"
+
+#define WT int64_t
+#define NT int8_t
+#define NAME avg_floor
+
+DEF_AVG_0_WRAP(NT, WT, NAME)
+
+#define TEST_DATA TEST_AVG_DATA_WRAP(NT, NAME)
+#define TEST_RUN(NT, WT, NAME, a, b, out, n) RUN_AVG_0_WRAP(NT, WT, NAME, a, b, out, n)
+
+#include "avg_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h
new file mode 100644
index 0000000..a6bbee9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h
@@ -0,0 +1,26 @@
+#ifndef HAVE_DEFINED_AVG_RUN_H
+#define HAVE_DEFINED_AVG_RUN_H
+
+int
+main ()
+{
+ unsigned i, k;
+ NT out[N];
+
+ for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++)
+ {
+ NT *a = TEST_DATA[i][0];
+ NT *b = TEST_DATA[i][1];
+ NT *expect = TEST_DATA[i][2];
+
+ TEST_RUN (NT, WT, NAME, a, b, out, N);
+
+ for (k = 0; k < N; k++)
+ if (out[k] != expect[k])
+ __builtin_abort ();
+ }
+
+ return 0;
+}
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
index 983c9b4..f78bdc0 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
@@ -345,6 +345,31 @@ vec_sat_s_add_##T##_fmt_4 (T *out, T *op_1, T *op_2, unsigned limit) \
#define RUN_VEC_SAT_S_ADD_FMT_4_WRAP(T, out, op_1, op_2, N) \
RUN_VEC_SAT_S_ADD_FMT_4(T, out, op_1, op_2, N)
+#define DEF_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, UT, IMM, MIN, MAX) \
+void __attribute__((noinline)) \
+vec_sat_s_add_imm_##T##_fmt_1##_##INDEX (T *out, T *op_1, unsigned limit) \
+{ \
+ unsigned i; \
+ for (i = 0; i < limit; i++) \
+ { \
+ T x = op_1[i]; \
+ T sum = (UT)x + (UT)IMM; \
+ out[i] = (x ^ IMM) < 0 \
+ ? sum \
+ : (sum ^ x) >= 0 \
+ ? sum \
+ : x < 0 ? MIN : MAX; \
+ } \
+}
+#define DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(INDEX, T, UT, IMM, MIN, MAX) \
+ DEF_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, UT, IMM, MIN, MAX)
+
+#define RUN_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, out, in, expect, IMM, N) \
+ vec_sat_s_add_imm_##T##_fmt_1##_##INDEX (out, in, N); \
+ VALIDATE_RESULT (out, expect, N)
+#define RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(INDEX, T, out, in, expect, IMM, N) \
+ RUN_VEC_SAT_S_ADD_IMM_FMT_1(INDEX, T, out, in, expect, IMM, N)
+
/******************************************************************************/
/* Saturation Sub (Unsigned and Signed) */
/******************************************************************************/
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
index ec4d64c..9f05c0c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
@@ -744,6 +744,246 @@ uint64_t TEST_UNARY_DATA(uint64_t, sat_u_sub_imm)[][2][N] =
},
};
+int8_t TEST_UNARY_DATA(int8_t, sat_s_add_imm)[][2][N] =
+{
+ { /* For add imm -128 */
+ {
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ },
+ {
+ -128, -128, -28, -1,
+ -128, -128, -28, -1,
+ -128, -128, -28, -1,
+ -128, -128, -28, -1,
+ },
+ },
+ { /* For add imm 0 */
+ {
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ },
+ {
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ },
+ },
+ { /* For add imm 1 */
+ {
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ },
+ {
+ -127, 1, 101, 127,
+ -127, 1, 101, 127,
+ -127, 1, 101, 127,
+ -127, 1, 101, 127,
+ },
+ },
+ { /* For add imm 127 */
+ {
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ -128, 0, 100, 127,
+ },
+ {
+ -1, 127, 127, 127,
+ -1, 127, 127, 127,
+ -1, 127, 127, 127,
+ -1, 127, 127, 127,
+ },
+ },
+};
+
+int16_t TEST_UNARY_DATA(int16_t, sat_s_add_imm)[][2][N] =
+{
+ { /* For add imm -32768 */
+ {
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ },
+ {
+ -32768, -32768, -32668, -1,
+ -32768, -32768, -32668, -1,
+ -32768, -32768, -32668, -1,
+ -32768, -32768, -32668, -1,
+ },
+ },
+ { /* For add imm 0 */
+ {
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ },
+ {
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ },
+ },
+ { /* For add imm 1 */
+ {
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ },
+ {
+ -32767, 1, 101, 32767,
+ -32767, 1, 101, 32767,
+ -32767, 1, 101, 32767,
+ -32767, 1, 101, 32767,
+ },
+ },
+ { /* For add imm 32767 */
+ {
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ -32768, 0, 100, 32767,
+ },
+ {
+ -1, 32767, 32767, 32767,
+ -1, 32767, 32767, 32767,
+ -1, 32767, 32767, 32767,
+ -1, 32767, 32767, 32767,
+ },
+ },
+};
+
+int32_t TEST_UNARY_DATA(int32_t, sat_s_add_imm)[][2][N] =
+{
+ { /* For add imm -2147483648 */
+ {
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ },
+ {
+ -2147483648, -2147483648, -2147483548, -1,
+ -2147483648, -2147483648, -2147483548, -1,
+ -2147483648, -2147483648, -2147483548, -1,
+ -2147483648, -2147483648, -2147483548, -1,
+ },
+ },
+ { /* For add imm 0 */
+ {
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ },
+ {
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ },
+ },
+ { /* For add imm 1 */
+ {
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ },
+ {
+ -2147483647, 1, 101, 2147483647,
+ -2147483647, 1, 101, 2147483647,
+ -2147483647, 1, 101, 2147483647,
+ -2147483647, 1, 101, 2147483647,
+ },
+ },
+ { /* For add imm 2147483647 */
+ {
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ -2147483648, 0, 100, 2147483647,
+ },
+ {
+ -1, 2147483647, 2147483647, 2147483647,
+ -1, 2147483647, 2147483647, 2147483647,
+ -1, 2147483647, 2147483647, 2147483647,
+ -1, 2147483647, 2147483647, 2147483647,
+ },
+ },
+};
+
+int64_t TEST_UNARY_DATA(int64_t, sat_s_add_imm)[][2][N] =
+{
+ { /* For add imm -9223372036854775808ll */
+ {
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ },
+ {
+ INT64_MIN, INT64_MIN, -9223372036854775708ll, -1,
+ INT64_MIN, INT64_MIN, -9223372036854775708ll, -1,
+ INT64_MIN, INT64_MIN, -9223372036854775708ll, -1,
+ INT64_MIN, INT64_MIN, -9223372036854775708ll, -1,
+ },
+ },
+ { /* For add imm 0 */
+ {
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ },
+ {
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ },
+ },
+ { /* For add imm 1 */
+ {
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ },
+ {
+ -INT64_MAX, 1, 101, INT64_MAX,
+ -INT64_MAX, 1, 101, INT64_MAX,
+ -INT64_MAX, 1, 101, INT64_MAX,
+ -INT64_MAX, 1, 101, INT64_MAX,
+ },
+ },
+ { /* For add imm 9223372036854775807ll */
+ {
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ INT64_MIN, 0, 100, INT64_MAX,
+ },
+ {
+ -1, INT64_MAX, INT64_MAX, INT64_MAX,
+ -1, INT64_MAX, INT64_MAX, INT64_MAX,
+ -1, INT64_MAX, INT64_MAX, INT64_MAX,
+ -1, INT64_MAX, INT64_MAX, INT64_MAX,
+ },
+ },
+};
+
#define TEST_BINARY_DATA_NAME(T1, T2, NAME) test_bin_##T1##_##T2##_##NAME##_data
#define TEST_BINARY_DATA_NAME_WRAP(T1, T2, NAME) \
TEST_BINARY_DATA_NAME(T1, T2, NAME)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c
new file mode 100644
index 0000000..396c741
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i16.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, 9, INT16_MIN, INT16_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */
+/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c
new file mode 100644
index 0000000..da9e538
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i32.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, 9, INT32_MIN, INT32_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */
+/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c
new file mode 100644
index 0000000..e9af1a1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i64.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, 9, INT64_MIN, INT64_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */
+/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c
new file mode 100644
index 0000000..66b9d7f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-1-i8.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" { target { no-opts "-O2" } } } } */
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" { target { no-opts "-O3" } } } } */
+/* { dg-final { scan-assembler-times {vsadd\.vi} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c
new file mode 100644
index 0000000..fbfa4e2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i16.c
@@ -0,0 +1,28 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+#include "vec_sat_data.h"
+
+#define T int16_t
+#define RUN(INDEX, T, out, in, expect, IMM, N) \
+ RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N)
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int16_t, uint16_t, -32768, INT16_MIN, INT16_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int16_t, uint16_t, 0, INT16_MIN, INT16_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int16_t, uint16_t, 1, INT16_MIN, INT16_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int16_t, uint16_t, 32767, INT16_MIN, INT16_MAX)
+
+int
+main ()
+{
+ T out[N];
+ T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm);
+
+ RUN (0, T, out, d[0][0], d[0][1], -32768, N);
+ RUN (1, T, out, d[1][0], d[1][1], 0, N);
+ RUN (2, T, out, d[2][0], d[2][1], 1, N);
+ RUN (3, T, out, d[3][0], d[3][1], 32767, N);
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c
new file mode 100644
index 0000000..5f1763c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i32.c
@@ -0,0 +1,28 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+#include "vec_sat_data.h"
+
+#define T int32_t
+#define RUN(INDEX, T, out, in, expect, IMM, N) \
+ RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N)
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int32_t, uint32_t, -2147483648, INT32_MIN, INT32_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int32_t, uint32_t, 0, INT32_MIN, INT32_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int32_t, uint32_t, 1, INT32_MIN, INT32_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int32_t, uint32_t, 2147483647, INT32_MIN, INT32_MAX)
+
+int
+main ()
+{
+ T out[N];
+ T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm);
+
+ RUN (0, T, out, d[0][0], d[0][1], -2147483648, N);
+ RUN (1, T, out, d[1][0], d[1][1], 0, N);
+ RUN (2, T, out, d[2][0], d[2][1], 1, N);
+ RUN (3, T, out, d[3][0], d[3][1], 2147483647, N);
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c
new file mode 100644
index 0000000..435eb1b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i64.c
@@ -0,0 +1,28 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+#include "vec_sat_data.h"
+
+#define T int64_t
+#define RUN(INDEX, T, out, in, expect, IMM, N) \
+ RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N)
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int64_t, uint64_t, INT64_MIN, INT64_MIN, INT64_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int64_t, uint64_t, 0, INT64_MIN, INT64_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int64_t, uint64_t, 1, INT64_MIN, INT64_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int64_t, uint64_t, INT64_MAX, INT64_MIN, INT64_MAX)
+
+int
+main ()
+{
+ T out[N];
+ T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm);
+
+ RUN (0, T, out, d[0][0], d[0][1], INT64_MIN, N);
+ RUN (1, T, out, d[1][0], d[1][1], 0, N);
+ RUN (2, T, out, d[2][0], d[2][1], 1, N);
+ RUN (3, T, out, d[3][0], d[3][1], INT64_MAX, N);
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c
new file mode 100644
index 0000000..535e873
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm-run-1-i8.c
@@ -0,0 +1,28 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99" } */
+
+#include "vec_sat_arith.h"
+#include "vec_sat_data.h"
+
+#define T int8_t
+#define RUN(INDEX, T, out, in, expect, IMM, N) \
+ RUN_VEC_SAT_S_ADD_IMM_FMT_1_WRAP (INDEX, T, out, in, expect, IMM, N)
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(0, int8_t, uint8_t, -128, INT8_MIN, INT8_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(1, int8_t, uint8_t, 0, INT8_MIN, INT8_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(2, int8_t, uint8_t, 1, INT8_MIN, INT8_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1_WRAP(3, int8_t, uint8_t, 127, INT8_MIN, INT8_MAX)
+
+int
+main ()
+{
+ T out[N];
+ T (*d)[2][N] = TEST_UNARY_DATA_WRAP (T, sat_s_add_imm);
+
+ RUN (0, T, out, d[0][0], d[0][1], -128, N);
+ RUN (1, T, out, d[1][0], d[1][1], 0, N);
+ RUN (2, T, out, d[2][0], d[2][1], 1, N);
+ RUN (3, T, out, d[3][0], d[3][1], 127, N);
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c
new file mode 100644
index 0000000..26e96fc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i16.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -32769, INT16_MIN, INT16_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, 32768, INT16_MIN, INT16_MAX)
+
+/* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c
new file mode 100644
index 0000000..519e72c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i32.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, -2147483649, INT32_MIN, INT32_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, 2147483648, INT32_MIN, INT32_MAX)
+
+/* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c
new file mode 100644
index 0000000..2b0af52
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_s_add_imm_type_check-1-i8.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -ftree-vectorize -fdump-tree-optimized" } */
+
+#include "vec_sat_arith.h"
+
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 200, INT8_MIN, INT8_MAX)
+DEF_VEC_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, -300, INT8_MIN, INT8_MAX)
+
+/* { dg-final { scan-tree-dump-not ".SAT_ADD " "optimized" } } */
+
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c
index 30e60d5..4920fa6 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c
@@ -25,9 +25,8 @@ DEF_AVG_FLOOR (uint8_t, uint16_t, 512)
DEF_AVG_FLOOR (uint8_t, uint16_t, 1024)
DEF_AVG_FLOOR (uint8_t, uint16_t, 2048)
-/* { dg-final { scan-assembler-times {vwadd\.vv} 10 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 10 } } */
-/* { dg-final { scan-assembler-times {vnsra\.wi} 10 } } */
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 20 } } */
+/* { dg-final { scan-assembler-times {vaadd\.vv} 10 } } */
/* { dg-final { scan-assembler-times {vaaddu\.vv} 10 } } */
/* { dg-final { scan-assembler-not {csrr} } } */
/* { dg-final { scan-tree-dump-not "1,1" "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c
index 33df429..c6a120b 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c
@@ -23,9 +23,8 @@ DEF_AVG_FLOOR (uint16_t, uint32_t, 256)
DEF_AVG_FLOOR (uint16_t, uint32_t, 512)
DEF_AVG_FLOOR (uint16_t, uint32_t, 1024)
-/* { dg-final { scan-assembler-times {vwadd\.vv} 9 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 9 } } */
-/* { dg-final { scan-assembler-times {vnsra\.wi} 9 } } */
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 18 } } */
+/* { dg-final { scan-assembler-times {vaadd\.vv} 9 } } */
/* { dg-final { scan-assembler-times {vaaddu\.vv} 9 } } */
/* { dg-final { scan-assembler-not {csrr} } } */
/* { dg-final { scan-tree-dump-not "1,1" "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c
index 9058905..2838c1e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c
@@ -21,9 +21,8 @@ DEF_AVG_FLOOR (uint32_t, uint64_t, 128)
DEF_AVG_FLOOR (uint32_t, uint64_t, 256)
DEF_AVG_FLOOR (uint32_t, uint64_t, 512)
-/* { dg-final { scan-assembler-times {vwadd\.vv} 8 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 8 } } */
-/* { dg-final { scan-assembler-times {vnsra\.wi} 8 } } */
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 16 } } */
+/* { dg-final { scan-assembler-times {vaadd\.vv} 8 } } */
/* { dg-final { scan-assembler-times {vaaddu\.vv} 8 } } */
/* { dg-final { scan-assembler-not {csrr} } } */
/* { dg-final { scan-tree-dump-not "1,1" "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
index b15cb4c..144d1ba 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vmul.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
index df3d3a3..74d35d1 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vmul.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
index ed17b83..ac512ff 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vmul.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
index aa11daf..4f7b675 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vmul.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
index 15db588..7e107d3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
index f15592c..f8ffab7 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
index 80e32af..31d2945 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
index 9b19276..59e0334 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub);
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
/* { dg-final { scan-assembler-times {vor.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vxor.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
index 596488c..075c8be 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
index 8b4b7eb..595479c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
index 544c907..7b6fcbf 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
index af53f2b..55fc717 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
index a8ff915..9612e3f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
index d587a88..9641802 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
index ff205d5..0d173e0 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
index e8e2c7f..931295e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
index bd38b86..bec6b3a 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
index e0bdd22..98fce52 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
index aab3b4af..48dd57a 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
index 825988b..9bdce82 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
+DEF_VX_BINARY_CASE_0_WRAP(T, *, mul)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
index a750510..24b4aa7 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
index 2d279cf..0c1552a 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
index 5a90883..8364f19 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
index 69af97a..8a31111 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_0_WRAP(T, -, sub)
DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, rsub)
DEF_VX_BINARY_CASE_0_WRAP(T, &, and)
DEF_VX_BINARY_CASE_0_WRAP(T, |, or)
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, xor)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
index ffad2a2..a1b24f7 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
index 275a11e..53bd744 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X4)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X4)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
index 006f241..73cb89d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i64.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
index 75df007..ec20474 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i8.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
index e8ae8e9..4bc0850 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u16.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
index eee51f8..255273d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u32.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X4)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X4)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
index 061fead..d21f61b 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u64.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
index 36e50f4..51492ae 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-u8.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
index 0f1d2a5..902ba1e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i16.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X8)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X8)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X8)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X8)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X8)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X8)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
index 45beac2..e57cee6 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i32.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X4)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X4)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
index b27009d..3b4138d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i64.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
index 112e018..0ad52b2 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-i8.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
index 8651909..2ab0967 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u16.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X8)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X8)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X8)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X8)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X8)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
index 6786326..799c5db 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u32.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X4)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X4)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
index 5b57191..a5d25d21 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u64.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
index 59f8f06..61d2b24 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-5-u8.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
index 1ae8b92..5e04050 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i16.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X8)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X8);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X8)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X8)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X8)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X8)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
index a532fde..13a9fe2 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i32.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X4)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X4);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X4)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
index 2237639..ca515b4 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i64.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
index cb0640d..70e1abc 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-i8.c
@@ -10,9 +10,13 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1(T, -, rsub, VX_BINARY_REVERSE_BODY_X16);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, *, mul, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
+/* { dg-final { scan-assembler-not {vmul.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
index 2d9ee5e..57220f2 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u16.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X8)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X8);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X8)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X8)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X8)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
index 9cd4dae..45244a0 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u32.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X4)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X4);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X4)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X4)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X4)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
index 515d544..3bad130 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u64.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY)
/* { dg-final { scan-assembler-not {vadd.vx} } } */
/* { dg-final { scan-assembler-not {vsub.vx} } } */
/* { dg-final { scan-assembler-not {vrsub.vx} } } */
/* { dg-final { scan-assembler-not {vand.vx} } } */
/* { dg-final { scan-assembler-not {vor.vx} } } */
+/* { dg-final { scan-assembler-not {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
index f59254b..bb860dd 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-6-u8.c
@@ -10,9 +10,11 @@ DEF_VX_BINARY_CASE_1_WRAP(T, -, sub, VX_BINARY_BODY_X16)
DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, -, rsub, VX_BINARY_REVERSE_BODY_X16);
DEF_VX_BINARY_CASE_1_WRAP(T, &, and, VX_BINARY_BODY_X16)
DEF_VX_BINARY_CASE_1_WRAP(T, |, or, VX_BINARY_BODY_X16)
+DEF_VX_BINARY_CASE_1_WRAP(T, ^, xor, VX_BINARY_BODY_X16)
/* { dg-final { scan-assembler {vadd.vx} } } */
/* { dg-final { scan-assembler {vsub.vx} } } */
/* { dg-final { scan-assembler {vrsub.vx} } } */
/* { dg-final { scan-assembler {vand.vx} } } */
/* { dg-final { scan-assembler {vor.vx} } } */
+/* { dg-final { scan-assembler {vxor.vx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
index cd3cede..c7289ac 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
@@ -1966,4 +1966,592 @@ uint64_t TEST_BINARY_DATA(uint64_t, or)[][3][N] =
},
};
+int8_t TEST_BINARY_DATA(int8_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfe, 0xfe, 0xfe, 0xfe,
+ },
+ },
+ {
+ { 0x7f },
+ {
+ 0x7f, 0x7f, 0x7f, 0x7f,
+ 0x80, 0x80, 0x80, 0x80,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x70, 0x70, 0x70, 0x70,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff,
+ 0x70, 0x70, 0x70, 0x70,
+ 0xf, 0xf, 0xf, 0xf,
+ },
+ },
+ {
+ { 0xf0 },
+ {
+ 0xff, 0xff, 0xff, 0xff,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x80, 0x80, 0x80, 0x80,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xef, 0xef, 0xef, 0xef,
+ 0x70, 0x70, 0x70, 0x70,
+ 0xf1, 0xf1, 0xf1, 0xf1,
+ },
+ },
+};
+
+int16_t TEST_BINARY_DATA(int16_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ },
+ },
+ {
+ { 0x7fff },
+ {
+ 0x7fff, 0x7fff, 0x7fff, 0x7fff,
+ 0x8000, 0x8000, 0x8000, 0x8000,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x7000, 0x7000, 0x7000, 0x7000,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x7ff0, 0x7ff0, 0x7ff0, 0x7ff0,
+ 0x0fff, 0x0fff, 0x0fff, 0x0fff,
+ },
+ },
+ {
+ { 0xfff0 },
+ {
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x8000, 0x8000, 0x8000, 0x8000,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xffef, 0xffef, 0xffef, 0xffef,
+ 0x7ff0, 0x7ff0, 0x7ff0, 0x7ff0,
+ 0xfff1, 0xfff1, 0xfff1, 0xfff1,
+ },
+ },
+};
+
+int32_t TEST_BINARY_DATA(int32_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfffffffe, 0xfffffffe, 0xfffffffe, 0xfffffffe,
+ },
+ },
+ {
+ { 0x7fffffff },
+ {
+ 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+ 0x80000000, 0x80000000, 0x80000000, 0x80000000,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x70000000, 0x70000000, 0x70000000, 0x70000000,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ 0x7ffffff0, 0x7ffffff0, 0x7ffffff0, 0x7ffffff0,
+ 0xfffffff, 0xfffffff, 0xfffffff, 0xfffffff,
+ },
+ },
+ {
+ { 0xfffffff0 },
+ {
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x80000000, 0x80000000, 0x80000000, 0x80000000,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xffffffef, 0xffffffef, 0xffffffef, 0xffffffef,
+ 0x7ffffff0, 0x7ffffff0, 0x7ffffff0, 0x7ffffff0,
+ 0xfffffff1, 0xfffffff1, 0xfffffff1, 0xfffffff1,
+ },
+ },
+};
+
+int64_t TEST_BINARY_DATA(int64_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfffffffffffffffeull, 0xfffffffffffffffeull, 0xfffffffffffffffeull, 0xfffffffffffffffeull,
+ },
+ },
+ {
+ { 0x7fffffffffffffffull },
+ {
+ 0x7fffffffffffffffull, 0x7fffffffffffffffull, 0x7fffffffffffffffull, 0x7fffffffffffffffull,
+ 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x7000000000000000ull, 0x7000000000000000ull, 0x7000000000000000ull, 0x7000000000000000ull,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull,
+ 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull,
+ 0xfffffffffffffffull, 0xfffffffffffffffull, 0xfffffffffffffffull, 0xfffffffffffffffull,
+ },
+ },
+ {
+ { 0xfffffffffffffff0ull },
+ {
+ 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xffffffffffffffefull, 0xffffffffffffffefull, 0xffffffffffffffefull, 0xffffffffffffffefull,
+ 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull,
+ 0xfffffffffffffff1ull, 0xfffffffffffffff1ull, 0xfffffffffffffff1ull, 0xfffffffffffffff1ull,
+ },
+ },
+};
+
+uint8_t TEST_BINARY_DATA(uint8_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfe, 0xfe, 0xfe, 0xfe,
+ },
+ },
+ {
+ { 0x7f },
+ {
+ 0x7f, 0x7f, 0x7f, 0x7f,
+ 0x80, 0x80, 0x80, 0x80,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x70, 0x70, 0x70, 0x70,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xff, 0xff, 0xff, 0xff,
+ 0x70, 0x70, 0x70, 0x70,
+ 0xf, 0xf, 0xf, 0xf,
+ },
+ },
+ {
+ { 0xf0 },
+ {
+ 0xff, 0xff, 0xff, 0xff,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x80, 0x80, 0x80, 0x80,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xef, 0xef, 0xef, 0xef,
+ 0x70, 0x70, 0x70, 0x70,
+ 0xf1, 0xf1, 0xf1, 0xf1,
+ },
+ },
+};
+
+uint16_t TEST_BINARY_DATA(uint16_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ },
+ },
+ {
+ { 0x7fff },
+ {
+ 0x7fff, 0x7fff, 0x7fff, 0x7fff,
+ 0x8000, 0x8000, 0x8000, 0x8000,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x7000, 0x7000, 0x7000, 0x7000,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x7ff0, 0x7ff0, 0x7ff0, 0x7ff0,
+ 0x0fff, 0x0fff, 0x0fff, 0x0fff,
+ },
+ },
+ {
+ { 0xfff0 },
+ {
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x8000, 0x8000, 0x8000, 0x8000,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xffef, 0xffef, 0xffef, 0xffef,
+ 0x7ff0, 0x7ff0, 0x7ff0, 0x7ff0,
+ 0xfff1, 0xfff1, 0xfff1, 0xfff1,
+ },
+ },
+};
+
+uint32_t TEST_BINARY_DATA(uint32_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfffffffe, 0xfffffffe, 0xfffffffe, 0xfffffffe,
+ },
+ },
+ {
+ { 0x7fffffff },
+ {
+ 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+ 0x80000000, 0x80000000, 0x80000000, 0x80000000,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x70000000, 0x70000000, 0x70000000, 0x70000000,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ 0x7ffffff0, 0x7ffffff0, 0x7ffffff0, 0x7ffffff0,
+ 0xfffffff, 0xfffffff, 0xfffffff, 0xfffffff,
+ },
+ },
+ {
+ { 0xfffffff0 },
+ {
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x80000000, 0x80000000, 0x80000000, 0x80000000,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xffffffef, 0xffffffef, 0xffffffef, 0xffffffef,
+ 0x7ffffff0, 0x7ffffff0, 0x7ffffff0, 0x7ffffff0,
+ 0xfffffff1, 0xfffffff1, 0xfffffff1, 0xfffffff1,
+ },
+ },
+};
+
+uint64_t TEST_BINARY_DATA(uint64_t, xor)[][3][N] =
+{
+ {
+ { 0x1 },
+ {
+ 0x1, 0x1, 0x1, 0x1,
+ 0x2, 0x2, 0x2, 0x2,
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0x3, 0x3, 0x3, 0x3,
+ 0x1, 0x1, 0x1, 0x1,
+ 0xfffffffffffffffeull, 0xfffffffffffffffeull, 0xfffffffffffffffeull, 0xfffffffffffffffeull,
+ },
+ },
+ {
+ { 0x7fffffffffffffffull },
+ {
+ 0x7fffffffffffffffull, 0x7fffffffffffffffull, 0x7fffffffffffffffull, 0x7fffffffffffffffull,
+ 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull,
+ 0xf, 0xf, 0xf, 0xf,
+ 0x7000000000000000ull, 0x7000000000000000ull, 0x7000000000000000ull, 0x7000000000000000ull,
+ },
+ {
+ 0x0, 0x0, 0x0, 0x0,
+ 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull,
+ 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull,
+ 0xfffffffffffffffull, 0xfffffffffffffffull, 0xfffffffffffffffull, 0xfffffffffffffffull,
+ },
+ },
+ {
+ { 0xfffffffffffffff0ull },
+ {
+ 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull, 0xffffffffffffffffull,
+ 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull, 0x8000000000000000ull,
+ 0x1, 0x1, 0x1, 0x1,
+ },
+ {
+ 0xf, 0xf, 0xf, 0xf,
+ 0xffffffffffffffefull, 0xffffffffffffffefull, 0xffffffffffffffefull, 0xffffffffffffffefull,
+ 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull, 0x7ffffffffffffff0ull,
+ 0xfffffffffffffff1ull, 0xfffffffffffffff1ull, 0xfffffffffffffff1ull, 0xfffffffffffffff1ull,
+ },
+ },
+};
+
+int8_t TEST_BINARY_DATA(int8_t, mul)[][3][N] =
+{
+ {
+ { 1 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ },
+ {
+ { 127 },
+ {
+ 0, 0, 0, 0,
+ -1, -1, -1, -1,
+ -128, -128, -128, -128,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ -127, -127, -127, -127,
+ -128, -128, -128, -128,
+ 2, 2, 2, 2,
+ },
+ },
+ {
+ { -128 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ 127, 127, 127, 127,
+ 2, 2, 2, 2,
+ },
+ {
+ 0, 0, 0, 0,
+ -128, -128, -128, -128,
+ -128, -128, -128, -128,
+ 0, 0, 0, 0,
+ },
+ },
+};
+
+int16_t TEST_BINARY_DATA(int16_t, mul)[][3][N] =
+{
+ {
+ { 1 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ },
+ {
+ { 32767 },
+ {
+ 0, 0, 0, 0,
+ -1, -1, -1, -1,
+ -32768, -32768, -32768, -32768,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767,
+ -32768, -32768, -32768, -32768,
+ 2, 2, 2, 2,
+ },
+ },
+ {
+ { -32768 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ 32767, 32767, 32767, 32767,
+ 2, 2, 2, 2,
+ },
+ {
+ 0, 0, 0, 0,
+ -32768, -32768, -32768, -32768,
+ -32768, -32768, -32768, -32768,
+ 0, 0, 0, 0,
+ },
+ },
+};
+
+int32_t TEST_BINARY_DATA(int32_t, mul)[][3][N] =
+{
+ {
+ { 1 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ },
+ {
+ { 2147483647 },
+ {
+ 0, 0, 0, 0,
+ -1, -1, -1, -1,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ -2147483647, -2147483647, -2147483647, -2147483647,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ 2, 2, 2, 2,
+ },
+ },
+ {
+ { -2147483648 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ 2, 2, 2, 2,
+ },
+ {
+ 0, 0, 0, 0,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ -2147483648, -2147483648, -2147483648, -2147483648,
+ 0, 0, 0, 0,
+ },
+ },
+};
+
+int64_t TEST_BINARY_DATA(int64_t, mul)[][3][N] =
+{
+ {
+ { 1 },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ -1, -1, -1, -1,
+ -2, -2, -2, -2,
+ },
+ },
+ {
+ { 9223372036854775807ll },
+ {
+ 0, 0, 0, 0,
+ -1, -1, -1, -1,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ -2, -2, -2, -2,
+ },
+ {
+ 0, 0, 0, 0,
+ -9223372036854775807ll, -9223372036854775807ll, -9223372036854775807ll, -9223372036854775807ll,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ 2, 2, 2, 2,
+ },
+ },
+ {
+ { -9223372036854775808ull },
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1,
+ 9223372036854775807ll, 9223372036854775807ll, 9223372036854775807ll, 9223372036854775807ll,
+ 2, 2, 2, 2,
+ },
+ {
+ 0, 0, 0, 0,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+ 0, 0, 0, 0,
+ },
+ },
+};
+
#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i16.c
new file mode 100644
index 0000000..c6be0ec
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i16.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int16_t
+#define NAME mul
+
+DEF_VX_BINARY_CASE_0_WRAP(T, *, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i32.c
new file mode 100644
index 0000000..3c78042
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i32.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int32_t
+#define NAME mul
+
+DEF_VX_BINARY_CASE_0_WRAP(T, *, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i64.c
new file mode 100644
index 0000000..63925d9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i64.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int64_t
+#define NAME mul
+
+DEF_VX_BINARY_CASE_0_WRAP(T, *, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i8.c
new file mode 100644
index 0000000..69962f5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmul-run-1-i8.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int8_t
+#define NAME mul
+
+DEF_VX_BINARY_CASE_0_WRAP(T, *, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i16.c
new file mode 100644
index 0000000..8441720
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i16.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int16_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i32.c
new file mode 100644
index 0000000..cdb773f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i32.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int32_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i64.c
new file mode 100644
index 0000000..8618b9e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i64.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int64_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i8.c
new file mode 100644
index 0000000..13724ce
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i8.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int8_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u16.c
new file mode 100644
index 0000000..e6030f3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u16.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T uint16_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c
new file mode 100644
index 0000000..cdb773f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T int32_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c
new file mode 100644
index 0000000..44f0fff
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T uint64_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c
new file mode 100644
index 0000000..2e983e5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T uint8_t
+#define NAME xor
+
+DEF_VX_BINARY_CASE_0_WRAP(T, ^, NAME)
+
+#define TEST_DATA TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c
index 5880ccc..b7246a3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv32gcv.c
@@ -3,9 +3,6 @@
#include "vec-avg-template.h"
-/* { dg-final { scan-assembler-times {\tvwadd\.vv} 6 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 3 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 3 } } */
-/* { dg-final { scan-assembler-times {\tvadd\.vi} 3 } } */
-/* { dg-final { scan-assembler-times {\tvnsra.wi} 6 } } */
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 6 } } */
/* { dg-final { scan-assembler-times {vaaddu\.vv} 6 } } */
+/* { dg-final { scan-assembler-times {vaadd\.vv} 3 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c
index 916f33d..3ffe0ef 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/vec-avg-rv64gcv.c
@@ -3,9 +3,6 @@
#include "vec-avg-template.h"
-/* { dg-final { scan-assembler-times {\tvwadd\.vv} 6 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*0} 3 } } */
-/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 3 } } */
-/* { dg-final { scan-assembler-times {\tvadd\.vi} 3 } } */
-/* { dg-final { scan-assembler-times {\tvnsra\.wi} 6 } } */
+/* { dg-final { scan-assembler-times {csrwi\s*vxrm,\s*2} 6 } } */
/* { dg-final { scan-assembler-times {vaaddu\.vv} 6 } } */
+/* { dg-final { scan-assembler-times {vaadd\.vv} 3 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c
new file mode 100644
index 0000000..d22091e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64d -O0" } */
+
+/* Use -O0 as otherwise the unused intrinsics get
+ optimized away. We used to ICE here instead of
+ emitting an error. */
+
+#include "riscv_vector.h"
+
+void
+clean_subreg (int32_t *in, int32_t *out, size_t m) /* { dg-error {this operation requires the RVV ISA extension} } */
+{
+ vint16m8_t v24, v8, v16;
+ vint32m8_t result = __riscv_vle32_v_i32m8 (in, 32); /* { dg-error {built-in function '__riscv_vle32_v_i32m8\(in, 32\)' requires the 'v' ISA extension} } */
+ vint32m1_t v0 = __riscv_vget_v_i32m8_i32m1 (result, 0);
+}
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c
index 3878286..2e23af5 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i16.c
@@ -29,4 +29,29 @@
*/
DEF_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -7, INT16_MIN, INT16_MAX)
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int16_t_fmt_1_1:
+** addi\s+[atx][0-9]+,\s*a0,\s*-1
+** not\s+[atx][0-9]+,\s*a0
+** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
+** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+** srai\s+a0,\s*a0,\s*63
+** li\s+[atx][0-9]+,\s*32768
+** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+** neg\s+a0,\s*[atx][0-9]+
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+** or\s+a0,\s*a0,\s*[atx][0-9]+
+** slliw\s+a0,\s*a0,\s*16
+** sraiw\s+a0,\s*a0,\s*16
+** ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
index c9fbc66..e63211f 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i32.c
@@ -27,4 +27,28 @@
*/
DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, 10, INT32_MIN, INT32_MAX)
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int32_t_fmt_1_1:
+** addi\s+[atx][0-9]+,\s*a0,\s*-1
+** not\s+[atx][0-9]+,\s*a0
+** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
+** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+** srai\s+a0,\s*a0,\s*63
+** li\s+[atx][0-9]+,\s*-2147483648
+** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+** neg\s+a0,\s*[atx][0-9]+
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+** or\s+a0,\s*a0,\s*[atx][0-9]+
+** sext.w\s+a0,\s*a0
+** ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
index 2aa9545..3843b71 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i64.c
@@ -25,4 +25,24 @@
*/
DEF_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, 10, INT64_MIN, INT64_MAX)
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int64_t_fmt_1_1:
+** addi\s+[atx][0-9]+,\s*a0,\s*-1
+** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+** slti\s+[atx][0-9]+,\s*a0,\s*0
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*a0,\s*63
+** li\s+[atx][0-9]+,\s*-1
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
+** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
+** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+** or\s+a0,\s*a0,\s*[atx][0-9]+
+** ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
index b6f1731..ceae1ea 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-i8.c
@@ -26,4 +26,24 @@
*/
DEF_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, 9, INT8_MIN, INT8_MAX)
-/* { dg-final { scan-tree-dump-times ".SAT_ADD " 1 "optimized" } } */
+/*
+** sat_s_add_imm_int8_t_fmt_1_1:
+** addi\s+[atx][0-9]+,\s*a0,\s*-1
+** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+** and\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
+** slli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*56
+** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
+** srai\s+a0,\s*a0,\s*63
+** xori\s+[atx][0-9]+,\s*a0,\s*127
+** neg\s+a0,\s*a5
+** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*a0
+** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
+** and\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
+** or\s+a0,\s*a0,\s*[atx][0-9]+
+** slliw\s+a0,\s*a0,\s*24
+** sraiw\s+a0,\s*a0,\s*24
+** ret
+*/
+DEF_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
+
+/* { dg-final { scan-tree-dump-times ".SAT_ADD " 2 "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c
index 187a098..ae2c306 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i16.c
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int16_t, uint16_t, -32768, INT16_MIN, INT16_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(1, int16_t, uint16_t, 32767, INT16_MIN, INT16_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(2, int16_t, uint16_t, 100, INT16_MIN, INT16_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(3, int16_t, uint16_t, -100, INT16_MIN, INT16_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int16_t, uint16_t, -1, INT16_MIN, INT16_MAX)
#define T int16_t
#define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
{ -32768, -32668, },
{ -32768, -32768, },
{ 0, -100, },
+ { -32768, -32768, },
+ { 0, -1, },
};
int
@@ -38,5 +41,8 @@ main ()
RUN (3, T, d[6][0], d[6][1]);
RUN (3, T, d[7][0], d[7][1]);
+ RUN (4, T, d[8][0], d[8][1]);
+ RUN (4, T, d[9][0], d[9][1]);
+
return 0;
}
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c
index 899fda8..02a947f 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i32.c
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int32_t, uint32_t, -2147483648, INT32_MIN, INT32_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(1, int32_t, uint32_t, 2147483647, INT32_MIN, INT32_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(2, int32_t, uint32_t, 100, INT32_MIN, INT32_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(3, int32_t, uint32_t, -100, INT32_MIN, INT32_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int32_t, uint32_t, -1, INT32_MIN, INT32_MAX)
#define T int32_t
#define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
{ -300, -200, },
{ 100, 0, },
{ 0, -100, },
+ { 100, 99, },
+ { 0, -1, },
};
int
@@ -38,5 +41,8 @@ main ()
RUN (3, T, d[6][0], d[6][1]);
RUN (3, T, d[7][0], d[7][1]);
+ RUN (4, T, d[8][0], d[8][1]);
+ RUN (4, T, d[9][0], d[9][1]);
+
return 0;
}
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c
index 3dc4f72..40270ec 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i64.c
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int64_t, uint64_t, (-9223372036854775807ll - 1), INT6
DEF_SAT_S_ADD_IMM_FMT_1(1, int64_t, uint64_t, 9223372036854775807ll, INT64_MIN, INT64_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(2, int64_t, uint64_t, 100, INT64_MIN, INT64_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(3, int64_t, uint64_t, -100, INT64_MIN, INT64_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int64_t, uint64_t, -1, INT64_MIN, INT64_MAX)
#define T int64_t
#define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
{ -1, 99, },
{ 0, -100, },
{ 100, 0, },
+ { 0, -1, },
+ { 100, 99, },
};
int
@@ -38,5 +41,8 @@ main ()
RUN (3, T, d[6][0], d[6][1]);
RUN (3, T, d[7][0], d[7][1]);
+ RUN (4, T, d[8][0], d[8][1]);
+ RUN (4, T, d[9][0], d[9][1]);
+
return 0;
}
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c
index c71b717..9efb743 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1-i8.c
@@ -7,6 +7,7 @@ DEF_SAT_S_ADD_IMM_FMT_1(0, int8_t, uint8_t, -128, INT8_MIN, INT8_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(1, int8_t, uint8_t, 127, INT8_MIN, INT8_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(2, int8_t, uint8_t, 6, INT8_MIN, INT8_MAX)
DEF_SAT_S_ADD_IMM_FMT_1(3, int8_t, uint8_t, -6, INT8_MIN, INT8_MAX)
+DEF_SAT_S_ADD_IMM_FMT_1(4, int8_t, uint8_t, -1, INT8_MIN, INT8_MAX)
#define T int8_t
#define RUN(INDEX,T, x, expect) RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect)
@@ -21,6 +22,8 @@ T d[][2] = {
{ -10, -4, },
{ -128, -128, },
{ 127, 121, },
+ { -128, -128, },
+ { 1, 0, },
};
int
@@ -38,5 +41,8 @@ main ()
RUN (3, T, d[6][0], d[6][1]);
RUN (3, T, d[7][0], d[7][1]);
+ RUN (4, T, d[8][0], d[8][1]);
+ RUN (4, T, d[9][0], d[9][1]);
+
return 0;
}
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-1.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c
index e9f7080..e9f7080 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-1.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3-1.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c
index 9dae425..9dae425 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3-1.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-1.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c
index 84c6bc7..84c6bc7 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-1.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm_type_check-1-i8.c
diff --git a/gcc/testsuite/gcc.target/s390/vector/vec-extract-1.c b/gcc/testsuite/gcc.target/s390/vector/vec-extract-1.c
new file mode 100644
index 0000000..9df7909
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/vec-extract-1.c
@@ -0,0 +1,190 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=z14 -mzarch" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+typedef double V2DF __attribute__((vector_size(16)));
+typedef float V4SF __attribute__((vector_size(16)));
+typedef float V2SF __attribute__((vector_size(8)));
+typedef double V1DF __attribute__((vector_size(8)));
+typedef float V1SF __attribute__((vector_size(4)));
+typedef long double V1TF __attribute__((vector_size(16)));
+
+/*
+** extractfirstdouble:
+** vlr %v0,%v24
+** br %r14
+*/
+double
+extractfirstdouble (V2DF x)
+{
+ return x[0];
+}
+
+/*
+** extractseconddouble:
+** vrepg %v0,%v24,1
+** br %r14
+*/
+double
+extractseconddouble (V2DF x)
+{
+ return x[1];
+}
+
+/*
+** extractnthdouble:
+** vlgvg (%r.),%v24,0\(%r2\)
+** ldgr %f0,\1
+** br %r14
+*/
+double
+extractnthdouble (V2DF x, int n)
+{
+ return x[n];
+}
+
+/*
+** sumfirstdouble:
+** vfadb %v0,%v24,%v26
+** br %r14
+*/
+double
+sumfirstdouble (V2DF x, V2DF y)
+{
+ return (x + y)[0];
+}
+
+/*
+** extractfirstfloat:
+** vlr %v0,%v24
+** br %r14
+*/
+float
+extractfirstfloat (V4SF x)
+{
+ return x[0];
+}
+
+/*
+** extractsecondfloat:
+** vrepf %v0,%v24,1
+** br %r14
+*/
+float
+extractsecondfloat (V4SF x)
+{
+ return x[1];
+}
+
+/*
+** extractthirdfloat:
+** vrepf %v0,%v24,2
+** br %r14
+*/
+float
+extractthirdfloat (V4SF x)
+{
+ return x[2];
+}
+
+/*
+** extractfourthfloat:
+** vrepf %v0,%v24,3
+** br %r14
+*/
+float
+extractfourthfloat (V4SF x)
+{
+ return x[3];
+}
+
+/*
+** extractnthfloat:
+** vlgvf (%r.),%v24,0\(%r2\)
+** vlvgf %v0,\1,0
+** br %r14
+*/
+float
+extractnthfloat (V4SF x, int n)
+{
+ return x[n];
+}
+
+/*
+** sumfirstfloat:
+** vfasb %v0,%v24,%v26
+** br %r14
+*/
+float
+sumfirstfloat (V4SF x, V4SF y)
+{
+ return (x + y)[0];
+}
+
+/*
+** extractfirst2:
+** vlr %v0,%v24
+** br %r14
+*/
+float
+extractfirst2 (V2SF x)
+{
+ return x[0];
+}
+
+/*
+** extractsecond2:
+** vrepf %v0,%v24,1
+** br %r14
+*/
+float
+extractsecond2 (V2SF x)
+{
+ return x[1];
+}
+
+/*
+** extractnth2:
+** vlgvf (%r.),%v24,0\(%r2\)
+** vlvgf %v0,\1,0
+** br %r14
+*/
+float
+extractnth2 (V2SF x, int n)
+{
+ return x[n];
+}
+
+/*
+** extractsinglef:
+** vlr %v0,%v24
+** br %r14
+*/
+float
+extractsinglef (V1SF x)
+{
+ return x[0];
+}
+
+/*
+** extractsingled:
+** vlr %v0,%v24
+** br %r14
+*/
+double
+extractsingled (V1DF x)
+{
+ return x[0];
+}
+
+/*
+** extractsingleld:
+** vlr (%v.),%v24
+** vst \1,0\(%r2\),3
+** br %r14
+*/
+long double
+extractsingleld (V1TF x)
+{
+ return x[0];
+}
diff --git a/gcc/testsuite/gcc.target/s390/vector/vec-set-1.c b/gcc/testsuite/gcc.target/s390/vector/vec-set-1.c
new file mode 100644
index 0000000..021a5b9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/vec-set-1.c
@@ -0,0 +1,133 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=z14 -mzarch" } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+typedef double V2DF __attribute__((vector_size(16)));
+typedef double V1DF __attribute__((vector_size(8)));
+typedef float V4SF __attribute__((vector_size(16)));
+
+/*
+** setdf0:
+** vpdi %v24,%v0,%v24,1
+** br %r14
+*/
+V2DF
+setdf0 (V2DF x, double y)
+{
+ x[0] = y;
+ return x;
+}
+
+/*
+** setdf1:
+** vmrhg %v24,%v24,%v0
+** br %r14
+*/
+V2DF
+setdf1 (V2DF x, double y)
+{
+ x[1] = y;
+ return x;
+}
+
+/*
+** setdfn:
+** lgdr (%r.),%f0
+** vlvgg %v24,\1,0\(%r2\)
+** br %r14
+*/
+V2DF
+setdfn (V2DF x, double y, int n)
+{
+ x[n] = y;
+ return x;
+}
+
+/*
+** set1df:
+** vlr %v24,%v0
+** br %r14
+*/
+V1DF
+set1df (V1DF x, double y)
+{
+ x[0] = y;
+ return x;
+}
+
+/*
+** set1dfn:
+** vlr %v24,%v0
+** br %r14
+*/
+V1DF
+set1dfn (V1DF x, double y, int n)
+{
+ x[n] = y;
+ return x;
+}
+
+/*
+** setsf0:
+** lgdr (%r.),%f0
+** vlvgf %v24,\1,0
+** br %r14
+*/
+V4SF
+setsf0 (V4SF x, float y)
+{
+ x[0] = y;
+ return x;
+}
+
+/*
+** setsf1:
+** lgdr (%r.),%f0
+** vlvgf %v24,\1,1
+** br %r14
+*/
+V4SF
+setsf1 (V4SF x, float y)
+{
+ x[1] = y;
+ return x;
+}
+
+/*
+** setsf0:
+** lgdr (%r.),%f0
+** vlvgf %v24,\1,2
+** br %r14
+*/
+V4SF
+setsf2 (V4SF x, float y)
+{
+ x[2] = y;
+ return x;
+}
+
+/*
+** setsf1:
+** lgdr (%r.),%f0
+** vlvgf %v24,\1,3
+** br %r14
+*/
+V4SF
+setsf3 (V4SF x, float y)
+{
+ x[3] = y;
+ return x;
+}
+
+/*
+** setsfn:
+** lgdr (%r.),%f0
+** vlvgf %v24,\1,0\(%r2\)
+** br %r14
+*/
+V4SF
+setsfn (V4SF x, float y, int n)
+{
+ x[n] = y;
+ return x;
+}
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_1.f b/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
index a3a5a98..c4b43f0 100644
--- a/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
+++ b/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
@@ -1,5 +1,5 @@
! { dg-do compile }
-! { dg-options "" }
+! { dg-options "-std=legacy" }
! test that the extension for a missing comma is accepted
subroutine mysub
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_3.f b/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
index 0b00224..9d974d6 100644
--- a/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
+++ b/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
@@ -3,7 +3,7 @@
! did do the correct thing at runtime.
! Note the missing , before i1 in the format.
! { dg-do run }
-! { dg-options "" }
+! { dg-options "-std=legacy" }
character*12 c
write (c,100) 0, 1
diff --git a/gcc/testsuite/gfortran.dg/continuation_13.f90 b/gcc/testsuite/gfortran.dg/continuation_13.f90
index 9799b59e..475c896 100644
--- a/gcc/testsuite/gfortran.dg/continuation_13.f90
+++ b/gcc/testsuite/gfortran.dg/continuation_13.f90
@@ -1,5 +1,5 @@
! { dg-do run }
-! { dg-options "-std=gnu" }
+! { dg-options "-std=legacy" }
! PR64506
character(25) :: astring
diff --git a/gcc/testsuite/gfortran.dg/dec_math_3.f90 b/gcc/testsuite/gfortran.dg/dec_math_3.f90
index 5bf4398..d2f57e2 100644
--- a/gcc/testsuite/gfortran.dg/dec_math_3.f90
+++ b/gcc/testsuite/gfortran.dg/dec_math_3.f90
@@ -1,8 +1,17 @@
! { dg-options "-std=gnu" }
! { dg-do compile }
-! Former ICE when simplifying asind, plus wrong function name in error message
-real, parameter :: d = asind(1.1) ! { dg-error "Argument of ASIND at.*must be between -1 and 1" }
-print *, d
+real, parameter :: dacos = acosd(1.1) ! { dg-error "Argument of ACOSD at .1. must be within the closed interval \\\[-1, 1\\\]" }
+print *, dacos
+real, parameter :: dasin = asind(-1.1) ! { dg-error "Argument of ASIND at .1. must be within the closed interval \\\[-1, 1\\\]" }
+print *, dasin
+real, parameter :: datan2 = atan2d(0.0, 0.0) ! { dg-error "If the first argument of ATAN2D at .1. is zero, then the second argument must not be zero" }
+print *, datan2
+real, parameter :: piacos = acospi(-1.1) ! { dg-error "Argument of ACOSPI at .1. must be within the closed interval \\\[-1, 1\\\]" }
+print *, piacos
+real, parameter :: piasin = asinpi(1.1) ! { dg-error "Argument of ASINPI at .1. must be within the closed interval \\\[-1, 1\\\]" }
+print *, piasin
+real, parameter :: piatan2 = atan2pi(0.0, 0.0) ! { dg-error "If the first argument of ATAN2PI at .1. is zero, then the second argument must not be zero" }
+print *, piatan2
end
diff --git a/gcc/testsuite/gfortran.dg/dec_math_5.f90 b/gcc/testsuite/gfortran.dg/dec_math_5.f90
index dee2de4..a7ff327 100644
--- a/gcc/testsuite/gfortran.dg/dec_math_5.f90
+++ b/gcc/testsuite/gfortran.dg/dec_math_5.f90
@@ -101,4 +101,67 @@ program p
if (abs(b1 - 0.5) > e2) stop 38
if (abs(c1 - 0.5) > e3) stop 39
if (abs(d1 - 0.5) > e4) stop 40
+
+ a1 = acospi(0.5)
+ b1 = acospi(-0.5)
+ c1 = acospi(0.5)
+ d1 = acospi(-0.5)
+ if (abs(a1 - 1.0 / 3) > e1) stop 41
+ if (abs(b1 - 2.0 / 3) > e2) stop 42
+ if (abs(c1 - 1.0 / 3) > e3) stop 43
+ if (abs(d1 - 2.0 / 3) > e4) stop 44
+
+ a1 = asinpi(0.5)
+ b1 = asinpi(-0.5)
+ c1 = asinpi(0.5)
+ d1 = asinpi(-0.5)
+ if (abs(a1 - 1.0 / 6) > e1) stop 45
+ if (abs(b1 + 1.0 / 6) > e2) stop 46
+ if (abs(c1 - 1.0 / 6) > e3) stop 47
+ if (abs(d1 + 1.0 / 6) > e4) stop 48
+
+ a1 = atanpi(1.0)
+ b1 = atanpi(-1.0)
+ c1 = atanpi(1.0)
+ d1 = atanpi(-1.0)
+ if (abs(a1 - 0.25) > e1) stop 49
+ if (abs(b1 + 0.25) > e2) stop 50
+ if (abs(c1 - 0.25) > e3) stop 51
+ if (abs(d1 + 0.25) > e4) stop 52
+
+ a1 = atan2pi(1.0, 1.0)
+ b1 = atan2pi(1.0, 1.0)
+ c1 = atan2pi(1.0, 1.0)
+ d1 = atan2pi(1.0, 1.0)
+ if (abs(a1 - 0.25) > e1) stop 53
+ if (abs(b1 - 0.25) > e2) stop 54
+ if (abs(c1 - 0.25) > e3) stop 55
+ if (abs(d1 - 0.25) > e4) stop 56
+
+ a1 = cospi(1._4 / 3)
+ b1 = cospi(-1._8 / 3)
+ c1 = cospi(4._ep / 3)
+ d1 = cospi(-4._16 / 3)
+ if (abs(a1 - 0.5) > e1) stop 57
+ if (abs(b1 - 0.5) > e2) stop 58
+ if (abs(c1 + 0.5) > e3) stop 59
+ if (abs(d1 + 0.5) > e4) stop 60
+
+ a1 = sinpi(1._4 / 6)
+ b1 = sinpi(-1._8 / 6)
+ c1 = sinpi(5._ep / 6)
+ d1 = sinpi(-7._16 / 6)
+ if (abs(a1 - 0.5) > e1) stop 61
+ if (abs(b1 + 0.5) > e2) stop 62
+ if (abs(c1 - 0.5) > e3) stop 63
+ if (abs(d1 - 0.5) > e4) stop 64
+
+ a1 = tanpi(0.25)
+ b1 = tanpi(-0.25)
+ c1 = tanpi(1.25)
+ d1 = tanpi(-1.25)
+ if (abs(a1 - 1.0) > e1) stop 65
+ if (abs(b1 + 1.0) > e2) stop 66
+ if (abs(c1 - 1.0) > e3) stop 67
+ if (abs(d1 + 1.0) > e4) stop 68
end program p
diff --git a/gcc/testsuite/gfortran.dg/dec_math_6.f90 b/gcc/testsuite/gfortran.dg/dec_math_6.f90
new file mode 100644
index 0000000..dfb8b06
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dec_math_6.f90
@@ -0,0 +1,12 @@
+! { dg-options "-std=f2018" }
+! { dg-do compile }
+
+intrinsic :: acospi ! { dg-error "The intrinsic 'acospi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+intrinsic :: asinpi ! { dg-error "The intrinsic 'asinpi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+intrinsic :: atanpi ! { dg-error "The intrinsic 'atanpi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+intrinsic :: atan2pi ! { dg-error "The intrinsic 'atan2pi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+intrinsic :: cospi ! { dg-error "The intrinsic 'cospi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+intrinsic :: sinpi ! { dg-error "The intrinsic 'sinpi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+intrinsic :: tanpi ! { dg-error "The intrinsic 'tanpi' declared INTRINSIC at .1. is not available in the current standard settings but new in Fortran 2023. Use an appropriate '-std=\\*' option or enable '-fall-intrinsics' in order to use it" }
+
+end
diff --git a/gcc/testsuite/gfortran.dg/inquiry_type_ref_7.f90 b/gcc/testsuite/gfortran.dg/inquiry_type_ref_7.f90
new file mode 100644
index 0000000..534225a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/inquiry_type_ref_7.f90
@@ -0,0 +1,62 @@
+! { dg-do compile }
+! { dg-additional-options "-fdump-tree-original" }
+!
+! PR fortran/101735 - substrings and parsing of type parameter inquiries
+
+program p
+ implicit none
+ integer, parameter :: ck = 4
+ character(len=5) :: str = ""
+ character(len=5) :: str2(4)
+ character(len=5,kind=ck) :: str4 = ck_""
+ type t
+ character(len=5) :: str(4)
+ end type t
+ type(t) :: var
+ integer :: x, y
+
+ integer, parameter :: i1 = kind (str(1:3))
+ integer, parameter :: j1 = str (1:3) % kind
+ integer, parameter :: k1 = (str(1:3) % kind)
+ integer, parameter :: kk = str (1:3) % kind % kind
+
+ integer, parameter :: i4 = kind (str4(1:3))
+ integer, parameter :: j4 = str4 (1:3) % kind
+ integer, parameter :: ll = str4 (1:3) % len
+
+ integer, parameter :: i2 = len (str(1:3))
+ integer, parameter :: j2 = str (1:3) % len
+ integer, parameter :: k2 = (str(1:3) % len)
+ integer, parameter :: lk = str (1:3) % len % kind
+
+ integer, parameter :: l4 = str2 (:) (2:3) % len
+ integer, parameter :: l5 = var % str (:) (2:4) % len
+ integer, parameter :: k4 = str2 (:) (2:3) % kind
+ integer, parameter :: k5 = var % str (:) (2:4) % kind
+ integer, parameter :: k6 = str2 (:) (2:3) % len % kind
+ integer, parameter :: k7 = var % str (:) (2:4) % len % kind
+
+ if (i1 /= 1) stop 1
+ if (j1 /= 1) stop 2
+ if (k1 /= 1) stop 3
+
+ if (i4 /= ck) stop 4
+ if (j4 /= ck) stop 5
+ if (ll /= 3) stop 6
+
+ if (kk /= 4) stop 7
+ if (lk /= 4) stop 8
+
+ if (i2 /= 3) stop 9
+ if (j2 /= 3) stop 10
+ if (k2 /= 3) stop 11
+
+ if (l4 /= 2) stop 12
+ if (l5 /= 3) stop 13
+ if (k4 /= 1) stop 14
+ if (k5 /= 1) stop 15
+ if (k6 /= 4) stop 16
+ if (k7 /= 4) stop 17
+end
+
+! { dg-final { scan-tree-dump-not "_gfortran_stop_numeric" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pr120049_2.f90 b/gcc/testsuite/gfortran.dg/pr120049_2.f90
new file mode 100644
index 0000000..1f91e06
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr120049_2.f90
@@ -0,0 +1,62 @@
+! Compiled with pr120049_b.f90
+! { dg-options -O0 }
+! { dg-do compile }
+! { dg-compile-aux-modules "pr120049_b.f90" }
+!
+! Test the fix for PR120049
+program tests_gtk_sup
+ use gtk_sup
+ implicit none
+
+ type mytype
+ integer :: myint
+ end type mytype
+ type(mytype) :: ijkl = mytype(42)
+ logical :: truth
+ real :: var1
+ type(c_ptr), target :: val
+ type(c_funptr), target :: fptr
+ character(15) :: stringy
+ complex :: certainly
+ truth = .true.
+ var1 = 86.
+ stringy = "what the hay!"
+ certainly = (3.14,-4.13)
+ if (c_associated(val, c_loc(val))) then
+ stop 1
+ endif
+ if (c_associated(c_loc(val), val)) then
+ stop 2
+ endif
+ print *, c_associated(fptr, C_NULL_FUNPTR)
+ print *, c_associated(c_loc(val), C_NULL_PTR)
+ print *, c_associated(C_NULL_PTR, c_loc(val))
+ print *, c_associated(c_loc(val), 42) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), .42) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), truth) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), .false.) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), var1) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), stringy) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), certainly) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(42) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(.42) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(truth) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(.false.) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(var1) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(stringy) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(certainly) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(.42) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(val, testit(val)) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(testit(val), val) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(testit(val)) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(c_loc(val), C_NULL_FUNPTR) ! { dg-error "C_ASSOCIATED shall have the" }
+ print *, c_associated(C_NULL_FUNPTR, c_loc(val)) ! { dg-error "C_ASSOCIATED shall have the" }
+contains
+
+ function testit (avalue) result(res)
+ type(c_ptr) :: avalue
+ type(mytype) :: res
+ res%myint = 42
+ end function
+
+end program tests_gtk_sup
diff --git a/gcc/testsuite/gfortran.dg/pr120049_a.f90 b/gcc/testsuite/gfortran.dg/pr120049_a.f90
index c404a4d..7095314 100644
--- a/gcc/testsuite/gfortran.dg/pr120049_a.f90
+++ b/gcc/testsuite/gfortran.dg/pr120049_a.f90
@@ -1,5 +1,8 @@
-! { dg-do preprocess }
-! { dg-additional-options "-cpp" }
+! Compiled with pr120049_b.f90
+! { dg-options -O0 }
+! { dg-do run }
+! { dg-compile-aux-modules "pr120049_b.f90" }
+! { dg-additional-sources pr120049_b.f90 }
!
! Test the fix for PR86248
program tests_gtk_sup
diff --git a/gcc/testsuite/gfortran.dg/pr120049_b.f90 b/gcc/testsuite/gfortran.dg/pr120049_b.f90
index 127db98..28a2783 100644
--- a/gcc/testsuite/gfortran.dg/pr120049_b.f90
+++ b/gcc/testsuite/gfortran.dg/pr120049_b.f90
@@ -1,5 +1,3 @@
-! { dg-do run }
-! { dg-additional-sources pr120049_a.f90 }
!
! Module for pr120049.f90
!
diff --git a/gcc/testsuite/gnat.dg/sso19.adb b/gcc/testsuite/gnat.dg/sso19.adb
new file mode 100644
index 0000000..497d9874
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/sso19.adb
@@ -0,0 +1,13 @@
+-- { dg-do run }
+-- { dg-options "-O2" }
+
+with SSO19_Pkg; use SSO19_Pkg;
+
+procedure SSO19 is
+ R : constant Rec := (D => (I => 8, F => 4.6095713E-41));
+
+begin
+ if not Is_Valid (R) then
+ raise Program_Error;
+ end if;
+end;
diff --git a/gcc/testsuite/gnat.dg/sso19_pkg.adb b/gcc/testsuite/gnat.dg/sso19_pkg.adb
new file mode 100644
index 0000000..cbcb2f9
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/sso19_pkg.adb
@@ -0,0 +1,13 @@
+package body SSO19_Pkg is
+
+ function Is_Valid_Private (Item : Data) return Boolean is
+ begin
+ return Item.I'Valid and Item.F'Valid;
+ end Is_Valid_Private;
+
+ function Is_Valid (Item : Rec) return Boolean is
+ begin
+ return Is_Valid_Private (Item.D);
+ end Is_Valid;
+
+end SSO19_Pkg;
diff --git a/gcc/testsuite/gnat.dg/sso19_pkg.ads b/gcc/testsuite/gnat.dg/sso19_pkg.ads
new file mode 100644
index 0000000..cad5368
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/sso19_pkg.ads
@@ -0,0 +1,24 @@
+with System;
+
+package SSO19_Pkg is
+
+ subtype Small_Int is Short_Integer range -1000 .. 1000;
+
+ type Data is record
+ I : Small_Int;
+ F : Float;
+ end record;
+ for Data use record
+ I at 0 range 0 .. 15;
+ F at 4 range 0 .. 31;
+ end record;
+ for Data'Bit_Order use System.High_Order_First;
+ for Data'Scalar_Storage_Order use System.High_Order_First;
+
+ type Rec is record
+ D : Data;
+ end record;
+
+ function Is_Valid (Item : Rec) return Boolean;
+
+end SSO19_Pkg;
diff --git a/gcc/testsuite/lib/htmltest.py b/gcc/testsuite/lib/htmltest.py
index b249ea6..8e42a8c 100644
--- a/gcc/testsuite/lib/htmltest.py
+++ b/gcc/testsuite/lib/htmltest.py
@@ -7,3 +7,93 @@ def html_tree_from_env():
html_filename += '.html'
print('html_filename: %r' % html_filename)
return ET.parse(html_filename)
+
+XHTML = 'http://www.w3.org/1999/xhtml'
+ns = {'xhtml': XHTML}
+
+def make_tag(local_name):
+ return f'{{{XHTML}}}' + local_name
+
+def assert_tag(element, expected):
+ assert element.tag == make_tag(expected)
+
+def assert_class(element, expected):
+ assert element.attrib['class'] == expected
+
+def assert_quoted_line(tr, expected_line_num, expected_src):
+ """Verify that tr is a line of quoted source."""
+ tds = tr.findall('xhtml:td', ns)
+ assert len(tds) == 3
+ assert_class(tds[0], 'linenum')
+ assert tds[0].text == expected_line_num
+ assert_class(tds[1], 'left-margin')
+ assert tds[1].text == ' '
+ assert_class(tds[2], 'source')
+ assert tds[2].text == expected_src
+
+def assert_annotation_line(tr, expected_src,
+ expected_line_num=' ',
+ expected_left_margin=' '):
+ """Verify that tr is an annotation line."""
+ tds = tr.findall('xhtml:td', ns)
+ assert len(tds) == 3
+ assert_class(tds[0], 'linenum')
+ assert tds[0].text == expected_line_num
+ assert_class(tds[1], 'left-margin')
+ assert tds[1].text == expected_left_margin
+ assert_class(tds[2], 'annotation')
+ assert tds[2].text == expected_src
+
+def assert_frame(frame, expected_fnname):
+ """
+ Assert that frame is of class 'stack-frame'
+ and has a child showing the expected fnname.
+ """
+ assert_class(frame, 'stack-frame')
+ funcname = frame[0]
+ assert_class(funcname, 'frame-funcname')
+ span = funcname[0]
+ assert_tag(span, 'span')
+ assert span.text == expected_fnname
+
+def assert_event_range_with_margin(element):
+ """
+ Verify that "element" is an event-range-with-margin
+ """
+ assert_tag(element, 'table')
+ assert_class(element, 'event-range-with-margin')
+ tr = element.find('xhtml:tr', ns)
+ assert tr is not None
+ td = tr.find('xhtml:td', ns)
+ assert_class(td, 'event-range')
+
+ events_hdr = td.find('xhtml:div', ns)
+ assert_class(events_hdr, 'events-hdr')
+
+ #...etc
+
+def get_diag_by_index(html_tree, index):
+ root = html_tree.getroot ()
+ assert root.tag == make_tag('html')
+
+ body = root.find('xhtml:body', ns)
+ assert body is not None
+
+ diag_list = body.find('xhtml:div', ns)
+ assert diag_list is not None
+ assert_class(diag_list, 'gcc-diagnostic-list')
+
+ diags = diag_list.findall('xhtml:div', ns)
+ diag = diags[index]
+ assert_class(diag, 'gcc-diagnostic')
+ return diag
+
+def get_message_within_diag(diag_element):
+ msg = diag_element.find('xhtml:span', ns)
+ assert_class(msg, 'gcc-message')
+ return msg
+
+def get_locus_within_diag(diag_element):
+ src = diag_element.find('xhtml:table', ns)
+ assert_class(src, 'locus')
+ return src
diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc
index d1d58bf..5ac4280 100644
--- a/gcc/tree-ssa-dse.cc
+++ b/gcc/tree-ssa-dse.cc
@@ -842,7 +842,7 @@ live_bytes_read (ao_ref *use_ref, ao_ref *ref, sbitmap live)
return true;
/* Now check if any of the remaining bits in use_ref are set in LIVE. */
- return bitmap_bit_in_range_p (live, start, (start + size - 1));
+ return bitmap_any_bit_in_range_p (live, start, (start + size - 1));
}
return true;
}
diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc
index eb03ebe..7e819f3 100644
--- a/gcc/tree-ssa-math-opts.cc
+++ b/gcc/tree-ssa-math-opts.cc
@@ -4104,15 +4104,34 @@ build_saturation_binary_arith_call_and_insert (gimple_stmt_iterator *gsi,
* _10 = -_9;
* _12 = _7 | _10;
* =>
- * _12 = .SAT_ADD (_4, _6); */
+ * _12 = .SAT_ADD (_4, _6);
+ *
+ * Try to match IMM=-1 saturation signed add with assign.
+ * <bb 2> [local count: 1073741824]:
+ * x.0_1 = (unsigned char) x_5(D);
+ * _3 = -x.0_1;
+ * _10 = (signed char) _3;
+ * _8 = x_5(D) & _10;
+ * if (_8 < 0)
+ * goto <bb 4>; [1.40%]
+ * else
+ * goto <bb 3>; [98.60%]
+ * <bb 3> [local count: 434070867]:
+ * _2 = x.0_1 + 255;
+ * <bb 4> [local count: 1073741824]:
+ * # _9 = PHI <_2(3), 128(2)>
+ * _4 = (int8_t) _9;
+ * =>
+ * _4 = .SAT_ADD (x_5, -1); */
static void
-match_unsigned_saturation_add (gimple_stmt_iterator *gsi, gassign *stmt)
+match_saturation_add_with_assign (gimple_stmt_iterator *gsi, gassign *stmt)
{
tree ops[2];
tree lhs = gimple_assign_lhs (stmt);
- if (gimple_unsigned_integer_sat_add (lhs, ops, NULL))
+ if (gimple_unsigned_integer_sat_add (lhs, ops, NULL)
+ || gimple_signed_integer_sat_add (lhs, ops, NULL))
build_saturation_binary_arith_call_and_replace (gsi, IFN_SAT_ADD, lhs,
ops[0], ops[1]);
}
@@ -6403,7 +6422,7 @@ math_opts_dom_walker::after_dom_children (basic_block bb)
break;
case PLUS_EXPR:
- match_unsigned_saturation_add (&gsi, as_a<gassign *> (stmt));
+ match_saturation_add_with_assign (&gsi, as_a<gassign *> (stmt));
match_unsigned_saturation_sub (&gsi, as_a<gassign *> (stmt));
/* fall-through */
case MINUS_EXPR:
@@ -6429,7 +6448,7 @@ math_opts_dom_walker::after_dom_children (basic_block bb)
break;
case BIT_IOR_EXPR:
- match_unsigned_saturation_add (&gsi, as_a<gassign *> (stmt));
+ match_saturation_add_with_assign (&gsi, as_a<gassign *> (stmt));
match_unsigned_saturation_trunc (&gsi, as_a<gassign *> (stmt));
/* fall-through */
case BIT_XOR_EXPR:
@@ -6450,6 +6469,7 @@ math_opts_dom_walker::after_dom_children (basic_block bb)
case NOP_EXPR:
match_unsigned_saturation_trunc (&gsi, as_a<gassign *> (stmt));
+ match_saturation_add_with_assign (&gsi, as_a<gassign *> (stmt));
break;
default:;
diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc
index a2e1fb1..897bd58 100644
--- a/gcc/tree-ssa-phiprop.cc
+++ b/gcc/tree-ssa-phiprop.cc
@@ -99,35 +99,6 @@ struct phiprop_d
tree vuse;
};
-/* Verify if the value recorded for NAME in PHIVN is still valid at
- the start of basic block BB. */
-
-static bool
-phivn_valid_p (struct phiprop_d *phivn, tree name, basic_block bb)
-{
- tree vuse = phivn[SSA_NAME_VERSION (name)].vuse;
- gimple *use_stmt;
- imm_use_iterator ui2;
- bool ok = true;
-
- /* The def stmts of the virtual uses need to be dominated by bb. */
- gcc_assert (vuse != NULL_TREE);
-
- FOR_EACH_IMM_USE_STMT (use_stmt, ui2, vuse)
- {
- /* If BB does not dominate a VDEF, the value is invalid. */
- if ((gimple_vdef (use_stmt) != NULL_TREE
- || gimple_code (use_stmt) == GIMPLE_PHI)
- && !dominated_by_p (CDI_DOMINATORS, gimple_bb (use_stmt), bb))
- {
- ok = false;
- break;
- }
- }
-
- return ok;
-}
-
/* Insert a new phi node for the dereference of PHI at basic_block
BB with the virtual operands from USE_STMT. */
@@ -275,12 +246,13 @@ chk_uses (tree, tree *idx, void *data)
<Lx>:;
Returns true if a transformation was done and edge insertions
need to be committed. Global data PHIVN and N is used to track
- past transformation results. We need to be especially careful here
+ past transformation results. VPHI is the virtual PHI node in BB
+ if there is one. We need to be especially careful here
with aliasing issues as we are moving memory reads. */
static bool
-propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn,
- size_t n, bitmap dce_ssa_names)
+propagate_with_phi (basic_block bb, gphi *vphi, gphi *phi,
+ struct phiprop_d *phivn, size_t n, bitmap dce_ssa_names)
{
tree ptr = PHI_RESULT (phi);
gimple *use_stmt;
@@ -298,6 +270,7 @@ propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn,
&& TYPE_MODE (TREE_TYPE (TREE_TYPE (ptr))) == BLKmode))
return false;
+ tree up_vuse = NULL_TREE;
/* Check if we can "cheaply" dereference all phi arguments. */
FOR_EACH_PHI_ARG (arg_p, phi, i, SSA_OP_USE)
{
@@ -315,14 +288,28 @@ propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn,
return false;
arg = gimple_assign_rhs1 (def_stmt);
}
- if (TREE_CODE (arg) != ADDR_EXPR
- && !(TREE_CODE (arg) == SSA_NAME
+ if (TREE_CODE (arg) == ADDR_EXPR)
+ ;
+ /* When we have an SSA name see if we previously encountered a
+ dereference of it. */
+ else if (TREE_CODE (arg) == SSA_NAME
&& SSA_NAME_VERSION (arg) < n
&& phivn[SSA_NAME_VERSION (arg)].value != NULL_TREE
&& (!type
|| types_compatible_p
- (type, TREE_TYPE (phivn[SSA_NAME_VERSION (arg)].value)))
- && phivn_valid_p (phivn, arg, bb)))
+ (type, TREE_TYPE (phivn[SSA_NAME_VERSION (arg)].value))))
+ {
+ /* The dereference should be under the VUSE that's active in BB.
+ If the BB has no virtual PHI then record the common "incoming"
+ vuse. */
+ if (vphi)
+ up_vuse = gimple_phi_arg_def (vphi, phi_arg_index_from_use (arg_p));
+ if (!up_vuse)
+ up_vuse = phivn[SSA_NAME_VERSION (arg)].vuse;
+ else if (up_vuse != phivn[SSA_NAME_VERSION (arg)].vuse)
+ return false;
+ }
+ else
return false;
if (!type
&& TREE_CODE (arg) == SSA_NAME)
@@ -372,17 +359,32 @@ propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn,
&& !gimple_has_volatile_ops (use_stmt)))
continue;
- /* Check if we can move the loads. The def stmt of the virtual use
- needs to be in a different basic block dominating bb. When the
+ /* Check if we can move the loads. This is when the virtual use
+ is the same as the one active at the start of BB which we know
+ either from its virtual PHI def or from the common incoming
+ VUSE. If neither is present make sure the def stmt of the virtual
+ use is in a different basic block dominating BB. When the
def is an edge-inserted one we know it dominates us. */
vuse = gimple_vuse (use_stmt);
- def_stmt = SSA_NAME_DEF_STMT (vuse);
- if (!SSA_NAME_IS_DEFAULT_DEF (vuse)
- && (gimple_bb (def_stmt) == bb
- || (gimple_bb (def_stmt)
- && !dominated_by_p (CDI_DOMINATORS,
- bb, gimple_bb (def_stmt)))))
- goto next;
+ if (vphi)
+ {
+ if (vuse != gimple_phi_result (vphi))
+ goto next;
+ }
+ else if (up_vuse)
+ {
+ if (vuse != up_vuse)
+ goto next;
+ }
+ else
+ {
+ def_stmt = SSA_NAME_DEF_STMT (vuse);
+ if (!SSA_NAME_IS_DEFAULT_DEF (vuse)
+ && (gimple_bb (def_stmt) == bb
+ || !dominated_by_p (CDI_DOMINATORS,
+ bb, gimple_bb (def_stmt))))
+ goto next;
+ }
/* Found a proper dereference with an aggregate copy. Just
insert aggregate copies on the edges instead. */
@@ -535,8 +537,10 @@ pass_phiprop::execute (function *fun)
edges avoid blocks with abnormal predecessors. */
if (bb_has_abnormal_pred (bb))
continue;
+ gphi *vphi = get_virtual_phi (bb);
for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- did_something |= propagate_with_phi (bb, gsi.phi (), phivn, n, dce_ssa_names);
+ did_something |= propagate_with_phi (bb, vphi, gsi.phi (),
+ phivn, n, dce_ssa_names);
}
if (did_something)
diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc
index 9fd1ef2..f2deb75 100644
--- a/gcc/tree-vect-data-refs.cc
+++ b/gcc/tree-vect-data-refs.cc
@@ -3682,6 +3682,13 @@ vect_analyze_data_ref_accesses (vec_info *vinfo,
!= type_size_a))
break;
+ /* For datarefs with big gap, it's better to split them into different
+ groups.
+ .i.e a[0], a[1], a[2], .. a[7], a[100], a[101],..., a[107] */
+ if ((unsigned HOST_WIDE_INT)(init_b - init_prev) * tree_to_uhwi (szb)
+ > MAX_BITSIZE_MODE_ANY_MODE / BITS_PER_UNIT)
+ break;
+
/* If the step (if not zero or non-constant) is smaller than the
difference between data-refs' inits this splits groups into
suitable sizes. */
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 6695854..3710694 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -10689,8 +10689,7 @@ vectorizable_load (vec_info *vinfo,
first_dr_info = dr_info;
}
- if (slp && grouped_load
- && memory_access_type == VMAT_STRIDED_SLP)
+ if (grouped_load && memory_access_type == VMAT_STRIDED_SLP)
{
group_size = DR_GROUP_SIZE (first_stmt_info);
ref_type = get_group_alias_ptr_type (first_stmt_info);
@@ -10830,22 +10829,20 @@ vectorizable_load (vec_info *vinfo,
ltype = build_aligned_type (ltype, align * BITS_PER_UNIT);
}
- if (slp)
+ /* For SLP permutation support we need to load the whole group,
+ not only the number of vector stmts the permutation result
+ fits in. */
+ if (slp_perm)
{
- /* For SLP permutation support we need to load the whole group,
- not only the number of vector stmts the permutation result
- fits in. */
- if (slp_perm)
- {
- /* We don't yet generate SLP_TREE_LOAD_PERMUTATIONs for
- variable VF. */
- unsigned int const_vf = vf.to_constant ();
- ncopies = CEIL (group_size * const_vf, const_nunits);
- dr_chain.create (ncopies);
- }
- else
- ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
+ /* We don't yet generate SLP_TREE_LOAD_PERMUTATIONs for
+ variable VF. */
+ unsigned int const_vf = vf.to_constant ();
+ ncopies = CEIL (group_size * const_vf, const_nunits);
+ dr_chain.create (ncopies);
}
+ else
+ ncopies = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node);
+
unsigned int group_el = 0;
unsigned HOST_WIDE_INT
elsz = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (vectype)));
@@ -10883,14 +10880,13 @@ vectorizable_load (vec_info *vinfo,
CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, new_temp);
group_el += lnel;
- if (! slp
- || group_el == group_size)
+ if (group_el == group_size)
{
n_groups++;
/* When doing SLP make sure to not load elements from
the next vector iteration, those will not be accessed
so just use the last element again. See PR107451. */
- if (!slp || known_lt (n_groups, vf))
+ if (known_lt (n_groups, vf))
{
tree newoff = copy_ssa_name (running_off);
gimple *incr
@@ -10938,19 +10934,10 @@ vectorizable_load (vec_info *vinfo,
if (!costing_p)
{
- if (slp)
- {
- if (slp_perm)
- dr_chain.quick_push (gimple_assign_lhs (new_stmt));
- else
- slp_node->push_vec_def (new_stmt);
- }
+ if (slp_perm)
+ dr_chain.quick_push (gimple_assign_lhs (new_stmt));
else
- {
- if (j == 0)
- *vec_stmt = new_stmt;
- STMT_VINFO_VEC_STMTS (stmt_info).safe_push (new_stmt);
- }
+ slp_node->push_vec_def (new_stmt);
}
}
if (slp_perm)
diff --git a/gcc/tree.h b/gcc/tree.h
index 99f2617..1e41316 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -5499,7 +5499,7 @@ storage_order_barrier_p (const_tree t)
&& TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (op)))
return true;
- return false;
+ return reverse_storage_order_for_component_p (op);
}
/* Given a DECL or TYPE, return the scope in which it was declared, or
diff --git a/gcc/xml-printer.h b/gcc/xml-printer.h
new file mode 100644
index 0000000..b90390c
--- /dev/null
+++ b/gcc/xml-printer.h
@@ -0,0 +1,84 @@
+/* Classes for creating XML trees by appending.
+ Copyright (C) 2025 Free Software Foundation, Inc.
+ Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_XML_PRINTER_H
+#define GCC_XML_PRINTER_H
+
+namespace xml {
+
+class node;
+ class element;
+
+/* A class for creating XML trees by appending to an insertion
+ point, with a stack of open tags. */
+
+class printer
+{
+public:
+ printer (element &insertion_point);
+
+ void push_tag (std::string name,
+ bool preserve_whitespace = false);
+ void push_tag_with_class (std::string name,
+ std::string class_,
+ bool preserve_whitespace = false);
+ void pop_tag ();
+
+ void set_attr (const char *name, std::string value);
+
+ void add_text (std::string text);
+
+ void add_raw (std::string text);
+
+ void push_element (std::unique_ptr<element> new_element);
+
+ void append (std::unique_ptr<node> new_node);
+
+ element *get_insertion_point () const;
+
+private:
+ // borrowed ptrs:
+ std::vector<element *> m_open_tags;
+};
+
+// RAII for push/pop element on xml::printer
+
+class auto_print_element
+{
+public:
+ auto_print_element (printer &printer,
+ std::string name,
+ bool preserve_whitespace = false)
+ : m_printer (printer)
+ {
+ m_printer.push_tag (name, preserve_whitespace);
+ }
+ ~auto_print_element ()
+ {
+ m_printer.pop_tag ();
+ }
+
+private:
+ printer &m_printer;
+};
+
+} // namespace xml
+
+#endif /* GCC_XML_PRINTER_H. */
diff --git a/gcc/xml.h b/gcc/xml.h
new file mode 100644
index 0000000..523a44d
--- /dev/null
+++ b/gcc/xml.h
@@ -0,0 +1,113 @@
+/* Classes for representing XML trees.
+ Copyright (C) 2024-2025 Free Software Foundation, Inc.
+ Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef GCC_XML_H
+#define GCC_XML_H
+
+namespace xml {
+
+// Forward decls; indentation reflects inheritance
+struct node;
+ struct text;
+ struct node_with_children;
+ struct document;
+ struct element;
+
+struct node
+{
+ virtual ~node () {}
+ virtual void write_as_xml (pretty_printer *pp,
+ int depth, bool indent) const = 0;
+ virtual text *dyn_cast_text ()
+ {
+ return 0;
+ }
+ void dump (FILE *out) const;
+ void DEBUG_FUNCTION dump () const { dump (stderr); }
+};
+
+struct text : public node
+{
+ text (std::string str)
+ : m_str (std::move (str))
+ {}
+
+ void write_as_xml (pretty_printer *pp,
+ int depth, bool indent) const final override;
+
+ text *dyn_cast_text () final override
+ {
+ return this;
+ }
+
+ std::string m_str;
+};
+
+struct node_with_children : public node
+{
+ void add_child (std::unique_ptr<node> node);
+ void add_text (std::string str);
+
+ std::vector<std::unique_ptr<node>> m_children;
+};
+
+struct document : public node_with_children
+{
+ void write_as_xml (pretty_printer *pp,
+ int depth, bool indent) const final override;
+};
+
+struct element : public node_with_children
+{
+ element (std::string kind, bool preserve_whitespace)
+ : m_kind (std::move (kind)),
+ m_preserve_whitespace (preserve_whitespace)
+ {}
+
+ void write_as_xml (pretty_printer *pp,
+ int depth, bool indent) const final override;
+
+ void set_attr (const char *name, std::string value);
+
+ std::string m_kind;
+ bool m_preserve_whitespace;
+ std::map<std::string, std::string> m_attributes;
+ std::vector<std::string> m_key_insertion_order;
+};
+
+/* A fragment of raw XML source, to be spliced in directly.
+ Use sparingly. */
+
+struct raw : public node
+{
+ raw (std::string xml_src)
+ : m_xml_src (xml_src)
+ {
+ }
+
+ void write_as_xml (pretty_printer *pp,
+ int depth, bool indent) const final override;
+
+ std::string m_xml_src;
+};
+
+} // namespace xml
+
+#endif /* GCC_XML_H. */
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index d55d191..7e907b6 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,88 @@
+2025-05-27 Jakub Jelinek <jakub@redhat.com>
+
+ * config/t-softfp (softfp_bid_list): Don't guard with
+ $(enable_decimal_float) == bid.
+ * soft-fp/bitint.h (__bid_pow10bitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_pow10bitint.
+ (__dpd_d2bbitint, __dpd_b2dbitint): Declare.
+ * soft-fp/bitintpow10.c (__dpd_d2bbitint, __dpd_b2dbitint): New
+ variables.
+ * soft-fp/fixsdbitint.c (__bid_fixsdbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixsdbitint.
+ Add DPD support. Fix big-endian support.
+ * soft-fp/fixddbitint.c (__bid_fixddbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixddbitint.
+ Add DPD support. Fix big-endian support.
+ * soft-fp/fixtdbitint.c (__bid_fixtdbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixtdbitint.
+ Add DPD support. Fix big-endian support.
+ * soft-fp/fixsdti.c (__bid_fixsdbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixsdbitint.
+ (__bid_fixsdti): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to
+ __dpd_fixsdti.
+ * soft-fp/fixddti.c (__bid_fixddbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixddbitint.
+ (__bid_fixddti): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to
+ __dpd_fixddti.
+ * soft-fp/fixtdti.c (__bid_fixtdbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixtdbitint.
+ (__bid_fixtdti): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to
+ __dpd_fixtdti.
+ * soft-fp/fixunssdti.c (__bid_fixsdbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixsdbitint.
+ (__bid_fixunssdti): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine
+ to __dpd_fixunssdti.
+ * soft-fp/fixunsddti.c (__bid_fixddbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixddbitint.
+ (__bid_fixunsddti): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine
+ to __dpd_fixunsddti.
+ * soft-fp/fixunstdti.c (__bid_fixtdbitint): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_fixtdbitint.
+ (__bid_fixunstdti): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine
+ to __dpd_fixunstdti.
+ * soft-fp/floatbitintsd.c (__bid_floatbitintsd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitintsd.
+ Add DPD support. Avoid calling __builtin_clzll with 0 argument. Fix
+ big-endian support.
+ * soft-fp/floatbitintdd.c (__bid_floatbitintdd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitintdd.
+ Add DPD support. Avoid calling __builtin_clzll with 0 argument. Fix
+ big-endian support.
+ * soft-fp/floatbitinttd.c (__bid_floatbitinttd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitinttd.
+ Add DPD support. Avoid calling __builtin_clzll with 0 argument. Fix
+ big-endian support.
+ * soft-fp/floattisd.c (__bid_floatbitintsd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitintsd.
+ (__bid_floattisd): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to
+ __dpd_floattisd.
+ * soft-fp/floattidd.c (__bid_floatbitintdd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitintdd.
+ (__bid_floattidd): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to
+ __dpd_floattidd.
+ * soft-fp/floattitd.c (__bid_floatbitinttd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitinttd.
+ (__bid_floattitd): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to
+ __dpd_floattitd.
+ * soft-fp/floatuntisd.c (__bid_floatbitintsd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitintsd.
+ (__bid_floatuntisd): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine
+ to __dpd_floatuntisd.
+ * soft-fp/floatuntidd.c (__bid_floatbitintdd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitintdd.
+ (__bid_floatuntidd): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine
+ to __dpd_floatuntidd.
+ * soft-fp/floatuntitd.c (__bid_floatbitinttd): For
+ !defined(ENABLE_DECIMAL_BID_FORMAT) redefine to __dpd_floatbitinttd.
+ (__bid_floatuntitd): For !defined(ENABLE_DECIMAL_BID_FORMAT) redefine
+ to __dpd_floatuntitd.
+
+2025-05-25 LIU Hao <lh_mouse@126.com>
+
+ * config.host: Enable mcf thread model for aarch64-*-mingw*.
+ * config/i386/t-mingw-mcfgthread: Move to...
+ * config/mingw/t-mingw-mcfgthread: ...here.
+
2025-05-21 Alexandre Oliva <oliva@adacore.com>
* config/gthr-vxworks-thread.c: Include string.h for memset.
diff --git a/libgcc/config.host b/libgcc/config.host
index 6a88ee5..d36f0e3 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -472,6 +472,9 @@ aarch64-*-mingw*)
posix)
tmake_thr_file="mingw/t-mingw-pthread"
;;
+ mcf)
+ tmake_thr_file="mingw/t-mingw-mcfgthread"
+ ;;
esac
tmake_file="${tmake_file} ${cpu_type}/t-no-eh ${tmake_thr_file}"
tmake_file="${tmake_file} t-dfprules"
@@ -904,7 +907,7 @@ i[34567]86-*-mingw*)
tmake_thr_file="mingw/t-mingw-pthread"
;;
mcf)
- tmake_thr_file="i386/t-mingw-mcfgthread"
+ tmake_thr_file="mingw/t-mingw-mcfgthread"
;;
esac
# This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h
@@ -931,7 +934,7 @@ x86_64-*-mingw*)
tmake_thr_file="mingw/t-mingw-pthread"
;;
mcf)
- tmake_thr_file="i386/t-mingw-mcfgthread"
+ tmake_thr_file="mingw/t-mingw-mcfgthread"
;;
esac
# This has to match the logic for DWARF2_UNWIND_INFO in gcc/config/i386/cygming.h
diff --git a/libgcc/config/avr/libf7/ChangeLog b/libgcc/config/avr/libf7/ChangeLog
index 1b8a29a..b19b5b4 100644
--- a/libgcc/config/avr/libf7/ChangeLog
+++ b/libgcc/config/avr/libf7/ChangeLog
@@ -1,3 +1,18 @@
+2025-05-27 Georg-Johann Lay <avr@gjlay.de>
+
+ PR target/120442
+ * libf7-common.mk (LIBF_C_PARTS, m_ddd): Add fdim.
+ * libf7.h (f7_fdim): New proto.
+ * libf7.c (f7_fdim): New function.
+ * f7renames.sh (f7_fdim): Add rename.
+ * f7-wraps.h: Rebuild
+ * f7-renames.h: Rebuild
+
+2025-05-27 Georg-Johann Lay <avr@gjlay.de>
+
+ PR target/120441
+ * libf7.c (f7_exp): Limit aa->expo to 10 (not to 9).
+
2025-03-22 Georg-Johann Lay <avr@gjlay.de>
* t-libf7 (libgcc-objects): Only add objects when building
diff --git a/libgcc/config/avr/libf7/f7-renames.h b/libgcc/config/avr/libf7/f7-renames.h
index bbe571a..bce2dd3 100644
--- a/libgcc/config/avr/libf7/f7-renames.h
+++ b/libgcc/config/avr/libf7/f7-renames.h
@@ -97,6 +97,7 @@
#define f7_acos __f7_acos
#define f7_atan __f7_atan
#define f7_atan2 __f7_atan2
+#define f7_fdim __f7_fdim
#define f7_mul_noround __f7_mul_noround
#define f7_sqrt16_round __f7_sqrt16_round
#define f7_sqrt16_floor __f7_sqrt16_floor
diff --git a/libgcc/config/avr/libf7/f7-wraps.h b/libgcc/config/avr/libf7/f7-wraps.h
index a455b7d..409492e 100644
--- a/libgcc/config/avr/libf7/f7-wraps.h
+++ b/libgcc/config/avr/libf7/f7-wraps.h
@@ -239,7 +239,7 @@ _ENDF __extendsfdf2
;; Functions that usually live in libm: Depending on [long] double layout,
;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
-;; pow fmin fmax fmod hypot atan2
+;; pow fmin fmax fmod hypot atan2 fdim
;; double __pow (double, double)
#ifdef F7MOD_D_pow_
@@ -313,6 +313,18 @@ _DEFUN __atan2
_ENDF __atan2
#endif /* F7MOD_D_atan2_ */
+;; double __fdim (double, double)
+#ifdef F7MOD_D_fdim_
+_DEFUN __fdim
+ DALIAS fdim
+ LALIAS fdiml
+ .global F7_NAME(fdim)
+ ldi ZH, hi8(gs(F7_NAME(fdim)))
+ ldi ZL, lo8(gs(F7_NAME(fdim)))
+ F7jmp call_ddd
+_ENDF __fdim
+#endif /* F7MOD_D_fdim_ */
+
;; Functions that usually live in libm: Depending on [long] double layout,
;; define <name> and <name>l as weak alias(es) of __<name> for <name> in:
;; ldexp frexp
diff --git a/libgcc/config/avr/libf7/f7renames.sh b/libgcc/config/avr/libf7/f7renames.sh
index 7ef251e..4ced423 100755
--- a/libgcc/config/avr/libf7/f7renames.sh
+++ b/libgcc/config/avr/libf7/f7renames.sh
@@ -35,9 +35,9 @@ EOF
c)
if [ x${PRE} != xf7_ ]; then
- echo " "
+ echo ""
echo "/* Renames for libf7.c, libf7.h. */"
- echo " "
+ echo ""
for x in $*; do
echo "#define f7_$x ${PRE}$x"
done
@@ -46,9 +46,9 @@ EOF
cst)
if [ x${PRE} != xf7_ ]; then
- echo " "
+ echo ""
echo "/* Renames for libf7.c, libf7.h. */"
- echo " "
+ echo ""
for x in $*; do
echo "#define f7_const_${x} ${PRE}const_${x}"
echo "#define f7_const_${x}_P ${PRE}const_${x}_P"
@@ -58,9 +58,9 @@ EOF
asm)
if [ x${PRE} != xf7_ ]; then
- echo " "
+ echo ""
echo "/* Renames for libf7-asm.sx, f7-wraps.h. */"
- echo " "
+ echo ""
for x in $*; do
echo "#define f7_${x}_asm ${PRE}${x}_asm"
done
diff --git a/libgcc/config/avr/libf7/libf7-common.mk b/libgcc/config/avr/libf7/libf7-common.mk
index 5d41107..644be2c 100644
--- a/libgcc/config/avr/libf7/libf7-common.mk
+++ b/libgcc/config/avr/libf7/libf7-common.mk
@@ -8,7 +8,7 @@ F7_C_PARTS += set_float get_float get_double set_double set_pdouble
F7_C_PARTS += fabs neg fmin fmax minmax truncx trunc floor ceil round lround
F7_C_PARTS += horner logx log log10 log2 exp pow10 pow powi
F7_C_PARTS += sin cos tan cotan sincos sinh cosh tanh sinhcosh
-F7_C_PARTS += asinacos asin acos atan atan2
+F7_C_PARTS += asinacos asin acos atan atan2 fdim
F7_C_PARTS += abscmp_msb_ge cmp cmp_abs cmp_unordered
F7_C_PARTS += const_1 const_1_2 const_1_3
@@ -34,7 +34,7 @@ g_xdd_cmp += le lt ge gt ne eq unord
g_dx += floatunsidf floatsidf extendsfdf2
g_xd += fixdfsi fixdfdi fixunsdfdi fixunsdfsi truncdfsf2
-m_ddd += pow fmin fmax fmod hypot atan2
+m_ddd += pow fmin fmax fmod hypot atan2 fdim
m_ddx += ldexp frexp
m_dd += sqrt cbrt exp exp10 pow10 log log10 log2 sin cos tan cotan asin acos atan
m_dd += ceil floor trunc round sinh cosh tanh
@@ -59,7 +59,7 @@ F7F += lrint ldexp frexp exp logx log log10 log2
F7F += minmax fmax fmin floor ceil round lround trunc truncx
F7F += horner pow10 exp10 pow powi
F7F += sin cos tan cotan sincos sinh cosh tanh sinhcosh
-F7F += asinacos asin acos atan atan2
+F7F += asinacos asin acos atan atan2 fdim
F7F += mul_noround sqrt16_round sqrt16_floor
F7F += clr_mant_lsbs abscmp_msb_ge lshrdi3 ashldi3
F7F += assert
diff --git a/libgcc/config/avr/libf7/libf7.c b/libgcc/config/avr/libf7/libf7.c
index a64554c..78c218a 100644
--- a/libgcc/config/avr/libf7/libf7.c
+++ b/libgcc/config/avr/libf7/libf7.c
@@ -928,6 +928,21 @@ void f7_sub (f7_t *cc, const f7_t *aa, const f7_t *bb)
#endif // F7MOD_sub_
+#ifdef F7MOD_fdim_
+F7_WEAK
+void f7_fdim (f7_t *cc, const f7_t *aa, const f7_t *bb)
+{
+ int8_t cmp = f7_cmp_unordered (aa, bb, true /*with_sign*/);
+ if (cmp == INT8_MIN)
+ return f7_set_nan (cc);
+ if (cmp < 0)
+ return f7_clr (cc);
+
+ f7_sub (cc, aa, bb);
+}
+#endif // F7MOD_fdim_
+
+
#ifdef F7MOD_addsub_
static void return_with_sign (f7_t *cc, const f7_t *aa, int8_t c_sign)
{
@@ -1649,10 +1664,10 @@ void f7_exp (f7_t *cc, const f7_t *aa)
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 */
+ to |A| < 1023 * ln2 ~ 709. We limit to 1024 = 2^10 */
if (f7_class_inf (a_class)
- || (f7_class_nonzero (a_class) && aa->expo >= 9))
+ || (f7_class_nonzero (a_class) && aa->expo >= 10))
{
if (f7_class_sign (a_class))
return f7_clr (cc);
diff --git a/libgcc/config/avr/libf7/libf7.h b/libgcc/config/avr/libf7/libf7.h
index 8aa91c7..786e141 100644
--- a/libgcc/config/avr/libf7/libf7.h
+++ b/libgcc/config/avr/libf7/libf7.h
@@ -612,6 +612,7 @@ extern void f7_cos (f7_t*, const f7_t*);
extern void f7_tan (f7_t*, const f7_t*);
extern void f7_atan (f7_t*, const f7_t*);
extern void f7_atan2 (f7_t*, const f7_t*, const f7_t*);
+extern void f7_fdim (f7_t*, const f7_t*, const f7_t*);
extern void f7_asin (f7_t*, const f7_t*);
extern void f7_acos (f7_t*, const f7_t*);
extern void f7_tanh (f7_t*, const f7_t*);
diff --git a/libgcc/config/i386/t-mingw-mcfgthread b/libgcc/config/mingw/t-mingw-mcfgthread
index c5b817f..c5b817f 100644
--- a/libgcc/config/i386/t-mingw-mcfgthread
+++ b/libgcc/config/mingw/t-mingw-mcfgthread
diff --git a/libgcc/config/t-softfp b/libgcc/config/t-softfp
index 94297ad..b352dfa 100644
--- a/libgcc/config/t-softfp
+++ b/libgcc/config/t-softfp
@@ -67,13 +67,11 @@ softfp_floatint_funcs = fix$(m)$(i) fixuns$(m)$(i) \
softfp_floatbitint_funcs = fix$(m)bitint floatbitint$(m)
softfp_bid_list :=
ifeq ($(decimal_float),yes)
-ifeq ($(enable_decimal_float),bid)
softfp_bid_list += bitintpow10 \
$(foreach m,sd dd td,fix$(m)bitint floatbitint$(m) \
fix$(m)ti fixuns$(m)ti \
floatti$(m) floatunti$(m))
endif
-endif
softfp_func_list := \
$(foreach m,$(softfp_float_modes), \
diff --git a/libgcc/soft-fp/bitint.h b/libgcc/soft-fp/bitint.h
index 8d489e6..457fc8f 100644
--- a/libgcc/soft-fp/bitint.h
+++ b/libgcc/soft-fp/bitint.h
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Definitions for _BitInt implementation details.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -352,6 +352,10 @@ extern void __divmodbitint4 (UBILtype *, SItype, UBILtype *, SItype,
const UBILtype *, SItype,
const UBILtype *, SItype);
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_pow10bitint __dpd_pow10bitint
+extern const unsigned short __dpd_d2bbitint[1024], __dpd_b2dbitint[1000];
+#endif
extern USItype __bid_pow10bitint (UBILtype *, SItype, USItype);
#endif /* __BITINT_MAXWIDTH__ */
diff --git a/libgcc/soft-fp/bitintpow10.c b/libgcc/soft-fp/bitintpow10.c
index 06a470f0..15b288c 100644
--- a/libgcc/soft-fp/bitintpow10.c
+++ b/libgcc/soft-fp/bitintpow10.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Compute powers of 10 into _BitInt.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -130,3 +130,341 @@ __bid_pow10bitint (UBILtype *r, SItype rprec, USItype n)
}
}
#endif
+
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+/* DPD encoded 10-bit number to decimal table. */
+const unsigned short __dpd_d2bbitint[1024] = {
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 80, 81, 800, 801, 880, 881,
+ 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 90, 91, 810, 811, 890, 891,
+ 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 82, 83, 820, 821, 808, 809,
+ 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 92, 93, 830, 831, 818, 819,
+ 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 84, 85, 840, 841, 88, 89,
+ 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 94, 95, 850, 851, 98, 99,
+ 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 86, 87, 860, 861, 888, 889,
+ 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 96, 97, 870, 871, 898, 899,
+ 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 180, 181, 900, 901, 980, 981,
+ 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 190, 191, 910, 911, 990, 991,
+ 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 182, 183, 920, 921, 908, 909,
+ 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 192, 193, 930, 931, 918, 919,
+ 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 184, 185, 940, 941, 188, 189,
+ 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 194, 195, 950, 951, 198, 199,
+ 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 186, 187, 960, 961, 988, 989,
+ 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 196, 197, 970, 971, 998, 999,
+ 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 280, 281, 802, 803, 882, 883,
+ 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 290, 291, 812, 813, 892, 893,
+ 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 282, 283, 822, 823, 828, 829,
+ 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 292, 293, 832, 833, 838, 839,
+ 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 284, 285, 842, 843, 288, 289,
+ 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 294, 295, 852, 853, 298, 299,
+ 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 286, 287, 862, 863, 888, 889,
+ 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 296, 297, 872, 873, 898, 899,
+ 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 380, 381, 902, 903, 982, 983,
+ 310, 311, 312, 313, 314, 315, 316, 317,
+ 318, 319, 390, 391, 912, 913, 992, 993,
+ 320, 321, 322, 323, 324, 325, 326, 327,
+ 328, 329, 382, 383, 922, 923, 928, 929,
+ 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 392, 393, 932, 933, 938, 939,
+ 340, 341, 342, 343, 344, 345, 346, 347,
+ 348, 349, 384, 385, 942, 943, 388, 389,
+ 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 394, 395, 952, 953, 398, 399,
+ 360, 361, 362, 363, 364, 365, 366, 367,
+ 368, 369, 386, 387, 962, 963, 988, 989,
+ 370, 371, 372, 373, 374, 375, 376, 377,
+ 378, 379, 396, 397, 972, 973, 998, 999,
+ 400, 401, 402, 403, 404, 405, 406, 407,
+ 408, 409, 480, 481, 804, 805, 884, 885,
+ 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 419, 490, 491, 814, 815, 894, 895,
+ 420, 421, 422, 423, 424, 425, 426, 427,
+ 428, 429, 482, 483, 824, 825, 848, 849,
+ 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 492, 493, 834, 835, 858, 859,
+ 440, 441, 442, 443, 444, 445, 446, 447,
+ 448, 449, 484, 485, 844, 845, 488, 489,
+ 450, 451, 452, 453, 454, 455, 456, 457,
+ 458, 459, 494, 495, 854, 855, 498, 499,
+ 460, 461, 462, 463, 464, 465, 466, 467,
+ 468, 469, 486, 487, 864, 865, 888, 889,
+ 470, 471, 472, 473, 474, 475, 476, 477,
+ 478, 479, 496, 497, 874, 875, 898, 899,
+ 500, 501, 502, 503, 504, 505, 506, 507,
+ 508, 509, 580, 581, 904, 905, 984, 985,
+ 510, 511, 512, 513, 514, 515, 516, 517,
+ 518, 519, 590, 591, 914, 915, 994, 995,
+ 520, 521, 522, 523, 524, 525, 526, 527,
+ 528, 529, 582, 583, 924, 925, 948, 949,
+ 530, 531, 532, 533, 534, 535, 536, 537,
+ 538, 539, 592, 593, 934, 935, 958, 959,
+ 540, 541, 542, 543, 544, 545, 546, 547,
+ 548, 549, 584, 585, 944, 945, 588, 589,
+ 550, 551, 552, 553, 554, 555, 556, 557,
+ 558, 559, 594, 595, 954, 955, 598, 599,
+ 560, 561, 562, 563, 564, 565, 566, 567,
+ 568, 569, 586, 587, 964, 965, 988, 989,
+ 570, 571, 572, 573, 574, 575, 576, 577,
+ 578, 579, 596, 597, 974, 975, 998, 999,
+ 600, 601, 602, 603, 604, 605, 606, 607,
+ 608, 609, 680, 681, 806, 807, 886, 887,
+ 610, 611, 612, 613, 614, 615, 616, 617,
+ 618, 619, 690, 691, 816, 817, 896, 897,
+ 620, 621, 622, 623, 624, 625, 626, 627,
+ 628, 629, 682, 683, 826, 827, 868, 869,
+ 630, 631, 632, 633, 634, 635, 636, 637,
+ 638, 639, 692, 693, 836, 837, 878, 879,
+ 640, 641, 642, 643, 644, 645, 646, 647,
+ 648, 649, 684, 685, 846, 847, 688, 689,
+ 650, 651, 652, 653, 654, 655, 656, 657,
+ 658, 659, 694, 695, 856, 857, 698, 699,
+ 660, 661, 662, 663, 664, 665, 666, 667,
+ 668, 669, 686, 687, 866, 867, 888, 889,
+ 670, 671, 672, 673, 674, 675, 676, 677,
+ 678, 679, 696, 697, 876, 877, 898, 899,
+ 700, 701, 702, 703, 704, 705, 706, 707,
+ 708, 709, 780, 781, 906, 907, 986, 987,
+ 710, 711, 712, 713, 714, 715, 716, 717,
+ 718, 719, 790, 791, 916, 917, 996, 997,
+ 720, 721, 722, 723, 724, 725, 726, 727,
+ 728, 729, 782, 783, 926, 927, 968, 969,
+ 730, 731, 732, 733, 734, 735, 736, 737,
+ 738, 739, 792, 793, 936, 937, 978, 979,
+ 740, 741, 742, 743, 744, 745, 746, 747,
+ 748, 749, 784, 785, 946, 947, 788, 789,
+ 750, 751, 752, 753, 754, 755, 756, 757,
+ 758, 759, 794, 795, 956, 957, 798, 799,
+ 760, 761, 762, 763, 764, 765, 766, 767,
+ 768, 769, 786, 787, 966, 967, 988, 989,
+ 770, 771, 772, 773, 774, 775, 776, 777,
+ 778, 779, 796, 797, 976, 977, 998, 999
+};
+
+/* Decimal to DPD encoded 10-bit number table. */
+const unsigned short __dpd_b2dbitint[1000] = {
+ 0x000, 0x001, 0x002, 0x003, 0x004,
+ 0x005, 0x006, 0x007, 0x008, 0x009,
+ 0x010, 0x011, 0x012, 0x013, 0x014,
+ 0x015, 0x016, 0x017, 0x018, 0x019,
+ 0x020, 0x021, 0x022, 0x023, 0x024,
+ 0x025, 0x026, 0x027, 0x028, 0x029,
+ 0x030, 0x031, 0x032, 0x033, 0x034,
+ 0x035, 0x036, 0x037, 0x038, 0x039,
+ 0x040, 0x041, 0x042, 0x043, 0x044,
+ 0x045, 0x046, 0x047, 0x048, 0x049,
+ 0x050, 0x051, 0x052, 0x053, 0x054,
+ 0x055, 0x056, 0x057, 0x058, 0x059,
+ 0x060, 0x061, 0x062, 0x063, 0x064,
+ 0x065, 0x066, 0x067, 0x068, 0x069,
+ 0x070, 0x071, 0x072, 0x073, 0x074,
+ 0x075, 0x076, 0x077, 0x078, 0x079,
+ 0x00a, 0x00b, 0x02a, 0x02b, 0x04a,
+ 0x04b, 0x06a, 0x06b, 0x04e, 0x04f,
+ 0x01a, 0x01b, 0x03a, 0x03b, 0x05a,
+ 0x05b, 0x07a, 0x07b, 0x05e, 0x05f,
+ 0x080, 0x081, 0x082, 0x083, 0x084,
+ 0x085, 0x086, 0x087, 0x088, 0x089,
+ 0x090, 0x091, 0x092, 0x093, 0x094,
+ 0x095, 0x096, 0x097, 0x098, 0x099,
+ 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4,
+ 0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9,
+ 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4,
+ 0x0b5, 0x0b6, 0x0b7, 0x0b8, 0x0b9,
+ 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4,
+ 0x0c5, 0x0c6, 0x0c7, 0x0c8, 0x0c9,
+ 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4,
+ 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9,
+ 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4,
+ 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9,
+ 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4,
+ 0x0f5, 0x0f6, 0x0f7, 0x0f8, 0x0f9,
+ 0x08a, 0x08b, 0x0aa, 0x0ab, 0x0ca,
+ 0x0cb, 0x0ea, 0x0eb, 0x0ce, 0x0cf,
+ 0x09a, 0x09b, 0x0ba, 0x0bb, 0x0da,
+ 0x0db, 0x0fa, 0x0fb, 0x0de, 0x0df,
+ 0x100, 0x101, 0x102, 0x103, 0x104,
+ 0x105, 0x106, 0x107, 0x108, 0x109,
+ 0x110, 0x111, 0x112, 0x113, 0x114,
+ 0x115, 0x116, 0x117, 0x118, 0x119,
+ 0x120, 0x121, 0x122, 0x123, 0x124,
+ 0x125, 0x126, 0x127, 0x128, 0x129,
+ 0x130, 0x131, 0x132, 0x133, 0x134,
+ 0x135, 0x136, 0x137, 0x138, 0x139,
+ 0x140, 0x141, 0x142, 0x143, 0x144,
+ 0x145, 0x146, 0x147, 0x148, 0x149,
+ 0x150, 0x151, 0x152, 0x153, 0x154,
+ 0x155, 0x156, 0x157, 0x158, 0x159,
+ 0x160, 0x161, 0x162, 0x163, 0x164,
+ 0x165, 0x166, 0x167, 0x168, 0x169,
+ 0x170, 0x171, 0x172, 0x173, 0x174,
+ 0x175, 0x176, 0x177, 0x178, 0x179,
+ 0x10a, 0x10b, 0x12a, 0x12b, 0x14a,
+ 0x14b, 0x16a, 0x16b, 0x14e, 0x14f,
+ 0x11a, 0x11b, 0x13a, 0x13b, 0x15a,
+ 0x15b, 0x17a, 0x17b, 0x15e, 0x15f,
+ 0x180, 0x181, 0x182, 0x183, 0x184,
+ 0x185, 0x186, 0x187, 0x188, 0x189,
+ 0x190, 0x191, 0x192, 0x193, 0x194,
+ 0x195, 0x196, 0x197, 0x198, 0x199,
+ 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4,
+ 0x1a5, 0x1a6, 0x1a7, 0x1a8, 0x1a9,
+ 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4,
+ 0x1b5, 0x1b6, 0x1b7, 0x1b8, 0x1b9,
+ 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4,
+ 0x1c5, 0x1c6, 0x1c7, 0x1c8, 0x1c9,
+ 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4,
+ 0x1d5, 0x1d6, 0x1d7, 0x1d8, 0x1d9,
+ 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4,
+ 0x1e5, 0x1e6, 0x1e7, 0x1e8, 0x1e9,
+ 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4,
+ 0x1f5, 0x1f6, 0x1f7, 0x1f8, 0x1f9,
+ 0x18a, 0x18b, 0x1aa, 0x1ab, 0x1ca,
+ 0x1cb, 0x1ea, 0x1eb, 0x1ce, 0x1cf,
+ 0x19a, 0x19b, 0x1ba, 0x1bb, 0x1da,
+ 0x1db, 0x1fa, 0x1fb, 0x1de, 0x1df,
+ 0x200, 0x201, 0x202, 0x203, 0x204,
+ 0x205, 0x206, 0x207, 0x208, 0x209,
+ 0x210, 0x211, 0x212, 0x213, 0x214,
+ 0x215, 0x216, 0x217, 0x218, 0x219,
+ 0x220, 0x221, 0x222, 0x223, 0x224,
+ 0x225, 0x226, 0x227, 0x228, 0x229,
+ 0x230, 0x231, 0x232, 0x233, 0x234,
+ 0x235, 0x236, 0x237, 0x238, 0x239,
+ 0x240, 0x241, 0x242, 0x243, 0x244,
+ 0x245, 0x246, 0x247, 0x248, 0x249,
+ 0x250, 0x251, 0x252, 0x253, 0x254,
+ 0x255, 0x256, 0x257, 0x258, 0x259,
+ 0x260, 0x261, 0x262, 0x263, 0x264,
+ 0x265, 0x266, 0x267, 0x268, 0x269,
+ 0x270, 0x271, 0x272, 0x273, 0x274,
+ 0x275, 0x276, 0x277, 0x278, 0x279,
+ 0x20a, 0x20b, 0x22a, 0x22b, 0x24a,
+ 0x24b, 0x26a, 0x26b, 0x24e, 0x24f,
+ 0x21a, 0x21b, 0x23a, 0x23b, 0x25a,
+ 0x25b, 0x27a, 0x27b, 0x25e, 0x25f,
+ 0x280, 0x281, 0x282, 0x283, 0x284,
+ 0x285, 0x286, 0x287, 0x288, 0x289,
+ 0x290, 0x291, 0x292, 0x293, 0x294,
+ 0x295, 0x296, 0x297, 0x298, 0x299,
+ 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4,
+ 0x2a5, 0x2a6, 0x2a7, 0x2a8, 0x2a9,
+ 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4,
+ 0x2b5, 0x2b6, 0x2b7, 0x2b8, 0x2b9,
+ 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4,
+ 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9,
+ 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4,
+ 0x2d5, 0x2d6, 0x2d7, 0x2d8, 0x2d9,
+ 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4,
+ 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9,
+ 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4,
+ 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x2f9,
+ 0x28a, 0x28b, 0x2aa, 0x2ab, 0x2ca,
+ 0x2cb, 0x2ea, 0x2eb, 0x2ce, 0x2cf,
+ 0x29a, 0x29b, 0x2ba, 0x2bb, 0x2da,
+ 0x2db, 0x2fa, 0x2fb, 0x2de, 0x2df,
+ 0x300, 0x301, 0x302, 0x303, 0x304,
+ 0x305, 0x306, 0x307, 0x308, 0x309,
+ 0x310, 0x311, 0x312, 0x313, 0x314,
+ 0x315, 0x316, 0x317, 0x318, 0x319,
+ 0x320, 0x321, 0x322, 0x323, 0x324,
+ 0x325, 0x326, 0x327, 0x328, 0x329,
+ 0x330, 0x331, 0x332, 0x333, 0x334,
+ 0x335, 0x336, 0x337, 0x338, 0x339,
+ 0x340, 0x341, 0x342, 0x343, 0x344,
+ 0x345, 0x346, 0x347, 0x348, 0x349,
+ 0x350, 0x351, 0x352, 0x353, 0x354,
+ 0x355, 0x356, 0x357, 0x358, 0x359,
+ 0x360, 0x361, 0x362, 0x363, 0x364,
+ 0x365, 0x366, 0x367, 0x368, 0x369,
+ 0x370, 0x371, 0x372, 0x373, 0x374,
+ 0x375, 0x376, 0x377, 0x378, 0x379,
+ 0x30a, 0x30b, 0x32a, 0x32b, 0x34a,
+ 0x34b, 0x36a, 0x36b, 0x34e, 0x34f,
+ 0x31a, 0x31b, 0x33a, 0x33b, 0x35a,
+ 0x35b, 0x37a, 0x37b, 0x35e, 0x35f,
+ 0x380, 0x381, 0x382, 0x383, 0x384,
+ 0x385, 0x386, 0x387, 0x388, 0x389,
+ 0x390, 0x391, 0x392, 0x393, 0x394,
+ 0x395, 0x396, 0x397, 0x398, 0x399,
+ 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4,
+ 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9,
+ 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4,
+ 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9,
+ 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4,
+ 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9,
+ 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4,
+ 0x3d5, 0x3d6, 0x3d7, 0x3d8, 0x3d9,
+ 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4,
+ 0x3e5, 0x3e6, 0x3e7, 0x3e8, 0x3e9,
+ 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x3f4,
+ 0x3f5, 0x3f6, 0x3f7, 0x3f8, 0x3f9,
+ 0x38a, 0x38b, 0x3aa, 0x3ab, 0x3ca,
+ 0x3cb, 0x3ea, 0x3eb, 0x3ce, 0x3cf,
+ 0x39a, 0x39b, 0x3ba, 0x3bb, 0x3da,
+ 0x3db, 0x3fa, 0x3fb, 0x3de, 0x3df,
+ 0x00c, 0x00d, 0x10c, 0x10d, 0x20c,
+ 0x20d, 0x30c, 0x30d, 0x02e, 0x02f,
+ 0x01c, 0x01d, 0x11c, 0x11d, 0x21c,
+ 0x21d, 0x31c, 0x31d, 0x03e, 0x03f,
+ 0x02c, 0x02d, 0x12c, 0x12d, 0x22c,
+ 0x22d, 0x32c, 0x32d, 0x12e, 0x12f,
+ 0x03c, 0x03d, 0x13c, 0x13d, 0x23c,
+ 0x23d, 0x33c, 0x33d, 0x13e, 0x13f,
+ 0x04c, 0x04d, 0x14c, 0x14d, 0x24c,
+ 0x24d, 0x34c, 0x34d, 0x22e, 0x22f,
+ 0x05c, 0x05d, 0x15c, 0x15d, 0x25c,
+ 0x25d, 0x35c, 0x35d, 0x23e, 0x23f,
+ 0x06c, 0x06d, 0x16c, 0x16d, 0x26c,
+ 0x26d, 0x36c, 0x36d, 0x32e, 0x32f,
+ 0x07c, 0x07d, 0x17c, 0x17d, 0x27c,
+ 0x27d, 0x37c, 0x37d, 0x33e, 0x33f,
+ 0x00e, 0x00f, 0x10e, 0x10f, 0x20e,
+ 0x20f, 0x30e, 0x30f, 0x06e, 0x06f,
+ 0x01e, 0x01f, 0x11e, 0x11f, 0x21e,
+ 0x21f, 0x31e, 0x31f, 0x07e, 0x07f,
+ 0x08c, 0x08d, 0x18c, 0x18d, 0x28c,
+ 0x28d, 0x38c, 0x38d, 0x0ae, 0x0af,
+ 0x09c, 0x09d, 0x19c, 0x19d, 0x29c,
+ 0x29d, 0x39c, 0x39d, 0x0be, 0x0bf,
+ 0x0ac, 0x0ad, 0x1ac, 0x1ad, 0x2ac,
+ 0x2ad, 0x3ac, 0x3ad, 0x1ae, 0x1af,
+ 0x0bc, 0x0bd, 0x1bc, 0x1bd, 0x2bc,
+ 0x2bd, 0x3bc, 0x3bd, 0x1be, 0x1bf,
+ 0x0cc, 0x0cd, 0x1cc, 0x1cd, 0x2cc,
+ 0x2cd, 0x3cc, 0x3cd, 0x2ae, 0x2af,
+ 0x0dc, 0x0dd, 0x1dc, 0x1dd, 0x2dc,
+ 0x2dd, 0x3dc, 0x3dd, 0x2be, 0x2bf,
+ 0x0ec, 0x0ed, 0x1ec, 0x1ed, 0x2ec,
+ 0x2ed, 0x3ec, 0x3ed, 0x3ae, 0x3af,
+ 0x0fc, 0x0fd, 0x1fc, 0x1fd, 0x2fc,
+ 0x2fd, 0x3fc, 0x3fd, 0x3be, 0x3bf,
+ 0x08e, 0x08f, 0x18e, 0x18f, 0x28e,
+ 0x28f, 0x38e, 0x38f, 0x0ee, 0x0ef,
+ 0x09e, 0x09f, 0x19e, 0x19f, 0x29e,
+ 0x29f, 0x39e, 0x39f, 0x0fe, 0x0ff
+};
+#endif
diff --git a/libgcc/soft-fp/fixddbitint.c b/libgcc/soft-fp/fixddbitint.c
index 7b0162e..067a9a6 100644
--- a/libgcc/soft-fp/fixddbitint.c
+++ b/libgcc/soft-fp/fixddbitint.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal64 to signed or unsigned _BitInt.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#ifdef __BITINT_MAXWIDTH__
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixddbitint __dpd_fixddbitint
+#endif
extern void __bid_fixddbitint (UBILtype *, SItype, _Decimal64);
void
@@ -48,6 +51,7 @@ __bid_fixddbitint (UBILtype *r, SItype rprec, _Decimal64 a)
u.d = a;
t = u.u >> 51;
sgn = (DItype) u.u < 0;
+#ifdef ENABLE_DECIMAL_BID_FORMAT
if ((t & (3 << 10)) != (3 << 10))
{
mantissa = u.u & ((((UDItype) 1) << 53) - 1);
@@ -61,6 +65,31 @@ __bid_fixddbitint (UBILtype *r, SItype rprec, _Decimal64 a)
if (mantissa > (UDItype) 9999999999999999)
mantissa = 0;
}
+#else
+ if ((t & (15 << 8)) != (15 << 8))
+ {
+ exponent = (u.u >> 50) & 255;
+ if ((t & (3 << 10)) != (3 << 10))
+ {
+ mantissa = ((t >> 7) & 7) * 1000;
+ exponent += (t >> 2) & (3 << 8);
+ }
+ else
+ {
+ mantissa = ((t >> 7) & 1) ? 9000 : 8000;
+ exponent += t & (3 << 8);
+ }
+ mantissa += __dpd_d2bbitint[(u.u >> 40) & 1023];
+ mantissa *= 1000;
+ mantissa += __dpd_d2bbitint[(u.u >> 30) & 1023];
+ mantissa *= 1000;
+ mantissa += __dpd_d2bbitint[(u.u >> 20) & 1023];
+ mantissa *= 1000;
+ mantissa += __dpd_d2bbitint[(u.u >> 10) & 1023];
+ mantissa *= 1000;
+ mantissa += __dpd_d2bbitint[u.u & 1023];
+ }
+#endif
else
{
FP_SET_EXCEPTION (FP_EX_INVALID
@@ -162,7 +191,7 @@ __bid_fixddbitint (UBILtype *r, SItype rprec, _Decimal64 a)
if (res_limbs + low_zeros > rn && resv[BITINT_END (0, res_limbs - 1)])
goto ovf_ex;
if ((arprec % BIL_TYPE_SIZE) != 0
- && (resv[BITINT_END (rn - res_limbs, rn - 1) - low_zeros]
+ && (resv[BITINT_END (res_limbs + low_zeros - rn, rn - 1 - low_zeros)]
& ((UBILtype) -1 << (arprec % BIL_TYPE_SIZE))) != 0)
goto ovf_ex;
min_limbs = rn - low_zeros;
diff --git a/libgcc/soft-fp/fixddti.c b/libgcc/soft-fp/fixddti.c
index c27ae8b..c7b4ad7 100644
--- a/libgcc/soft-fp/fixddti.c
+++ b/libgcc/soft-fp/fixddti.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal64 to 128bit signed integer.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixddbitint __dpd_fixddbitint
+#define __bid_fixddti __dpd_fixddti
+#endif
extern void __bid_fixddbitint (UBILtype *, SItype, _Decimal64);
extern TItype __bid_fixddti (_Decimal64);
diff --git a/libgcc/soft-fp/fixsdbitint.c b/libgcc/soft-fp/fixsdbitint.c
index 2ba550f..fc117d9 100644
--- a/libgcc/soft-fp/fixsdbitint.c
+++ b/libgcc/soft-fp/fixsdbitint.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal32 to signed or unsigned _BitInt.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#ifdef __BITINT_MAXWIDTH__
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixsdbitint __dpd_fixsdbitint
+#endif
extern void __bid_fixsdbitint (UBILtype *, SItype, _Decimal32);
void
@@ -48,6 +51,7 @@ __bid_fixsdbitint (UBILtype *r, SItype rprec, _Decimal32 a)
u.d = a;
t = u.u >> 21;
sgn = (SItype) u.u < 0;
+#ifdef ENABLE_DECIMAL_BID_FORMAT
if ((t & (3 << 8)) != (3 << 8))
{
mantissa = u.u & ((((USItype) 1) << 23) - 1);
@@ -61,6 +65,25 @@ __bid_fixsdbitint (UBILtype *r, SItype rprec, _Decimal32 a)
if (mantissa > (USItype) 9999999)
mantissa = 0;
}
+#else
+ if ((t & (15 << 6)) != (15 << 6))
+ {
+ exponent = (u.u >> 20) & 63;
+ if ((t & (3 << 8)) != (3 << 8))
+ {
+ mantissa = ((t >> 5) & 7) * 1000;
+ exponent += (t >> 2) & (3 << 6);
+ }
+ else
+ {
+ mantissa = ((t >> 5) & 1) ? 9000 : 8000;
+ exponent += t & (3 << 6);
+ }
+ mantissa += __dpd_d2bbitint[(u.u >> 10) & 1023];
+ mantissa *= 1000;
+ mantissa += __dpd_d2bbitint[u.u & 1023];
+ }
+#endif
else
{
FP_SET_EXCEPTION (FP_EX_INVALID
@@ -153,7 +176,7 @@ __bid_fixsdbitint (UBILtype *r, SItype rprec, _Decimal32 a)
if (res_limbs + low_zeros > rn && resv[BITINT_END (0, res_limbs - 1)])
goto ovf_ex;
if ((arprec % BIL_TYPE_SIZE) != 0
- && (resv[BITINT_END (rn - res_limbs, rn - 1) - low_zeros]
+ && (resv[BITINT_END (res_limbs + low_zeros - rn, rn - 1 - low_zeros)]
& ((UBILtype) -1 << (arprec % BIL_TYPE_SIZE))) != 0)
goto ovf_ex;
min_limbs = rn - low_zeros;
diff --git a/libgcc/soft-fp/fixsdti.c b/libgcc/soft-fp/fixsdti.c
index 8477ace..9a53508 100644
--- a/libgcc/soft-fp/fixsdti.c
+++ b/libgcc/soft-fp/fixsdti.c
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixsdbitint __dpd_fixsdbitint
+#define __bid_fixsdti __dpd_fixsdti
+#endif
extern void __bid_fixsdbitint (UBILtype *, SItype, _Decimal32);
extern TItype __bid_fixsdti (_Decimal32);
diff --git a/libgcc/soft-fp/fixtdbitint.c b/libgcc/soft-fp/fixtdbitint.c
index 66aca1c..a16aaab 100644
--- a/libgcc/soft-fp/fixtdbitint.c
+++ b/libgcc/soft-fp/fixtdbitint.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal128 to signed or unsigned _BitInt.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#ifdef __BITINT_MAXWIDTH__
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixtdbitint __dpd_fixtdbitint
+#endif
extern void __bid_fixtdbitint (UBILtype *, SItype, _Decimal128);
void
@@ -50,6 +53,7 @@ __bid_fixtdbitint (UBILtype *r, SItype rprec, _Decimal128 a)
mantissalo = u.u[__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__];
t = mantissahi >> 47;
sgn = (DItype) mantissahi < 0;
+#ifdef ENABLE_DECIMAL_BID_FORMAT
if ((t & (3 << 14)) != (3 << 14))
{
mantissahi &= ((((UDItype) 1) << 49) - 1);
@@ -68,6 +72,52 @@ __bid_fixtdbitint (UBILtype *r, SItype rprec, _Decimal128 a)
mantissalo = 0;
exponent = t & 0x3fff;
}
+#else
+ if ((t & (15 << 12)) != (15 << 12))
+ {
+ exponent = (mantissahi >> 46) & 4095;
+ if ((t & (3 << 14)) != (3 << 14))
+ {
+ exponent += (t >> 2) & (3 << 12);
+ t = ((t >> 11) & 7) * 1000;
+ }
+ else
+ {
+ exponent += t & (3 << 12);
+ t = ((t >> 11) & 1) ? 9000 : 8000;
+ }
+ t += __dpd_d2bbitint[(mantissahi >> (100 - 64)) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[(mantissahi >> (90 - 64)) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[(mantissahi >> (80 - 64)) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[(mantissahi >> (70 - 64)) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[((mantissahi & 63) << 4)
+ + ((mantissalo >> 60) & 15)];
+ t *= 1000;
+ t += __dpd_d2bbitint[mantissalo >> 50 & 1023];
+#ifdef __SIZEOF_INT128__
+ unsigned __int128 m = t;
+#else
+ unsigned _BitInt(128) m = t;
+#endif
+ m *= 1000000000000000ULL;
+ t = __dpd_d2bbitint[(mantissalo >> 40) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[(mantissalo >> 30) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[(mantissalo >> 20) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[(mantissalo >> 10) & 1023];
+ t *= 1000;
+ t += __dpd_d2bbitint[mantissalo & 1023];
+ m += t;
+ mantissahi = m >> 64;
+ mantissalo = m;
+ }
+#endif
else
{
FP_SET_EXCEPTION (FP_EX_INVALID
@@ -199,7 +249,7 @@ __bid_fixtdbitint (UBILtype *r, SItype rprec, _Decimal128 a)
if (res_limbs + low_zeros > rn && resv[BITINT_END (0, res_limbs - 1)])
goto ovf_ex;
if ((arprec % BIL_TYPE_SIZE) != 0
- && (resv[BITINT_END (rn - res_limbs, rn - 1) - low_zeros]
+ && (resv[BITINT_END (res_limbs + low_zeros - rn, rn - 1 - low_zeros)]
& ((UBILtype) -1 << (arprec % BIL_TYPE_SIZE))) != 0)
goto ovf_ex;
min_limbs = rn - low_zeros;
diff --git a/libgcc/soft-fp/fixtdti.c b/libgcc/soft-fp/fixtdti.c
index 9ac1333..ee26f26 100644
--- a/libgcc/soft-fp/fixtdti.c
+++ b/libgcc/soft-fp/fixtdti.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal128 to 128bit signed integer.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixtdbitint __dpd_fixtdbitint
+#define __bid_fixtdti __dpd_fixtdti
+#endif
extern void __bid_fixtdbitint (UBILtype *, SItype, _Decimal128);
extern TItype __bid_fixtdti (_Decimal128);
diff --git a/libgcc/soft-fp/fixunsddti.c b/libgcc/soft-fp/fixunsddti.c
index 7551e00..b7a4a80 100644
--- a/libgcc/soft-fp/fixunsddti.c
+++ b/libgcc/soft-fp/fixunsddti.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal64 to 128bit unsigned integer.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixddbitint __dpd_fixddbitint
+#define __bid_fixunsddti __dpd_fixunsddti
+#endif
extern void __bid_fixddbitint (UBILtype *, SItype, _Decimal64);
extern UTItype __bid_fixunsddti (_Decimal64);
diff --git a/libgcc/soft-fp/fixunssdti.c b/libgcc/soft-fp/fixunssdti.c
index 8d71b2c..3425c29 100644
--- a/libgcc/soft-fp/fixunssdti.c
+++ b/libgcc/soft-fp/fixunssdti.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal32 to 128bit unsigned integer.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixsdbitint __dpd_fixsdbitint
+#define __bid_fixunssdti __dpd_fixunssdti
+#endif
extern void __bid_fixsdbitint (UBILtype *, SItype, _Decimal32);
extern UTItype __bid_fixunssdti (_Decimal32);
diff --git a/libgcc/soft-fp/fixunstdti.c b/libgcc/soft-fp/fixunstdti.c
index 41ae974..d63ec2b 100644
--- a/libgcc/soft-fp/fixunstdti.c
+++ b/libgcc/soft-fp/fixunstdti.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert _Decimal128 to 128bit unsigned integer.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_fixtdbitint __dpd_fixtdbitint
+#define __bid_fixunstdti __dpd_fixunstdti
+#endif
extern void __bid_fixtdbitint (UBILtype *, SItype, _Decimal128);
extern UTItype __bid_fixunstdti (_Decimal128);
diff --git a/libgcc/soft-fp/floatbitintdd.c b/libgcc/soft-fp/floatbitintdd.c
index 4565572..0547bb5 100644
--- a/libgcc/soft-fp/floatbitintdd.c
+++ b/libgcc/soft-fp/floatbitintdd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a _BitInt to _Decimal64.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#ifdef __BITINT_MAXWIDTH__
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitintdd __dpd_floatbitintdd
+#endif
extern _Decimal64 __bid_floatbitintdd (const UBILtype *, SItype);
_Decimal64
@@ -51,7 +54,11 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
}
if (iprec < 0)
{
- SItype n = sizeof (0ULL) * __CHAR_BIT__ + 1 - __builtin_clzll (~msb);
+ SItype n;
+ if (msb == ~(UBILtype) 0)
+ n = 1;
+ else
+ n = sizeof (0ULL) * __CHAR_BIT__ + 1 - __builtin_clzll (~msb);
aiprec = (in - 1) * BIL_TYPE_SIZE + n;
}
else if (msb == 0)
@@ -118,7 +125,8 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
}
else
{
- __builtin_memcpy (buf + BITINT_END (q_limbs - in + 1, 0), i,
+ __builtin_memcpy (buf + BITINT_END (q_limbs - in + 1, 0),
+ i + BITINT_END (1, 0),
(in - 1) * sizeof (UBILtype));
buf[BITINT_END (q_limbs - in, in - 1)] = msb;
if (iprec < 0)
@@ -239,6 +247,7 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
}
exponent += 398;
+#ifdef ENABLE_DECIMAL_BID_FORMAT
if (mantissa >= (UDItype) 0x20000000000000)
u.u = (((((iprec < 0) << 2) | (UDItype) 3) << 61)
| (((UDItype) exponent) << 51)
@@ -247,10 +256,40 @@ __bid_floatbitintdd (const UBILtype *i, SItype iprec)
u.u = ((((UDItype) (iprec < 0)) << 63)
| (((UDItype) exponent) << 53)
| mantissa);
+#else
+ u.u = mantissa;
+ mantissa = __dpd_b2dbitint[u.u % 1000];
+ u.u /= 1000;
+ mantissa |= ((UDItype) __dpd_b2dbitint[u.u % 1000]) << 10;
+ u.u /= 1000;
+ mantissa |= ((UDItype) __dpd_b2dbitint[u.u % 1000]) << 20;
+ u.u /= 1000;
+ mantissa |= ((UDItype) __dpd_b2dbitint[u.u % 1000]) << 30;
+ u.u /= 1000;
+ mantissa |= ((UDItype) __dpd_b2dbitint[u.u % 1000]) << 40;
+ u.u /= 1000;
+ if (u.u >= 8)
+ u.u = (((((iprec < 0) << 2) | (UDItype) 3) << 61)
+ | (((UDItype) exponent & (3 << 8)) << 51)
+ | ((u.u & 1) << 58)
+ | (((UDItype) exponent & 255) << 50)
+ | mantissa);
+ else
+ u.u = ((((UDItype) (iprec < 0)) << 63)
+ | (((UDItype) exponent & (3 << 8)) << 53)
+ | (u.u << 58)
+ | (((UDItype) exponent & 255) << 50)
+ | mantissa);
+#endif
if (inexact)
{
ui.u = ((((UDItype) (iprec < 0)) << 63)
+#ifdef ENABLE_DECIMAL_BID_FORMAT
| (((UDItype) (exponent - 1)) << 53)
+#else
+ | (((UDItype) (exponent - 1) & (3 << 8)) << 53)
+ | (((UDItype) (exponent - 1) & 255) << 50)
+#endif
| (inexact + 3));
__asm ("" : "+g" (u.d));
__asm ("" : "+g" (ui.d));
diff --git a/libgcc/soft-fp/floatbitintsd.c b/libgcc/soft-fp/floatbitintsd.c
index 4901aa8..915f46c 100644
--- a/libgcc/soft-fp/floatbitintsd.c
+++ b/libgcc/soft-fp/floatbitintsd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a _BitInt to _Decimal32.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#ifdef __BITINT_MAXWIDTH__
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitintsd __dpd_floatbitintsd
+#endif
extern _Decimal32 __bid_floatbitintsd (const UBILtype *, SItype);
_Decimal32
@@ -51,7 +54,11 @@ __bid_floatbitintsd (const UBILtype *i, SItype iprec)
}
if (iprec < 0)
{
- SItype n = sizeof (0ULL) * __CHAR_BIT__ + 1 - __builtin_clzll (~msb);
+ SItype n;
+ if (msb == ~(UBILtype) 0)
+ n = 1;
+ else
+ n = sizeof (0ULL) * __CHAR_BIT__ + 1 - __builtin_clzll (~msb);
aiprec = (in - 1) * BIL_TYPE_SIZE + n;
}
else if (msb == 0)
@@ -117,7 +124,8 @@ __bid_floatbitintsd (const UBILtype *i, SItype iprec)
}
else
{
- __builtin_memcpy (buf + BITINT_END (q_limbs - in + 1, 0), i,
+ __builtin_memcpy (buf + BITINT_END (q_limbs - in + 1, 0),
+ i + BITINT_END (1, 0),
(in - 1) * sizeof (UBILtype));
buf[BITINT_END (q_limbs - in, in - 1)] = msb;
if (iprec < 0)
@@ -210,6 +218,7 @@ __bid_floatbitintsd (const UBILtype *i, SItype iprec)
}
exponent += 101;
+#ifdef ENABLE_DECIMAL_BID_FORMAT
if (mantissa >= (USItype) 0x800000)
u.u = (((((iprec < 0) << 2) | (USItype) 3) << 29)
| (((USItype) exponent) << 21)
@@ -218,10 +227,34 @@ __bid_floatbitintsd (const UBILtype *i, SItype iprec)
u.u = ((((USItype) (iprec < 0)) << 31)
| (((USItype) exponent) << 23)
| mantissa);
+#else
+ u.u = mantissa;
+ mantissa = __dpd_b2dbitint[u.u % 1000];
+ u.u /= 1000;
+ mantissa |= ((USItype) __dpd_b2dbitint[u.u % 1000]) << 10;
+ u.u /= 1000;
+ if (u.u >= 8)
+ u.u = (((((iprec < 0) << 2) | (USItype) 3) << 29)
+ | (((USItype) exponent & (3 << 6)) << 21)
+ | ((u.u & 1) << 26)
+ | (((USItype) exponent & 63) << 20)
+ | mantissa);
+ else
+ u.u = ((((USItype) (iprec < 0)) << 31)
+ | (((USItype) exponent & (3 << 6)) << 23)
+ | (u.u << 26)
+ | (((USItype) exponent & 63) << 20)
+ | mantissa);
+#endif
if (inexact)
{
ui.u = ((((USItype) (iprec < 0)) << 31)
+#ifdef ENABLE_DECIMAL_BID_FORMAT
| (((USItype) (exponent - 1)) << 23)
+#else
+ | (((USItype) (exponent - 1) & (3 << 6)) << 23)
+ | (((USItype) (exponent - 1) & 63) << 20)
+#endif
| (inexact + 3));
__asm ("" : "+g" (u.d));
__asm ("" : "+g" (ui.d));
diff --git a/libgcc/soft-fp/floatbitinttd.c b/libgcc/soft-fp/floatbitinttd.c
index 5fff339..50b9e77 100644
--- a/libgcc/soft-fp/floatbitinttd.c
+++ b/libgcc/soft-fp/floatbitinttd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a _BitInt to _Decimal128.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#ifdef __BITINT_MAXWIDTH__
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitinttd __dpd_floatbitinttd
+#endif
extern _Decimal128 __bid_floatbitinttd (const UBILtype *, SItype);
_Decimal128
@@ -51,7 +54,11 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec)
}
if (iprec < 0)
{
- SItype n = sizeof (0ULL) * __CHAR_BIT__ + 1 - __builtin_clzll (~msb);
+ SItype n;
+ if (msb == ~(UBILtype) 0)
+ n = 1;
+ else
+ n = sizeof (0ULL) * __CHAR_BIT__ + 1 - __builtin_clzll (~msb);
aiprec = (in - 1) * BIL_TYPE_SIZE + n;
}
else if (msb == 0)
@@ -117,7 +124,8 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec)
}
else
{
- __builtin_memcpy (buf + BITINT_END (q_limbs - in + 1, 0), i,
+ __builtin_memcpy (buf + BITINT_END (q_limbs - in + 1, 0),
+ i + BITINT_END (1, 0),
(in - 1) * sizeof (UBILtype));
buf[BITINT_END (q_limbs - in, in - 1)] = msb;
if (iprec < 0)
@@ -253,15 +261,69 @@ __bid_floatbitinttd (const UBILtype *i, SItype iprec)
}
exponent += 6176;
+#ifdef ENABLE_DECIMAL_BID_FORMAT
u.u[__FLOAT_WORD_ORDER__ != __ORDER_BIG_ENDIAN__]
= ((((UDItype) (iprec < 0)) << 63)
| (((UDItype) exponent) << 49)
| mantissahi);
+#else
+#ifdef __SIZEOF_INT128__
+ unsigned __int128 m = mantissahi;
+#else
+ unsigned _BitInt(128) m = mantissahi;
+#endif
+ m = (m << 64) | mantissalo;
+ u.u[0] = m / 1000000000000000ULL;
+ u.u[1] = m % 1000000000000000ULL;
+ mantissalo = __dpd_b2dbitint[u.u[1] % 1000];
+ u.u[1] /= 1000;
+ mantissalo |= ((UDItype) __dpd_b2dbitint[u.u[1] % 1000]) << 10;
+ u.u[1] /= 1000;
+ mantissalo |= ((UDItype) __dpd_b2dbitint[u.u[1] % 1000]) << 20;
+ u.u[1] /= 1000;
+ mantissalo |= ((UDItype) __dpd_b2dbitint[u.u[1] % 1000]) << 30;
+ u.u[1] /= 1000;
+ mantissalo |= ((UDItype) __dpd_b2dbitint[u.u[1] % 1000]) << 40;
+ mantissalo |= ((UDItype) __dpd_b2dbitint[u.u[0] % 1000]) << 50;
+ u.u[0] /= 1000;
+ mantissahi = __dpd_b2dbitint[u.u[0] % 1000];
+ u.u[0] /= 1000;
+ mantissalo |= mantissahi << 60;
+ mantissahi >>= 4;
+ mantissahi |= ((UDItype) __dpd_b2dbitint[u.u[0] % 1000]) << 6;
+ u.u[0] /= 1000;
+ mantissahi |= ((UDItype) __dpd_b2dbitint[u.u[0] % 1000]) << 16;
+ u.u[0] /= 1000;
+ mantissahi |= ((UDItype) __dpd_b2dbitint[u.u[0] % 1000]) << 26;
+ u.u[0] /= 1000;
+ mantissahi |= ((UDItype) __dpd_b2dbitint[u.u[0] % 1000]) << 36;
+ u.u[0] /= 1000;
+ if (u.u[0] >= 8)
+ u.u[__FLOAT_WORD_ORDER__ != __ORDER_BIG_ENDIAN__]
+ = (((((iprec < 0) << 2) | (UDItype) 3) << 61)
+ | (((UDItype) exponent & (3 << 12)) << 47)
+ | ((u.u[0] & 1) << 58)
+ | (((UDItype) exponent & 4095) << 46)
+ | mantissahi);
+ else
+ u.u[__FLOAT_WORD_ORDER__ != __ORDER_BIG_ENDIAN__]
+ = ((((UDItype) (iprec < 0)) << 63)
+ | (((UDItype) exponent & (3 << 12)) << 49)
+ | (u.u[0] << 58)
+ | (((UDItype) exponent & 4095) << 46)
+ | mantissahi);
+#endif
u.u[__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__] = mantissalo;
if (inexact)
{
ui.u[__FLOAT_WORD_ORDER__ != __ORDER_BIG_ENDIAN__]
+#ifdef ENABLE_DECIMAL_BID_FORMAT
= (((UDItype) (iprec < 0)) << 63) | (((UDItype) exponent - 1) << 49);
+#else
+ = ((((UDItype) (iprec < 0)) << 63)
+ | ((((UDItype) exponent - 1) & (3 << 12)) << 49)
+ | ((((UDItype) exponent - 1) & 4095) << 46));
+#endif
ui.u[__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__] = inexact + 3;
__asm ("" : "+g" (u.d));
__asm ("" : "+g" (ui.d));
diff --git a/libgcc/soft-fp/floattidd.c b/libgcc/soft-fp/floattidd.c
index 31ad9d0..c4e569d 100644
--- a/libgcc/soft-fp/floattidd.c
+++ b/libgcc/soft-fp/floattidd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a 128bit signed integer to _Decimal64.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitintdd __dpd_floatbitintdd
+#define __bid_floattidd __dpd_floattidd
+#endif
extern _Decimal64 __bid_floatbitintdd (const UBILtype *, SItype);
extern _Decimal64 __bid_floattidd (TItype);
diff --git a/libgcc/soft-fp/floattisd.c b/libgcc/soft-fp/floattisd.c
index 37a24a3..641c32a 100644
--- a/libgcc/soft-fp/floattisd.c
+++ b/libgcc/soft-fp/floattisd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a 128bit signed integer to _Decimal32.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitintsd __dpd_floatbitintsd
+#define __bid_floattisd __dpd_floattisd
+#endif
extern _Decimal32 __bid_floatbitintsd (const UBILtype *, SItype);
extern _Decimal32 __bid_floattisd (TItype);
diff --git a/libgcc/soft-fp/floattitd.c b/libgcc/soft-fp/floattitd.c
index edc0b37..9d10ed7 100644
--- a/libgcc/soft-fp/floattitd.c
+++ b/libgcc/soft-fp/floattitd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a 128bit signed integer to _Decimal128.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitinttd __dpd_floatbitinttd
+#define __bid_floattitd __dpd_floattitd
+#endif
extern _Decimal128 __bid_floatbitinttd (const UBILtype *, SItype);
extern _Decimal128 __bid_floattitd (TItype);
diff --git a/libgcc/soft-fp/floatuntidd.c b/libgcc/soft-fp/floatuntidd.c
index ea4108f..f977400 100644
--- a/libgcc/soft-fp/floatuntidd.c
+++ b/libgcc/soft-fp/floatuntidd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a 128bit unsigned integer to _Decimal64.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitintdd __dpd_floatbitintdd
+#define __bid_floatunstidd __dpd_floatunstidd
+#endif
extern _Decimal64 __bid_floatbitintdd (const UBILtype *, SItype);
extern _Decimal64 __bid_floatunstidd (UTItype);
diff --git a/libgcc/soft-fp/floatuntisd.c b/libgcc/soft-fp/floatuntisd.c
index d907353e..cc00d83 100644
--- a/libgcc/soft-fp/floatuntisd.c
+++ b/libgcc/soft-fp/floatuntisd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a 128bit unsigned integer to _Decimal32.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitintsd __dpd_floatbitintsd
+#define __bid_floatunstisd __dpd_floatunstisd
+#endif
extern _Decimal32 __bid_floatbitintsd (const UBILtype *, SItype);
extern _Decimal32 __bid_floatunstisd (UTItype);
diff --git a/libgcc/soft-fp/floatuntitd.c b/libgcc/soft-fp/floatuntitd.c
index 5731f2a..551166e 100644
--- a/libgcc/soft-fp/floatuntitd.c
+++ b/libgcc/soft-fp/floatuntitd.c
@@ -1,7 +1,7 @@
/* Software floating-point emulation.
Convert a 128bit unsigned integer to _Decimal128.
- Copyright (C) 2023 Free Software Foundation, Inc.
+ Copyright (C) 2023-2025 Free Software Foundation, Inc.
This file is part of GCC.
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "bitint.h"
#if defined(__BITINT_MAXWIDTH__) && defined(__SIZEOF_INT128__)
+#ifndef ENABLE_DECIMAL_BID_FORMAT
+#define __bid_floatbitinttd __dpd_floatbitinttd
+#define __bid_floatunstitd __dpd_floatunstitd
+#endif
extern _Decimal128 __bid_floatbitinttd (const UBILtype *, SItype);
extern _Decimal128 __bid_floatunstitd (UTItype);
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index ecf84ff..4aab62b 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,9 @@
+2025-05-28 Tobias Burnus <tburnus@baylibre.com>
+
+ PR middle-end/118694
+ * testsuite/libgomp.fortran/metadirective-1.f90: xfail when
+ compiling (also) for nvptx offloading as an error is then expected.
+
2025-05-23 Tobias Burnus <tburnus@baylibre.com>
PR middle-end/118694
diff --git a/libgomp/testsuite/libgomp.fortran/metadirective-1.f90 b/libgomp/testsuite/libgomp.fortran/metadirective-1.f90
index 7b3e09f..d6f4d5b 100644
--- a/libgomp/testsuite/libgomp.fortran/metadirective-1.f90
+++ b/libgomp/testsuite/libgomp.fortran/metadirective-1.f90
@@ -1,4 +1,5 @@
-! { dg-do run }
+! { dg-do run { target { ! offload_target_nvptx } } }
+! { dg-do compile { target offload_target_nvptx } }
program test
implicit none
@@ -33,6 +34,10 @@ program test
contains
subroutine f (x, y, z)
integer :: x(N), y(N), z(N)
+ ! The following fails as on the host the target side cannot be
+ ! resolved - and the 'teams' or not status affects how 'target'
+ ! is called. -> See PR118694, esp. comment 9.
+ ! Note also the dg-do compile above for offload_target_nvptx
!$omp target map (to: x, y) map(from: z)
block
@@ -43,6 +48,7 @@ contains
z(i) = x(i) * y(i)
enddo
end block
+ ! { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_target_nvptx } .-9 } */
end subroutine
subroutine g (x, y, z)
integer :: x(N), y(N), z(N)
@@ -56,6 +62,7 @@ contains
z(i) = x(i) * y(i)
enddo
end block
+ ! { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_target_nvptx } .-9 } */
!$omp end target
end subroutine
end program
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 0c2b698..ba4a398 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,99 @@
+2025-05-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/17_intro/names.cc [_AIX] (n): Undefine.
+ * testsuite/experimental/names.cc [_AIX] (ptr): Undefine.
+
+2025-05-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/std/format/debug.cc: Disable for targets with 16-bit
+ wchar_t.
+ * testsuite/std/format/functions/format.cc: Use -DUNICODE for
+ targets with 32-bit wchar_t.
+ (test_unicode) [UNICODE]: Only run checks when UNICODE is
+ defined.
+
+2025-05-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/Makefile.in: Regenerate.
+
+2025-05-27 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/96710
+ * include/bits/std_abs.h [__SIZEOF_INT128__] (abs(__int128)):
+ Define.
+ [_GLIBCXX_USE_FLOAT128] (abs(__float128)): Enable definition for
+ strict modes.
+ * testsuite/26_numerics/headers/cmath/82644.cc: Use strict_std
+ instead of defining __STRICT_ANSI__.
+ * testsuite/26_numerics/headers/cstdlib/abs128.cc: New test.
+
+2025-05-27 Luc Grosheintz <luc.grosheintz@gmail.com>
+
+ * include/std/mdspan: Value initialize the array storing the
+ dynamic extents.
+ * testsuite/23_containers/mdspan/extents/ctor_default.cc: New
+ test.
+
+2025-05-26 Tomasz Kamiński <tkaminsk@redhat.com>
+
+ PR libstdc++/119152
+ * testsuite/std/memory/indirect/ctor.cc: Run test_inplace_ctor.
+
+2025-05-26 Jonathan Wakely <jwakely@redhat.com>
+ Tomasz Kamiński <tkaminsk@redhat.com>
+
+ PR libstdc++/119152
+ * doc/doxygen/stdheader.cc: Added indirect.h file.
+ * include/Makefile.am: Add new header.
+ * include/Makefile.in: Regenerate.
+ * include/bits/indirect.h: New file.
+ * include/bits/version.def (indirect): Define.
+ * include/bits/version.h: Regenerate.
+ * include/std/memory: Include new header.
+ * testsuite/std/memory/indirect/copy.cc
+ * testsuite/std/memory/indirect/copy_alloc.cc
+ * testsuite/std/memory/indirect/ctor.cc
+ * testsuite/std/memory/indirect/incomplete.cc
+ * testsuite/std/memory/indirect/invalid_neg.cc
+ * testsuite/std/memory/indirect/move.cc
+ * testsuite/std/memory/indirect/move_alloc.cc
+ * testsuite/std/memory/indirect/relops.cc
+
+2025-05-26 Tomasz Kamiński <tkaminsk@redhat.com>
+
+ PR libstdc++/119126
+ * doc/doxygen/stdheader.cc: Added funcref_impl.h file.
+ * include/Makefile.am: Added funcref_impl.h file.
+ * include/Makefile.in: Added funcref_impl.h file.
+ * include/bits/funcref_impl.h: New file.
+ * include/bits/funcwrap.h: (_Ptrs::_M_obj): Const-qualify.
+ (_Storage::_M_ptr, _Storage::_M_ref): Remove.
+ (__polyfunc::__cast_to) Define.
+ (_Base_invoker::_S_ptrs, _Base_invoker::_S_nttp)
+ (_Base_invoker::_S_bind_ptrs, _Base_invoker::_S_bind_ref)
+ (_Base_invoker::_S_call_ptrs): Define.
+ (_Base_invoker::_S_call_storage): Foward to _S_call_ptrs.
+ (_Manager::_S_local, _Manager::_S_ptr): Adjust for _M_obj being
+ const qualified.
+ (__polyfunc::_Manager, __polyfunc::_Mo_base): Guard with
+ __glibcxx_move_only_function || __glibcxx_copyable_function.
+ (__polyfunc::__skip_first_arg, __polyfunc::__deduce_funcref)
+ (std::function_ref) [__glibcxx_function_ref]: Define.
+ * include/bits/utility.h (std::nontype_t, std::nontype)
+ (__is_nontype_v) [__glibcxx_function_ref]: Define.
+ * include/bits/version.def: Define function_ref.
+ * include/bits/version.h: Regenerate.
+ * include/std/functional: Define __cpp_lib_function_ref.
+ * src/c++23/std.cc.in (std::nontype_t, std::nontype)
+ (std::function_ref) [__cpp_lib_function_ref]: Export.
+ * testsuite/20_util/function_ref/assign.cc: New test.
+ * testsuite/20_util/function_ref/call.cc: New test.
+ * testsuite/20_util/function_ref/cons.cc: New test.
+ * testsuite/20_util/function_ref/cons_neg.cc: New test.
+ * testsuite/20_util/function_ref/conv.cc: New test.
+ * testsuite/20_util/function_ref/deduction.cc: New test.
+ * testsuite/20_util/function_ref/mutation.cc: New test.
+
2025-05-23 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/120384
diff --git a/libstdc++-v3/doc/doxygen/stdheader.cc b/libstdc++-v3/doc/doxygen/stdheader.cc
index 839bfc8..cb5d17a 100644
--- a/libstdc++-v3/doc/doxygen/stdheader.cc
+++ b/libstdc++-v3/doc/doxygen/stdheader.cc
@@ -55,6 +55,7 @@ void init_map()
headers["functional_hash.h"] = "functional";
headers["mofunc_impl.h"] = "functional";
headers["cpyfunc_impl.h"] = "functional";
+ headers["funcref_impl.h"] = "functional";
headers["funcwrap.h"] = "functional";
headers["invoke.h"] = "functional";
headers["ranges_cmp.h"] = "functional";
@@ -105,6 +106,7 @@ void init_map()
headers["uses_allocator.h"] = "memory";
headers["uses_allocator_args.h"] = "memory";
headers["out_ptr.h"] = "memory";
+ headers["indirect.h"] = "memory";
headers["memory_resource.h"] = "memory_resource";
headers["unique_lock.h"] = "mutex";
headers["sat_arith.h"] = "numeric";
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 3e5b6c4..cc402f0 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -205,11 +205,13 @@ bits_headers = \
${bits_srcdir}/fs_ops.h \
${bits_srcdir}/fs_path.h \
${bits_srcdir}/fstream.tcc \
+ ${bits_srcdir}/funcref_impl.h \
${bits_srcdir}/funcwrap.h \
${bits_srcdir}/gslice.h \
${bits_srcdir}/gslice_array.h \
${bits_srcdir}/hashtable.h \
${bits_srcdir}/hashtable_policy.h \
+ ${bits_srcdir}/indirect.h \
${bits_srcdir}/indirect_array.h \
${bits_srcdir}/ios_base.h \
${bits_srcdir}/istream.tcc \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 3531162..0ef8564 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -558,11 +558,13 @@ bits_freestanding = \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/fs_ops.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/fs_path.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/fstream.tcc \
+@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/funcref_impl.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/funcwrap.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/gslice.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/gslice_array.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hashtable.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hashtable_policy.h \
+@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/indirect.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/indirect_array.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/ios_base.h \
@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/istream.tcc \
diff --git a/libstdc++-v3/include/bits/funcref_impl.h b/libstdc++-v3/include/bits/funcref_impl.h
new file mode 100644
index 0000000..1e19866
--- /dev/null
+++ b/libstdc++-v3/include/bits/funcref_impl.h
@@ -0,0 +1,198 @@
+// Implementation of std::function_ref -*- C++ -*-
+
+// Copyright The GNU Toolchain Authors.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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.
+
+// 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
+// <http://www.gnu.org/licenses/>.
+
+/** @file include/bits/funcref_impl.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{functional}
+ */
+
+#ifndef _GLIBCXX_MOF_CV
+# define _GLIBCXX_MOF_CV
+#endif
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /// @cond undocumented
+ namespace __polyfunc
+ {
+ template<bool _Noex, typename _Ret, typename _Class, typename... _Args>
+ struct __skip_first_arg<_Ret(_Class::*)(_Args...) _GLIBCXX_MOF_CV
+ noexcept(_Noex)>
+ { using type = _Ret(_Args...) noexcept(_Noex); };
+
+ template<bool _Noex, typename _Ret, typename _Class, typename... _Args>
+ struct __skip_first_arg<_Ret(_Class::*)(_Args...) _GLIBCXX_MOF_CV&
+ noexcept(_Noex)>
+ { using type = _Ret(_Args...) noexcept(_Noex); };
+ } // namespace __polyfunc
+ /// @endcond
+
+ /**
+ * @brief Non-owning polymorphic function wrapper.
+ * @ingroup functors
+ * @since C++26
+ * @headerfile functional
+ *
+ * The `std::function_ref` class template is a non-owning call wrapper,
+ * that refers to a bound object. Using function_ref outside of the lifetime
+ * of the bound object has undefined behavior.
+ *
+ * It supports const-qualification and no-throw guarantees. The
+ * qualifications and exception-specification of the signature are respected
+ * when invoking the reference function.
+ */
+ template<typename _Res, typename... _ArgTypes, bool _Noex>
+ class function_ref<_Res(_ArgTypes...) _GLIBCXX_MOF_CV
+ noexcept(_Noex)>
+ {
+ using _Invoker = __polyfunc::_Invoker<_Noex, _Res, _ArgTypes...>;
+ using _Signature = _Invoker::_Signature;
+
+ // [func.wrap.ref.ctor]/1 is-invokable-using
+ template<typename... _Tps>
+ static constexpr bool __is_invocable_using
+ = __conditional_t<_Noex,
+ is_nothrow_invocable_r<_Res, _Tps..., _ArgTypes...>,
+ is_invocable_r<_Res, _Tps..., _ArgTypes...>>::value;
+
+ public:
+ /// Target and bound object is function pointed by parameter.
+ template<typename _Fn>
+ requires is_function_v<_Fn> && __is_invocable_using<_Fn*>
+ function_ref(_Fn* __fn) noexcept
+ {
+ __glibcxx_assert(__fn != nullptr);
+ _M_invoke = _Invoker::template _S_ptrs<_Fn*>();
+ _M_init(__fn);
+ }
+
+ /// Target and bound object is object referenced by parameter.
+ template<typename _Fn, typename _Vt = remove_reference_t<_Fn>>
+ requires (!is_same_v<remove_cv_t<_Vt>, function_ref>)
+ && (!is_member_pointer_v<_Vt>)
+ // We deviate from standard by having this condition, that forces
+ // function references to use _Fn* constructors. This simplies
+ // implementation and provide better diagnostic when used in
+ // constant expression (above constructor is not constexpr).
+ && (!is_function_v<_Vt>)
+ && __is_invocable_using<_Vt _GLIBCXX_MOF_CV&>
+ constexpr
+ function_ref(_Fn&& __f) noexcept
+ {
+ _M_invoke = _Invoker::template _S_ptrs<_Vt _GLIBCXX_MOF_CV&>();
+ _M_init(std::addressof(__f));
+ }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4256. Incorrect constrains for function_ref constructors from nontype
+ /// Target object is __fn. There is no bound object.
+ template<auto __fn>
+ requires __is_invocable_using<const decltype(__fn)&>
+ constexpr
+ function_ref(nontype_t<__fn>) noexcept
+ {
+ using _Fn = remove_cv_t<decltype(__fn)>;
+ if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>)
+ static_assert(__fn != nullptr);
+
+ _M_invoke = &_Invoker::template _S_nttp<__fn>;
+ _M_ptrs._M_obj = nullptr;
+ }
+
+ /// Target object is equivalent to std::bind_front<_fn>(std::ref(__ref)).
+ /// Bound object is object referenced by second parameter.
+ template<auto __fn, typename _Up, typename _Td = remove_reference_t<_Up>>
+ requires (!is_rvalue_reference_v<_Up&&>)
+ && __is_invocable_using<const decltype(__fn)&, _Td _GLIBCXX_MOF_CV&>
+ constexpr
+ function_ref(nontype_t<__fn>, _Up&& __ref) noexcept
+ {
+ using _Fn = remove_cv_t<decltype(__fn)>;
+ if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>)
+ static_assert(__fn != nullptr);
+
+ using _Tr = _Td _GLIBCXX_MOF_CV&;
+ if constexpr (is_member_pointer_v<_Fn> && is_lvalue_reference_v<_Tr>)
+ // N.B. invoking member pointer on lvalue produces the same effects,
+ // as invoking it on pointer to that lvalue.
+ _M_invoke = &_Invoker::template _S_bind_ptr<__fn, _Td _GLIBCXX_MOF_CV>;
+ else
+ _M_invoke = &_Invoker::template _S_bind_ref<__fn, _Tr>;
+ _M_init(std::addressof(__ref));
+ }
+
+ /// Target object is equivalent to std::bind_front<_fn>(__ptr).
+ /// Bound object is object pointed by second parameter (if any).
+ template<auto __fn, typename _Td>
+ requires __is_invocable_using<const decltype(__fn)&, _Td _GLIBCXX_MOF_CV*>
+ constexpr
+ function_ref(nontype_t<__fn>, _Td _GLIBCXX_MOF_CV* __ptr) noexcept
+ {
+ using _Fn = remove_cv_t<decltype(__fn)>;
+ if constexpr (is_pointer_v<_Fn> || is_member_pointer_v<_Fn>)
+ static_assert(__fn != nullptr);
+ if constexpr (is_member_pointer_v<_Fn>)
+ __glibcxx_assert(__ptr != nullptr);
+
+ _M_invoke = &_Invoker::template _S_bind_ptr<__fn, _Td _GLIBCXX_MOF_CV>;
+ _M_init(__ptr);
+ }
+
+ template<typename _Tp>
+ requires (!is_same_v<_Tp, function_ref>)
+ && (!is_pointer_v<_Tp>) && (!__is_nontype_v<_Tp>)
+ function_ref&
+ operator=(_Tp) = delete;
+
+ /** Invoke the target object.
+ *
+ * The bound object will be invoked using the supplied arguments,
+ * and as const or non-const, as dictated by the template arguments
+ * of the `function_ref` specialization.
+ */
+ _Res
+ operator()(_ArgTypes... __args) const noexcept(_Noex)
+ { return _M_invoke(_M_ptrs, std::forward<_ArgTypes>(__args)...); }
+
+ private:
+ template<typename _Tp>
+ constexpr void
+ _M_init(_Tp* __ptr) noexcept
+ {
+ if constexpr (is_function_v<_Tp>)
+ _M_ptrs._M_func = reinterpret_cast<void(*)()>(__ptr);
+ else
+ _M_ptrs._M_obj = __ptr;
+ }
+
+ typename _Invoker::__ptrs_func_t _M_invoke;
+ __polyfunc::_Ptrs _M_ptrs;
+ };
+
+#undef _GLIBCXX_MOF_CV
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
diff --git a/libstdc++-v3/include/bits/funcwrap.h b/libstdc++-v3/include/bits/funcwrap.h
index 4e05353..cf261bc 100644
--- a/libstdc++-v3/include/bits/funcwrap.h
+++ b/libstdc++-v3/include/bits/funcwrap.h
@@ -1,4 +1,5 @@
-// Implementation of std::move_only_function and std::copyable_function -*- C++ -*-
+// Implementation of std::move_only_function, std::copyable_function
+// and std::function_ref -*- C++ -*-
// Copyright The GNU Toolchain Authors.
//
@@ -36,7 +37,7 @@
#include <bits/version.h>
-#if defined(__glibcxx_move_only_function) || defined(__glibcxx_copyable_function)
+#if __glibcxx_move_only_function || __glibcxx_copyable_function || __glibcxx_function_ref
#include <bits/invoke.h>
#include <bits/utility.h>
@@ -53,10 +54,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
union _Ptrs
{
- void* _M_obj;
+ const void* _M_obj;
void (*_M_func)();
};
+ template<typename _Tp>
+ [[__gnu__::__always_inline__]]
+ constexpr auto*
+ __cast_to(_Ptrs __ptrs) noexcept
+ {
+ using _Td = remove_reference_t<_Tp>;
+ if constexpr (is_function_v<_Td>)
+ return reinterpret_cast<_Td*>(__ptrs._M_func);
+ else if constexpr (is_const_v<_Td>)
+ return static_cast<_Td*>(__ptrs._M_obj);
+ else
+ return static_cast<_Td*>(const_cast<void*>(__ptrs._M_obj));
+ }
+
struct _Storage
{
void* _M_addr() noexcept { return &_M_bytes[0]; }
@@ -97,32 +112,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
::new (_M_addr()) _Tp(std::forward<_Args>(__args)...);
}
- template<typename _Tp>
- [[__gnu__::__always_inline__]]
- _Tp*
- _M_ptr() const noexcept
- {
- if constexpr (!_S_stored_locally<remove_const_t<_Tp>>())
- return static_cast<_Tp*>(_M_ptrs._M_obj);
- else if constexpr (is_const_v<_Tp>)
- return static_cast<_Tp*>(_M_addr());
- else
- // _Manager and _Invoker pass _Storage by const&, even for mutable sources.
- return static_cast<_Tp*>(const_cast<void*>(_M_addr()));
- }
-
- template<typename _Ref>
- [[__gnu__::__always_inline__]]
- _Ref
- _M_ref() const noexcept
- {
- using _Tp = remove_reference_t<_Ref>;
- if constexpr (is_function_v<remove_pointer_t<_Tp>>)
- return reinterpret_cast<_Tp>(_M_ptrs._M_func);
- else
- return static_cast<_Ref>(*_M_ptr<_Tp>());
- }
-
// We want to have enough space to store a simple delegate type.
struct _Delegate { void (_Storage::*__pfm)(); _Storage* __obj; };
union {
@@ -143,6 +132,37 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_storage()
{ return &_S_call_storage<_Adjust_target<_Tp>>; }
+ using __ptrs_func_t = _Ret(*)(_Ptrs, _Args...) noexcept(_Noex);
+ template<typename _Tp>
+ static consteval __ptrs_func_t
+ _S_ptrs()
+ { return &_S_call_ptrs<_Adjust_target<_Tp>>; }
+
+#ifdef __glibcxx_function_ref // C++ >= 26
+ template<auto __fn>
+ static _Ret
+ _S_nttp(_Ptrs, _Args... __args) noexcept(_Noex)
+ { return std::__invoke_r<_Ret>(__fn, std::forward<_Args>(__args)...); }
+
+ template<auto __fn, typename _Tp>
+ static _Ret
+ _S_bind_ptr(_Ptrs __ptrs, _Args... __args) noexcept(_Noex)
+ {
+ auto* __p = __polyfunc::__cast_to<_Tp>(__ptrs);
+ return std::__invoke_r<_Ret>(__fn, __p,
+ std::forward<_Args>(__args)...);
+ }
+
+ template<auto __fn, typename _Ref>
+ static _Ret
+ _S_bind_ref(_Ptrs __ptrs, _Args... __args) noexcept(_Noex)
+ {
+ auto* __p = __polyfunc::__cast_to<_Ref>(__ptrs);
+ return std::__invoke_r<_Ret>(__fn, static_cast<_Ref>(*__p),
+ std::forward<_Args>(__args)...);
+ }
+#endif // __glibcxx_function_ref
+
private:
template<typename _Tp, typename _Td = remove_cvref_t<_Tp>>
using _Adjust_target =
@@ -152,8 +172,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static _Ret
_S_call_storage(const _Storage& __ref, _Args... __args) noexcept(_Noex)
{
- return std::__invoke_r<_Ret>(__ref._M_ref<_Tp>(),
- std::forward<_Args>(__args)...);
+ _Ptrs __ptrs;
+ if constexpr (is_function_v<remove_pointer_t<_Tp>>)
+ __ptrs._M_func = __ref._M_ptrs._M_func;
+ else if constexpr (!_Storage::_S_stored_locally<remove_cvref_t<_Tp>>())
+ __ptrs._M_obj = __ref._M_ptrs._M_obj;
+ else
+ __ptrs._M_obj = __ref._M_addr();
+ return _S_call_ptrs<_Tp>(__ptrs, std::forward<_Args>(__args)...);
+ }
+
+ template<typename _Tp>
+ static _Ret
+ _S_call_ptrs(_Ptrs __ptrs, _Args... __args) noexcept(_Noex)
+ {
+ if constexpr (is_function_v<remove_pointer_t<_Tp>>)
+ return std::__invoke_r<_Ret>(reinterpret_cast<_Tp>(__ptrs._M_func),
+ std::forward<_Args>(__args)...);
+ else
+ {
+ auto* __p = __polyfunc::__cast_to<_Tp>(__ptrs);
+ return std::__invoke_r<_Ret>(static_cast<_Tp>(*__p),
+ std::forward<_Args>(__args)...);
+ }
}
};
@@ -184,6 +225,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return false;
}
+#if __glibcxx_move_only_function || __glibcxx_copyable_function
struct _Manager
{
enum class _Op
@@ -241,7 +283,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
switch (__op)
{
case _Op::_Address:
- __target._M_ptrs._M_obj = const_cast<void*>(__src->_M_addr());
+ __target._M_ptrs._M_obj = __src->_M_addr();
return;
case _Op::_Move:
case _Op::_Copy:
@@ -263,24 +305,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
switch (__op)
{
case _Op::_Address:
- __target._M_ptrs._M_obj = __src->_M_ptr<_Tp>();
+ __target._M_ptrs._M_obj = __src->_M_addr();
return;
case _Op::_Move:
{
- _Tp* __obj = __src->_M_ptr<_Tp>();
+ _Tp* __obj = static_cast<_Tp*>(const_cast<void*>(__src->_M_addr()));
::new(__target._M_addr()) _Tp(std::move(*__obj));
__obj->~_Tp();
}
return;
case _Op::_Destroy:
- __target._M_ptr<_Tp>()->~_Tp();
+ static_cast<_Tp*>(__target._M_addr())->~_Tp();
return;
case _Op::_Copy:
if constexpr (_Provide_copy)
- ::new (__target._M_addr()) _Tp(__src->_M_ref<const _Tp&>());
- else
- __builtin_unreachable();
- return;
+ {
+ auto* __obj = static_cast<const _Tp*>(__src->_M_addr());
+ ::new (__target._M_addr()) _Tp(*__obj);
+ return;
+ }
+ __builtin_unreachable();
}
}
@@ -296,14 +340,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__target._M_ptrs._M_obj = __src->_M_ptrs._M_obj;
return;
case _Op::_Destroy:
- delete __target._M_ptr<_Tp>();
+ delete static_cast<const _Tp*>(__target._M_ptrs._M_obj);
return;
case _Op::_Copy:
if constexpr (_Provide_copy)
- __target._M_ptrs._M_obj = new _Tp(__src->_M_ref<const _Tp&>());
- else
- __builtin_unreachable();
- return;
+ {
+ auto* __obj = static_cast<const _Tp*>(__src->_M_ptrs._M_obj);
+ __target._M_ptrs._M_obj = new _Tp(*__obj);
+ return;
+ }
+ __builtin_unreachable();
}
}
};
@@ -382,7 +428,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend class _Cpy_base;
#endif // __glibcxx_copyable_function
};
-
+#endif // __glibcxx_copyable_function || __glibcxx_copyable_function
} // namespace __polyfunc
/// @endcond
@@ -468,6 +514,50 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
} // namespace __detail::__variant
#endif // __glibcxx_copyable_function
+#ifdef __glibcxx_function_ref // C++ >= 26
+ /// @cond undocumented
+ namespace __polyfunc
+ {
+ template<typename _Sig>
+ struct __skip_first_arg;
+
+ // Additional partial specializations are defined in bits/funcref_impl.h
+ template<bool _Noex, typename _Ret, typename _Arg, typename... _Args>
+ struct __skip_first_arg<_Ret(*)(_Arg, _Args...) noexcept(_Noex)>
+ { using type = _Ret(_Args...) noexcept(_Noex); };
+
+ template<typename _Fn, typename _Tr>
+ consteval auto
+ __deduce_funcref()
+ {
+ if constexpr (is_member_object_pointer_v<_Fn>)
+ // TODO Consider reporting issue to make this noexcept
+ return static_cast<invoke_result_t<_Fn, _Tr>(*)()>(nullptr);
+ else
+ return static_cast<__skip_first_arg<_Fn>::type*>(nullptr);
+ }
+ } // namespace __polyfunc
+ /// @endcond
+
+ template<typename... _Signature>
+ class function_ref; // not defined
+
+ template<typename _Fn>
+ requires is_function_v<_Fn>
+ function_ref(_Fn*) -> function_ref<_Fn>;
+
+ template<auto __f, class _Fn = remove_pointer_t<decltype(__f)>>
+ requires is_function_v<_Fn>
+ function_ref(nontype_t<__f>) -> function_ref<_Fn>;
+
+ template<auto __f, typename _Tp, class _Fn = decltype(__f)>
+ requires is_member_pointer_v<_Fn> || is_function_v<remove_pointer_t<_Fn>>
+ function_ref(nontype_t<__f>, _Tp&&)
+ -> function_ref<
+ remove_pointer_t<decltype(__polyfunc::__deduce_funcref<_Fn, _Tp&>())>>;
+
+#endif // __glibcxx_function_ref
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
@@ -503,5 +593,11 @@ _GLIBCXX_END_NAMESPACE_VERSION
#include "cpyfunc_impl.h"
#endif // __glibcxx_copyable_function
-#endif // __glibcxx_copyable_function || __glibcxx_copyable_function
+#ifdef __glibcxx_function_ref // C++ >= 26
+#include "funcref_impl.h"
+#define _GLIBCXX_MOF_CV const
+#include "funcref_impl.h"
+#endif // __glibcxx_function_ref
+
+#endif // move_only_function || copyable_function || function_ref
#endif // _GLIBCXX_FUNCWRAP_H
diff --git a/libstdc++-v3/include/bits/indirect.h b/libstdc++-v3/include/bits/indirect.h
new file mode 100644
index 0000000..85908e2
--- /dev/null
+++ b/libstdc++-v3/include/bits/indirect.h
@@ -0,0 +1,459 @@
+// Vocabulary Types for Composite Class Design -*- C++ -*-
+
+// Copyright The GNU Toolchain Authors.
+//
+// This file is part of the GNU ISO C++ Library. This library 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.
+
+// This library 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.
+
+// 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
+// <http://www.gnu.org/licenses/>.
+
+/** @file include/bits/indirect.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{memory}
+ */
+
+#ifndef _GLIBCXX_INDIRECT_H
+#define _GLIBCXX_INDIRECT_H 1
+
+#pragma GCC system_header
+
+#include <bits/version.h>
+
+#if __glibcxx_indirect || __glibcxx_polymorphic // >= C++26
+#include <compare>
+#include <initializer_list>
+#include <bits/allocator.h>
+#include <bits/alloc_traits.h>
+#include <bits/allocated_ptr.h> // __allocate_guarded
+#include <bits/uses_allocator.h> // allocator_arg_t
+#include <bits/utility.h> // __is_in_place_type_v
+#include <bits/functional_hash.h> // hash
+#include <bits/memory_resource.h> // polymorphic_allocator
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#if __glibcxx_indirect
+ template<typename _Tp, typename _Alloc = allocator<_Tp>>
+ class indirect;
+
+ template<typename _Tp>
+ constexpr bool __is_indirect = false;
+ template<typename _Tp, typename _Alloc>
+ constexpr bool __is_indirect<indirect<_Tp, _Alloc>> = true;
+
+#if _GLIBCXX_HOSTED
+ namespace pmr
+ {
+ template<typename _Tp>
+ using indirect = indirect<_Tp, polymorphic_allocator<_Tp>>;
+ }
+#endif
+
+ // [indirect], class template indirect
+ template<typename _Tp, typename _Alloc>
+ class indirect
+ {
+ static_assert(is_object_v<_Tp>);
+ static_assert(!is_array_v<_Tp>);
+ static_assert(!is_same_v<_Tp, in_place_t>);
+ static_assert(!__is_in_place_type_v<_Tp>);
+ static_assert(!is_const_v<_Tp> && !is_volatile_v<_Tp>);
+
+ using _ATraits = allocator_traits<_Alloc>;
+ static_assert(is_same_v<_Tp, typename _ATraits::value_type>);
+
+ public:
+ using value_type = _Tp;
+ using allocator_type = _Alloc;
+ using pointer = typename allocator_traits<_Alloc>::pointer;
+ using const_pointer = typename allocator_traits<_Alloc>::const_pointer;
+
+ constexpr explicit
+ indirect() requires is_default_constructible_v<_Alloc>
+ : _M_objp(_M_make_obj_chk())
+ { }
+
+ constexpr explicit
+ indirect(allocator_arg_t, const _Alloc& __a)
+ : _M_alloc(__a), _M_objp(_M_make_obj_chk())
+ { }
+
+ constexpr
+ indirect(const indirect& __o)
+ : indirect(allocator_arg,
+ _ATraits::select_on_container_copy_construction(__o._M_alloc),
+ __o)
+ { }
+
+ constexpr
+ indirect(allocator_arg_t, const _Alloc& __a, const indirect& __other)
+ : _M_alloc(__a)
+ {
+ if (__other._M_objp)
+ _M_objp = _M_make_obj_chk(__other.__get());
+ else
+ _M_objp = nullptr;
+ }
+
+ constexpr
+ indirect(indirect&& __other) noexcept
+ : _M_alloc(std::move(__other._M_alloc)),
+ _M_objp(std::__exchange(__other._M_objp, nullptr))
+ { }
+
+ constexpr
+ indirect(allocator_arg_t, const _Alloc& __a,
+ indirect&& __other) noexcept(_ATraits::is_always_equal::value)
+ : _M_alloc(__a),
+ _M_objp(std::__exchange(__other._M_objp, nullptr))
+ {
+ if constexpr (!_ATraits::is_always_equal::value)
+ if (_M_objp && _M_alloc != __other._M_alloc)
+ {
+ static_assert(sizeof(_Tp) != 0, "must be a complete type");
+
+ // _M_alloc cannot free _M_objp, give it back to __other.
+ __other._M_objp = std::__exchange(_M_objp, nullptr);
+ // And create a new object that can be freed by _M_alloc.
+ _M_objp = _M_make_obj(std::move(*__other._M_objp));
+ }
+ }
+
+ template<typename _Up = _Tp>
+ requires (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
+ && (!is_same_v<remove_cvref_t<_Up>, indirect>)
+ && is_constructible_v<_Tp, _Up>
+ && is_default_constructible_v<_Alloc>
+ constexpr explicit
+ indirect(_Up&& __u)
+ : _M_objp(_M_make_obj(std::forward<_Up>(__u)))
+ { }
+
+ template<typename _Up = _Tp>
+ requires (!is_same_v<remove_cvref_t<_Up>, in_place_t>)
+ && (!is_same_v<remove_cvref_t<_Up>, indirect>)
+ && is_constructible_v<_Tp, _Up>
+ constexpr explicit
+ indirect(allocator_arg_t, const _Alloc& __a, _Up&& __u)
+ : _M_alloc(__a), _M_objp(_M_make_obj(std::forward<_Up>(__u)))
+ { }
+
+ template<typename... _Us>
+ requires is_constructible_v<_Tp, _Us...>
+ && is_default_constructible_v<_Alloc>
+ constexpr explicit
+ indirect(in_place_t, _Us&&... __us)
+ : _M_objp(_M_make_obj(std::forward<_Us>(__us)...))
+ { }
+
+ template<typename... _Us>
+ requires is_constructible_v<_Tp, _Us...>
+ constexpr explicit
+ indirect(allocator_arg_t, const _Alloc& __a, in_place_t, _Us&&... __us)
+ : _M_alloc(__a),
+ _M_objp(_M_make_obj(std::forward<_Us>(__us)...))
+ { }
+
+ template<typename _Ip, typename... _Us>
+ requires is_constructible_v<_Tp, initializer_list<_Ip>&, _Us...>
+ && is_default_constructible_v<_Alloc>
+ constexpr explicit
+ indirect(in_place_t, initializer_list<_Ip> __il, _Us&&... __us)
+ : _M_objp(_M_make_obj(__il, std::forward<_Us>(__us)...))
+ { }
+
+ template<typename _Ip, typename... _Us>
+ requires is_constructible_v<_Tp, initializer_list<_Ip>&, _Us...>
+ constexpr explicit
+ indirect(allocator_arg_t, const _Alloc& __a,
+ in_place_t, initializer_list<_Ip> __il, _Us&&... __us)
+ : _M_alloc(__a),
+ _M_objp(_M_make_obj(__il, std::forward<_Us>(__us)...))
+ { }
+
+ constexpr ~indirect()
+ {
+ static_assert(sizeof(_Tp) != 0, "must be a complete type");
+ _M_reset(nullptr);
+ }
+
+ constexpr indirect&
+ operator=(const indirect& __other)
+ {
+ static_assert(is_copy_assignable_v<_Tp>);
+ static_assert(is_copy_constructible_v<_Tp>);
+
+ if (__builtin_addressof(__other) == this) [[unlikely]]
+ return *this;
+
+ constexpr bool __pocca
+ = _ATraits::propagate_on_container_copy_assignment::value;
+
+ pointer __ptr = nullptr;
+ if (__other._M_objp)
+ {
+ if (_ATraits::is_always_equal::value
+ || _M_alloc == __other._M_alloc)
+ {
+ if (_M_objp)
+ {
+ *_M_objp = __other.__get();
+ if constexpr (__pocca)
+ _M_alloc = __other._M_alloc;
+ return *this;
+ }
+ }
+ const indirect& __x = __pocca ? __other : *this;
+ __ptr = __x._M_make_obj(__other.__get());
+ }
+
+ _M_reset(__ptr);
+
+ if constexpr (__pocca)
+ _M_alloc = __other._M_alloc;
+
+ return *this;
+ }
+
+ constexpr indirect&
+ operator=(indirect&& __other)
+ noexcept(_ATraits::propagate_on_container_move_assignment::value
+ || _ATraits::is_always_equal::value)
+ {
+ // N5008 says is_copy_constructible_v<T> here, but that seems wrong.
+ // We only require move-constructible, and only for unequal allocators.
+
+ if (__builtin_addressof(__other) == this) [[unlikely]]
+ return *this;
+
+ constexpr bool __pocma
+ = _ATraits::propagate_on_container_move_assignment::value;
+
+ pointer __ptr = nullptr;
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4251. Move assignment for indirect unnecessarily requires copy construction
+ if constexpr (_ATraits::is_always_equal::value || __pocma)
+ __ptr = std::__exchange(__other._M_objp, nullptr);
+ else if (_M_alloc == __other._M_alloc)
+ __ptr = std::__exchange(__other._M_objp, nullptr);
+ else if (__other._M_objp)
+ {
+ static_assert(is_move_constructible_v<_Tp>);
+ __ptr = _M_make_obj(std::move(*__other._M_objp));
+ }
+
+ _M_reset(__ptr);
+
+ if constexpr (__pocma)
+ _M_alloc = __other._M_alloc;
+
+ return *this;
+ }
+
+ template<typename _Up = _Tp>
+ requires (!is_same_v<remove_cvref_t<_Up>, indirect>)
+ && is_constructible_v<_Tp, _Up> && is_assignable_v<_Tp&, _Up>
+ constexpr indirect&
+ operator=(_Up&& __u)
+ {
+ if (_M_objp == nullptr)
+ _M_objp = _M_make_obj(std::forward<_Up>(__u));
+ else
+ *_M_objp = std::forward<_Up>(__u);
+
+ return *this;
+ }
+
+ template<typename _Self>
+ constexpr auto&&
+ operator*(this _Self&& __self) noexcept
+ {
+ __glibcxx_assert(__self._M_objp != nullptr);
+ return std::forward_like<_Self>(*((_Self)__self)._M_objp);
+ }
+
+ constexpr const_pointer
+ operator->() const noexcept
+ {
+ // Do we want to enforce this? __glibcxx_assert(_M_objp != nullptr);
+ return _M_objp;
+ }
+
+ constexpr pointer
+ operator->() noexcept
+ {
+ // Do we want to enforce this? __glibcxx_assert(_M_objp != nullptr);
+ return _M_objp;
+ }
+
+ constexpr bool
+ valueless_after_move() const noexcept { return _M_objp == nullptr; }
+
+ constexpr allocator_type
+ get_allocator() const noexcept { return _M_alloc; }
+
+ constexpr void
+ swap(indirect& __other)
+ noexcept(_ATraits::propagate_on_container_swap::value
+ || _ATraits::is_always_equal::value)
+ {
+ using std::swap;
+ swap(_M_objp, __other._M_objp);
+ if constexpr (_ATraits::propagate_on_container_swap::value)
+ swap(_M_alloc, __other._M_alloc);
+ else if constexpr (!_ATraits::is_always_equal::value)
+ __glibcxx_assert(_M_alloc == __other._M_alloc);
+ }
+
+ friend constexpr void
+ swap(indirect& __lhs, indirect& __rhs)
+ noexcept(_ATraits::propagate_on_container_swap::value
+ || _ATraits::is_always_equal::value)
+ { __lhs.swap(__rhs); }
+
+ template<typename _Up, typename _Alloc2>
+ requires requires (const _Tp& __t, const _Up& __u) { __t == __u; }
+ friend constexpr bool
+ operator==(const indirect& __lhs, const indirect<_Up, _Alloc2>& __rhs)
+ noexcept(noexcept(*__lhs == *__rhs))
+ {
+ if (!__lhs._M_objp || !__rhs._M_objp)
+ return bool(__lhs._M_objp) == bool(__rhs._M_objp);
+ else
+ return __lhs.__get() == __rhs.__get();
+ }
+
+ template<typename _Up>
+ requires (!__is_indirect<_Up>) // See PR c++/99599
+ && requires (const _Tp& __t, const _Up& __u) { __t == __u; }
+ friend constexpr bool
+ operator==(const indirect& __lhs, const _Up& __rhs)
+ noexcept(noexcept(*__lhs == __rhs))
+ {
+ if (!__lhs._M_objp)
+ return false;
+ else
+ return __lhs.__get() == __rhs;
+ }
+
+ template<typename _Up, typename _Alloc2>
+ friend constexpr __detail::__synth3way_t<_Tp, _Up>
+ operator<=>(const indirect& __lhs, const indirect<_Up, _Alloc2>& __rhs)
+ noexcept(noexcept(__detail::__synth3way(*__lhs, *__rhs)))
+ {
+ if (!__lhs._M_objp || !__rhs._M_objp)
+ return bool(__lhs._M_objp) <=> bool(__rhs._M_objp);
+ else
+ return __detail::__synth3way(__lhs.__get(), __rhs.__get());
+ }
+
+ template<typename _Up>
+ requires (!__is_indirect<_Up>) // See PR c++/99599
+ friend constexpr __detail::__synth3way_t<_Tp, _Up>
+ operator<=>(const indirect& __lhs, const _Up& __rhs)
+ noexcept(noexcept(__detail::__synth3way(*__lhs, __rhs)))
+ {
+ if (!__lhs._M_objp)
+ return strong_ordering::less;
+ else
+ return __detail::__synth3way(__lhs.__get(), __rhs);
+ }
+
+ private:
+ template<typename, typename> friend class indirect;
+
+ constexpr void
+ _M_reset(pointer __ptr) noexcept
+ {
+ if (_M_objp)
+ {
+ _ATraits::destroy(_M_alloc, std::to_address(_M_objp));
+ _ATraits::deallocate(_M_alloc, _M_objp, 1);
+ }
+ _M_objp = __ptr;
+ }
+
+ template<typename... _Args>
+ constexpr pointer
+ _M_make_obj(_Args&&... __args) const
+ {
+ _Scoped_allocation __sa(_M_alloc, in_place,
+ std::forward<_Args>(__args)...);
+ return __sa.release();
+ }
+
+ // Enforces is_constructible check and then calls _M_make_obj.
+ template<typename... _Args>
+ [[__gnu__::__always_inline__]]
+ constexpr pointer
+ _M_make_obj_chk(_Args&&... __args) const
+ {
+ static_assert(is_constructible_v<_Tp, _Args...>);
+ return _M_make_obj(std::forward<_Args>(__args)...);
+ }
+
+ // Always-const accessor that avoids ADL for operator*.
+ // This can be preferable to using *_M_objp because that might give _Tp&.
+ // This can be preferable to using **this because that does ADL.
+ [[__gnu__::__always_inline__]]
+ constexpr const _Tp&
+ __get() const noexcept
+ { return *_M_objp; }
+
+ [[no_unique_address]] _Alloc _M_alloc = _Alloc();
+ pointer _M_objp; // Pointer to the owned object.
+ };
+
+ template<typename _Value>
+ indirect(_Value) -> indirect<_Value>;
+
+ template<typename _Alloc, typename _Value>
+ indirect(allocator_arg_t, _Alloc, _Value)
+ -> indirect<_Value, __alloc_rebind<_Alloc, _Value>>;
+
+ // [indirect.hash], hash support
+ template<typename _Tp, typename _Alloc>
+ requires is_default_constructible_v<hash<_Tp>>
+ struct hash<indirect<_Tp, _Alloc>>
+ {
+ constexpr size_t
+ operator()(const indirect<_Tp, _Alloc>& __t) const
+ noexcept(noexcept(hash<_Tp>{}(*__t)))
+ {
+ // We pick an arbitrary hash for valueless indirect objects
+ // which hopefully usual values of _Tp won't typically hash to.
+ if (__t.valueless_after_move())
+ return -4444zu;
+ return hash<_Tp>{}(*__t);
+ }
+ };
+
+ template<typename _Tp, typename _Alloc>
+ struct __is_fast_hash<hash<indirect<_Tp, _Alloc>>>
+ : __is_fast_hash<hash<_Tp>>
+ { };
+#endif // __glibcxx_indirect
+
+ _GLIBCXX_END_NAMESPACE_VERSION
+} // namespace
+#endif // C++26 __glibcxx_indirect || __glibcxx_polymorphic
+
+#endif // _GLIBCXX_INDIRECT_H
diff --git a/libstdc++-v3/include/bits/std_abs.h b/libstdc++-v3/include/bits/std_abs.h
index 35ec4d3..3d805e6 100644
--- a/libstdc++-v3/include/bits/std_abs.h
+++ b/libstdc++-v3/include/bits/std_abs.h
@@ -103,6 +103,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
abs(__GLIBCXX_TYPE_INT_N_3 __x) { return __x >= 0 ? __x : -__x; }
#endif
+#if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
+ // In strict modes __GLIBCXX_TYPE_INT_N_0 is not defined for __int128,
+ // but we want to always define std::abs(__int128).
+ __extension__ inline _GLIBCXX_CONSTEXPR __int128
+ abs(__int128 __x) { return __x >= 0 ? __x : -__x; }
+#endif
+
#if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
constexpr _Float16
abs(_Float16 __x)
@@ -137,7 +144,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __gnu_cxx::__bfloat16_t(__builtin_fabsf(__x)); }
#endif
-#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+#if defined(_GLIBCXX_USE_FLOAT128)
__extension__ inline _GLIBCXX_CONSTEXPR
__float128
abs(__float128 __x)
diff --git a/libstdc++-v3/include/bits/utility.h b/libstdc++-v3/include/bits/utility.h
index 6fa6b67..84d25e0 100644
--- a/libstdc++-v3/include/bits/utility.h
+++ b/libstdc++-v3/include/bits/utility.h
@@ -316,6 +316,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline constexpr sorted_equivalent_t sorted_equivalent{};
#endif
+#if __glibcxx_function_ref // >= C++26
+ template<auto>
+ struct nontype_t
+ {
+ explicit nontype_t() = default;
+ };
+
+ template<auto __val>
+ constexpr nontype_t<__val> nontype{};
+
+ template<typename>
+ inline constexpr bool __is_nontype_v = false;
+
+ template<auto __val>
+ inline constexpr bool __is_nontype_v<nontype_t<__val>> = true;
+#endif
+
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def
index 6ca148f..5a981ca 100644
--- a/libstdc++-v3/include/bits/version.def
+++ b/libstdc++-v3/include/bits/version.def
@@ -1757,6 +1757,14 @@ ftms = {
};
ftms = {
+ name = function_ref;
+ values = {
+ v = 202306;
+ cxxmin = 26;
+ };
+};
+
+ftms = {
name = out_ptr;
values = {
v = 202311;
@@ -1961,6 +1969,15 @@ ftms = {
};
};
+ftms = {
+ name = indirect;
+ values = {
+ v = 202502;
+ cxxmin = 26;
+ hosted = yes;
+ };
+};
+
// Standard test specifications.
stds[97] = ">= 199711L";
stds[03] = ">= 199711L";
diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h
index 48a090c..0664611 100644
--- a/libstdc++-v3/include/bits/version.h
+++ b/libstdc++-v3/include/bits/version.h
@@ -1958,6 +1958,16 @@
#endif /* !defined(__cpp_lib_copyable_function) && defined(__glibcxx_want_copyable_function) */
#undef __glibcxx_want_copyable_function
+#if !defined(__cpp_lib_function_ref)
+# if (__cplusplus > 202302L)
+# define __glibcxx_function_ref 202306L
+# if defined(__glibcxx_want_all) || defined(__glibcxx_want_function_ref)
+# define __cpp_lib_function_ref 202306L
+# endif
+# endif
+#endif /* !defined(__cpp_lib_function_ref) && defined(__glibcxx_want_function_ref) */
+#undef __glibcxx_want_function_ref
+
#if !defined(__cpp_lib_out_ptr)
# if (__cplusplus >= 202100L)
# define __glibcxx_out_ptr 202311L
@@ -2193,4 +2203,14 @@
#endif /* !defined(__cpp_lib_modules) && defined(__glibcxx_want_modules) */
#undef __glibcxx_want_modules
+#if !defined(__cpp_lib_indirect)
+# if (__cplusplus > 202302L) && _GLIBCXX_HOSTED
+# define __glibcxx_indirect 202502L
+# if defined(__glibcxx_want_all) || defined(__glibcxx_want_indirect)
+# define __cpp_lib_indirect 202502L
+# endif
+# endif
+#endif /* !defined(__cpp_lib_indirect) && defined(__glibcxx_want_indirect) */
+#undef __glibcxx_want_indirect
+
#undef __glibcxx_want_all
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 9a55b18..307bcb9 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -57,6 +57,7 @@
#define __glibcxx_want_bind_back
#define __glibcxx_want_constexpr_functional
#define __glibcxx_want_copyable_function
+#define __glibcxx_want_function_ref
#define __glibcxx_want_invoke
#define __glibcxx_want_invoke_r
#define __glibcxx_want_move_only_function
@@ -86,7 +87,7 @@
# include <bits/ranges_cmp.h> // std::identity, ranges::equal_to etc.
# include <compare>
#endif
-#if defined(__glibcxx_move_only_function) || defined(__glibcxx_copyable_function)
+#if __glibcxx_move_only_function || __glibcxx_copyable_function || __glibcxx_function_ref
# include <bits/funcwrap.h>
#endif
diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan
index 47cfa40..bcf2fa6 100644
--- a/libstdc++-v3/include/std/mdspan
+++ b/libstdc++-v3/include/std/mdspan
@@ -146,7 +146,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
using _S_storage = __array_traits<_IndexType, _S_rank_dynamic>::_Type;
- [[no_unique_address]] _S_storage _M_dynamic_extents;
+ [[no_unique_address]] _S_storage _M_dynamic_extents{};
};
template<typename _OIndexType, typename _SIndexType>
diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory
index 78a1250..d64e65c 100644
--- a/libstdc++-v3/include/std/memory
+++ b/libstdc++-v3/include/std/memory
@@ -97,6 +97,10 @@
# include <bits/out_ptr.h>
#endif
+#if __cplusplus > 202302L
+# include <bits/indirect.h>
+#endif
+
#define __glibcxx_want_addressof_constexpr
#define __glibcxx_want_allocator_traits_is_always_equal
#define __glibcxx_want_assume_aligned
@@ -105,6 +109,7 @@
#define __glibcxx_want_constexpr_dynamic_alloc
#define __glibcxx_want_constexpr_memory
#define __glibcxx_want_enable_shared_from_this
+#define __glibcxx_want_indirect
#define __glibcxx_want_make_unique
#define __glibcxx_want_out_ptr
#define __glibcxx_want_parallel_algorithm
diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in
index 417c8a1..ba46853 100644
--- a/libstdc++-v3/src/c++23/std.cc.in
+++ b/libstdc++-v3/src/c++23/std.cc.in
@@ -1415,6 +1415,9 @@ export namespace std
#if __cpp_lib_copyable_function
using std::copyable_function;
#endif
+#if __cpp_lib_function_ref
+ using std::function_ref;
+#endif
using std::multiplies;
using std::negate;
using std::not_equal_to;
@@ -3195,6 +3198,10 @@ export namespace std
using std::make_integer_sequence;
using std::move;
using std::move_if_noexcept;
+#if __cpp_lib_function_ref
+ using std::nontype_t;
+ using std::nontype;
+#endif
using std::pair;
using std::swap;
using std::operator==;
diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc
index 0e67c79..a61e49d 100644
--- a/libstdc++-v3/testsuite/17_intro/names.cc
+++ b/libstdc++-v3/testsuite/17_intro/names.cc
@@ -248,6 +248,8 @@
#undef r
#undef x
#undef y
+// <sys/localedef.h> defines _LC_weight_t::n
+#undef n
// <sys/poll.h> defines pollfd_ext::u on AIX 7.3
#undef u
// <sys/var.h> defines vario::v
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/assign.cc b/libstdc++-v3/testsuite/20_util/function_ref/assign.cc
new file mode 100644
index 0000000..9b02dc4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/assign.cc
@@ -0,0 +1,108 @@
+// { dg-do compile { target c++26 } }
+
+#include <functional>
+
+#ifndef __cpp_lib_function_ref
+# error "Feature-test macro for function_ref missing in <functional>"
+#elif __cpp_lib_function_ref != 202306L
+# error "Feature-test macro for function_ref has wrong value in <functional>"
+#endif
+
+using std::nontype;
+using std::nontype_t;
+using std::function_ref;
+
+using std::is_nothrow_move_assignable_v;
+using std::is_nothrow_copy_assignable_v;
+using std::is_nothrow_assignable_v;
+using std::is_assignable_v;
+using std::is_nothrow_swappable_v;
+using std::is_trivially_copyable_v;
+
+static_assert( is_nothrow_move_assignable_v<function_ref<void()>> );
+static_assert( is_nothrow_copy_assignable_v<function_ref<void()>> );
+static_assert( is_nothrow_swappable_v<function_ref<void()>> );
+
+static_assert( ! is_assignable_v<function_ref<void()>, std::nullptr_t> );
+
+static_assert( is_nothrow_assignable_v<function_ref<void()>, void()> );
+static_assert( is_nothrow_assignable_v<function_ref<void()>, void(&)()> );
+static_assert( is_nothrow_assignable_v<function_ref<void()>, void(*)()> );
+static_assert( is_nothrow_assignable_v<function_ref<void()>, int()> );
+static_assert( is_nothrow_assignable_v<function_ref<void()>, int(&)()> );
+static_assert( is_nothrow_assignable_v<function_ref<void()>, int(*)()> );
+static_assert( ! is_nothrow_assignable_v<function_ref<void()>, void(int)> );
+static_assert( is_nothrow_assignable_v<function_ref<void(int)>, void(int)> );
+
+static_assert( is_nothrow_assignable_v<function_ref<void()>,
+ void() noexcept> );
+static_assert( is_nothrow_assignable_v<function_ref<void() noexcept>,
+ void() noexcept> );
+static_assert( ! is_assignable_v<function_ref<void() noexcept>, void() > );
+
+struct S
+{
+ int x;
+ int f();
+};
+int funS(S);
+
+static_assert( is_nothrow_assignable_v<function_ref<int(S)>,
+ decltype(funS)> );
+static_assert( is_nothrow_assignable_v<function_ref<int(S)>,
+ decltype(&funS)> );
+static_assert( ! is_assignable_v<function_ref<int(S)>, decltype(&S::x)> );
+static_assert( ! is_assignable_v<function_ref<int(S)>, decltype(&S::f)> );
+
+static_assert( is_nothrow_assignable_v<function_ref<int(S)>,
+ nontype_t<funS>> );
+static_assert( is_nothrow_assignable_v<function_ref<int(S)>,
+ nontype_t<&funS>> );
+static_assert( is_nothrow_assignable_v<function_ref<int(S)>,
+ nontype_t<&S::x>> );
+static_assert( is_nothrow_assignable_v<function_ref<int(S)>,
+ nontype_t<&S::f>> );
+struct Q
+{
+ void operator()() const;
+};
+
+static_assert( ! is_assignable_v<function_ref<void()>, Q> );
+static_assert( ! is_assignable_v<function_ref<void()>, Q&> );
+static_assert( ! is_assignable_v<function_ref<void()>, const Q&> );
+static_assert( ! is_assignable_v<function_ref<void() const>, Q> );
+static_assert( ! is_assignable_v<function_ref<void() const>, Q&> );
+static_assert( ! is_assignable_v<function_ref<void() const>, const Q&> );
+
+static_assert( is_nothrow_assignable_v<function_ref<void()>,
+ nontype_t<Q{}>> );
+static_assert( is_nothrow_assignable_v<function_ref<void() const>,
+ nontype_t<Q{}>> );
+
+constexpr bool
+test_constexpr()
+{
+ function_ref<void(S)> fp(nontype<funS>);
+ fp = nontype<funS>;
+ fp = nontype<&funS>;
+ fp = nontype<&S::x>;
+ fp = nontype<&S::f>;
+
+ constexpr Q cq;
+ function_ref<void() const> fq(cq);
+ fq = nontype<cq>;
+ return true;
+}
+static_assert( test_constexpr() );
+
+void func();
+
+void
+test_instantiation()
+{
+ function_ref<void(S)> fp(funS);
+ fp = funS;
+ fp = &funS;
+
+ test_constexpr();
+}
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/call.cc b/libstdc++-v3/testsuite/20_util/function_ref/call.cc
new file mode 100644
index 0000000..a91c6b4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/call.cc
@@ -0,0 +1,186 @@
+// { dg-do run { target c++26 } }
+
+#include <functional>
+#include <utility>
+#include <testsuite_hooks.h>
+
+using std::nontype;
+using std::function_ref;
+
+using std::is_same_v;
+using std::is_invocable_v;
+using std::is_nothrow_invocable_v;
+using std::invoke_result_t;
+
+// Check return types
+static_assert( is_same_v<void, invoke_result_t<function_ref<void()>>> );
+static_assert( is_same_v<int, invoke_result_t<function_ref<int()>>> );
+static_assert( is_same_v<int&, invoke_result_t<function_ref<int&()>>> );
+
+// Const qualier applies to target object
+static_assert( is_invocable_v< function_ref<void()> const > );
+static_assert( is_invocable_v< function_ref<void()> const &> );
+static_assert( is_invocable_v< function_ref<void() const> > );
+static_assert( is_invocable_v< function_ref<void() const> &> );
+static_assert( is_invocable_v< function_ref<void() const> const > );
+static_assert( is_invocable_v< function_ref<void() const> const &> );
+
+// With noexcept-specifier
+static_assert( ! is_nothrow_invocable_v< function_ref<void()> > );
+static_assert( ! is_nothrow_invocable_v< function_ref<void() noexcept(false)> > );
+static_assert( is_nothrow_invocable_v< function_ref<void() noexcept> > );
+
+void
+test01()
+{
+ struct F
+ {
+ int operator()() { return 0; }
+ int operator()() const { return 1; }
+ };
+
+ function_ref<int()> f0{F{}};
+ VERIFY( f0() == 0 );
+ VERIFY( std::move(f0)() == 0 );
+
+ function_ref<int()> f1{nontype<F{}>};
+ VERIFY( f1() == 1 );
+ VERIFY( std::move(f1)() == 1 );
+
+ function_ref<int() const> f2{F{}};
+ VERIFY( f2() == 1 );
+ VERIFY( std::as_const(f2)() == 1 );
+ VERIFY( std::move(f2)() == 1 );
+ VERIFY( std::move(std::as_const(f2))() == 1 );
+
+ function_ref<int() const> f3{nontype<F{}>};
+ VERIFY( f3() == 1 );
+ VERIFY( std::as_const(f3)() == 1 );
+ VERIFY( std::move(f3)() == 1 );
+ VERIFY( std::move(std::as_const(f3))() == 1 );
+}
+
+void
+test02()
+{
+ struct F
+ {
+ struct Arg {};
+ int operator()(Arg& arg) const { return 0; }
+ int operator()(const Arg& arg) const { return 1; }
+ };
+ F::Arg arg;
+
+ function_ref<int()> f0{std::nontype<F{}>, arg};
+ VERIFY( f0() == 0 );
+ VERIFY( std::move(f0)() == 0 );
+
+ function_ref<int() const> f1{std::nontype<F{}>, arg};
+ VERIFY( f1() == 1 );
+ VERIFY( std::as_const(f1)() == 1 );
+}
+
+void
+test03()
+{
+ struct F
+ {
+ struct Arg {};
+ int operator()(Arg* arg) const { return 0; }
+ int operator()(const Arg* arg) const { return 1; }
+ };
+ F::Arg arg;
+
+ function_ref<int()> f0{std::nontype<F{}>, &arg};
+ VERIFY( f0() == 0 );
+ VERIFY( std::move(f0)() == 0 );
+
+ function_ref<int() const> f1{std::nontype<F{}>, &arg};
+ VERIFY( f1() == 1 );
+ VERIFY( std::as_const(f1)() == 1 );
+}
+
+void
+test04()
+{
+ constexpr int (*fp)() = [] { return 0; };
+ function_ref<int()> f0{fp};
+ VERIFY( f0() == 0 );
+ VERIFY( std::move(f0)() == 0 );
+
+ function_ref<int()> f1{nontype<fp>};
+ VERIFY( f1() == 0 );
+ VERIFY( std::move(f1)() == 0 );
+
+ const function_ref<int() const> f2{fp};
+ VERIFY( f2() == 0 );
+ VERIFY( std::move(f2)() == 0 );
+
+ const function_ref<int() const> f3{nontype<fp>};
+ VERIFY( f2() == 0 );
+ VERIFY( std::move(f2)() == 0 );
+}
+
+using ftype = int(int);
+int twice(int x) { return x * 2; }
+int cube(int x) { return x * x * x; }
+int callback_ptr(ftype* f, int x) { return f(x); }
+int callback_ref(ftype& f, int x) { return f(x); }
+
+void
+test05()
+{
+
+ function_ref<int(int)> r1(nontype<&callback_ptr>, &twice);
+ VERIFY( r1(2) == 4 );
+ function_ref<int(int)> r2(nontype<&callback_ptr>, cube);
+ VERIFY( r2(2) == 8 );
+
+ function_ref<int(int)> r3(nontype<&callback_ref>, twice);
+ VERIFY( r3(3) == 6 );
+ function_ref<int(int)> r4(nontype<&callback_ref>, cube);
+ VERIFY( r4(3) == 27 );
+
+ // Checks if distinction between reference and pointer
+ // is preserved.
+ struct F
+ {
+ static
+ int operator()(ftype* f, int x)
+ { return f(x) + 1000; }
+
+ static
+ int operator()(ftype& f, int x)
+ { return f(x) + 2000; }
+ };
+ function_ref<int(int)> r5(nontype<F{}>, &twice);
+ VERIFY( r5(2) == 1004 );
+ function_ref<int(int)> r6(nontype<F{}>, twice);
+ VERIFY( r6(2) == 2008 );
+ function_ref<int(int)> r7(nontype<F{}>, &cube);
+ VERIFY( r7(3) == 1006 );
+ function_ref<int(int)> r8(nontype<F{}>, cube);
+ VERIFY( r8(3) == 2027 );
+}
+
+struct Incomplete;
+
+void
+test_params()
+{
+ auto f = [](auto&&) {};
+ // There is discussion if this is supported.
+ // std::function_ref<void(Incomplete)> f1(f);
+ std::function_ref<void(Incomplete&)> f2(f);
+ // See PR120259, this should be supported.
+ // std::function_ref<void(Incomplete&&)> f3(f);
+}
+
+int main()
+{
+ test01();
+ test02();
+ test03();
+ test04();
+ test_params();
+}
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/cons.cc b/libstdc++-v3/testsuite/20_util/function_ref/cons.cc
new file mode 100644
index 0000000..a91f5ba
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/cons.cc
@@ -0,0 +1,218 @@
+// { dg-do compile { target c++26 } }
+// { dg-add-options no_pch }
+
+#include <functional>
+
+#ifndef __cpp_lib_function_ref
+# error "Feature-test macro for function_ref missing in <functional>"
+#elif __cpp_lib_function_ref != 202306L
+# error "Feature-test macro for function_ref has wrong value in <functional>"
+#endif
+
+using std::nontype;
+using std::nontype_t;
+using std::function_ref;
+
+using std::is_default_constructible_v;
+using std::is_nothrow_copy_constructible_v;
+using std::is_nothrow_move_constructible_v;
+using std::is_nothrow_constructible_v;
+using std::is_constructible_v;
+using std::is_trivially_copyable_v;
+
+static_assert( ! is_default_constructible_v<function_ref<void()>> );
+static_assert( is_nothrow_move_constructible_v<function_ref<void()>> );
+static_assert( is_nothrow_copy_constructible_v<function_ref<void()>> );
+static_assert( is_trivially_copyable_v<function_ref<void()>> );
+
+static_assert( ! is_constructible_v<function_ref<void()>, std::nullptr_t> );
+
+static_assert( is_nothrow_constructible_v<function_ref<void()>, void()> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, void(&)()> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, void(*)()> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, int()> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, int(&)()> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, int(*)()> );
+static_assert( ! is_constructible_v<function_ref<void()>, void(int)> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int)>, void(int)> );
+
+static_assert( is_nothrow_constructible_v<function_ref<void()>,
+ void() noexcept> );
+static_assert( is_nothrow_constructible_v<function_ref<void() noexcept>,
+ void() noexcept> );
+static_assert( ! is_constructible_v<function_ref<void() noexcept>,
+ void() > );
+
+struct S
+{
+ int x;
+ int f();
+};
+int funS(S);
+
+static_assert( is_nothrow_constructible_v<function_ref<int(S)>,
+ decltype(funS)> );
+static_assert( is_nothrow_constructible_v<function_ref<int(S)>,
+ decltype(&funS)> );
+static_assert( ! is_constructible_v<function_ref<int(S)>,
+ decltype(&S::x)> );
+static_assert( ! is_constructible_v<function_ref<int(S)>,
+ decltype(&S::f)> );
+
+static_assert( is_nothrow_constructible_v<function_ref<int(S)>,
+ nontype_t<funS>> );
+static_assert( is_nothrow_constructible_v<function_ref<int(S)>,
+ nontype_t<&funS>> );
+static_assert( is_nothrow_constructible_v<function_ref<int(S)>,
+ nontype_t<&S::x>> );
+static_assert( is_nothrow_constructible_v<function_ref<int(S)>,
+ nontype_t<&S::f>> );
+
+static_assert( is_nothrow_constructible_v<function_ref<int()>,
+ nontype_t<funS>, S&> );
+static_assert( is_nothrow_constructible_v<function_ref<int()>,
+ nontype_t<&funS>, S&> );
+static_assert( is_nothrow_constructible_v<function_ref<int()>,
+ nontype_t<&S::x>, S&> );
+static_assert( is_nothrow_constructible_v<function_ref<int()>,
+ nontype_t<&S::f>, S&> );
+
+static_assert( ! is_constructible_v<function_ref<int()>,
+ nontype_t<funS>, S*> );
+static_assert( ! is_constructible_v<function_ref<int()>,
+ nontype_t<&funS>, S*> );
+static_assert( is_nothrow_constructible_v<function_ref<int()>,
+ nontype_t<&S::x>, S*> );
+static_assert( is_nothrow_constructible_v<function_ref<int()>,
+ nontype_t<&S::f>, S*> );
+
+struct M
+{
+ void operator()();
+};
+
+
+static_assert( is_nothrow_constructible_v<function_ref<void()>, M> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, M&> );
+static_assert( ! is_constructible_v<function_ref<void()>, const M&> );
+static_assert( ! is_constructible_v<function_ref<void() const>, M> );
+static_assert( ! is_constructible_v<function_ref<void() const>, const M&> );
+static_assert( ! is_constructible_v<function_ref<void()>,
+ nontype_t<M{}>> );
+static_assert( ! is_constructible_v<function_ref<void() const>,
+ nontype_t<M{}>> );
+struct Q
+{
+ void operator()(int) const;
+ void operator()(int*) const;
+};
+
+static_assert( is_nothrow_constructible_v<function_ref<void(int)>, Q> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int)>, Q&> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int)>, const Q&> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int) const>, Q> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int) const>, Q&> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int) const>, const Q&> );
+
+static_assert( is_nothrow_constructible_v<function_ref<void(int)>,
+ nontype_t<Q{}>> );
+static_assert( is_nothrow_constructible_v<function_ref<void(int) const>,
+ nontype_t<Q{}>> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>,
+ nontype_t<Q{}>, int&> );
+static_assert( is_nothrow_constructible_v<function_ref<void() const>,
+ nontype_t<Q{}>, int&> );
+static_assert( ! is_constructible_v<function_ref<void()>,
+ nontype_t<Q{}>, int> );
+static_assert( ! is_constructible_v<function_ref<void() const>,
+ nontype_t<Q{}>, int> );
+
+static_assert( is_nothrow_constructible_v<function_ref<void()>,
+ nontype_t<Q{}>, int*> );
+static_assert( ! is_constructible_v<function_ref<void() const>,
+ nontype_t<Q{}>, int*> );
+
+struct L
+{
+ void operator()() &;
+};
+
+static_assert( is_nothrow_constructible_v<function_ref<void()>, L> );
+static_assert( is_nothrow_constructible_v<function_ref<void()>, L&> );
+static_assert( ! is_constructible_v<function_ref<void()>, const L&> );
+static_assert( ! is_constructible_v<function_ref<void() const>, L> );
+static_assert( ! is_constructible_v<function_ref<void() const>, const L&> );
+static_assert( ! is_constructible_v<function_ref<void()>,
+ nontype_t<L{}>> );
+static_assert( ! is_constructible_v<function_ref<void() const>,
+ nontype_t<L{}>> );
+
+struct R
+{
+ void operator()(float) const&&;
+};
+
+static_assert( ! is_constructible_v<function_ref<void(float)>, R> );
+static_assert( ! is_constructible_v<function_ref<void(float)>, R&> );
+static_assert( ! is_constructible_v<function_ref<void(float) const>, R> );
+static_assert( ! is_constructible_v<function_ref<void(float) const>, R&> );
+static_assert( ! is_constructible_v<function_ref<void(float) const>, const R&> );
+
+static_assert( ! is_constructible_v<function_ref<void(float)>,
+ nontype_t<R{}>> );
+static_assert( ! is_constructible_v<function_ref<void(float) const>,
+ nontype_t<R{}>> );
+
+constexpr bool
+test_constexpr()
+{
+ function_ref<void(S)> fp1(nontype<funS>);
+ function_ref<void(S)> fp3(nontype<&funS>);
+ function_ref<void(S)> fp4(nontype<&S::x>);
+ function_ref<void(S)> fp5(nontype<&S::f>);
+
+ S s;
+ function_ref<void()> fp6(nontype<&funS>, s);
+ function_ref<void()> fp7(nontype<&S::x>, s);
+ function_ref<void()> fp8(nontype<&S::x>, &s);
+ function_ref<void()> fp9(nontype<&S::f>, s);
+ function_ref<void()> fp10(nontype<&S::f>, &s);
+
+ M m;
+ function_ref<void()> fm1(m);
+ function_ref<void()> fm2(std::move(m));
+
+ Q q;
+ constexpr Q cq;
+ function_ref<void(int)> fq1(q);
+ function_ref<void(int) const> fq2(q);
+ function_ref<void(int) const> fq3(std::move(q));
+
+ function_ref<void(int)> fcq1(cq);
+ function_ref<void(int) const> f(cq);
+ function_ref<void(int)> fcq3(nontype<cq>);
+ function_ref<void(int) const> fcq4(nontype<cq>);
+
+ int i = 0;
+ function_ref<void()> fcq5(nontype<cq>, i);
+ function_ref<void() const> fcq6(nontype<cq>, i);
+ function_ref<void()> fcq7(nontype<cq>, &i);
+
+ L l;
+ function_ref<void()> fl1(l);
+ function_ref<void()> fl2(std::move(l));
+
+ return true;
+}
+static_assert( test_constexpr() );
+
+void func();
+
+void
+test_instantiation()
+{
+ function_ref<void(S)> fp1(funS);
+ function_ref<void(S)> fp2(&funS);
+
+ test_constexpr();
+}
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/cons_neg.cc b/libstdc++-v3/testsuite/20_util/function_ref/cons_neg.cc
new file mode 100644
index 0000000..050090d
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/cons_neg.cc
@@ -0,0 +1,30 @@
+// { dg-do compile { target c++26 } }
+
+#include <functional>
+
+using std::nontype;
+using std::function_ref;
+
+struct S
+{
+ int x;
+ void foo();
+};
+S s;
+
+constexpr int(*fp)(S) = nullptr;
+constexpr int S::*mdp = nullptr;
+constexpr int (S::*mfp)() = nullptr;
+
+function_ref<int(S)> fd1(nontype<fp>); // { dg-error "from here" }
+function_ref<int(S)> fd2(nontype<mdp>); // { dg-error "from here" }
+function_ref<int(S)> fd3(nontype<mfp>); // { dg-error "from here" }
+
+function_ref<int()> br4(nontype<fp>, s); // { dg-error "from here" }
+function_ref<int()> br5(nontype<mdp>, s); // { dg-error "from here" }
+function_ref<int()> br6(nontype<mfp>, s); // { dg-error "from here" }
+
+function_ref<int()> bp7(nontype<mdp>, &s); // { dg-error "from here" }
+function_ref<int()> bp8(nontype<mfp>, &s); // { dg-error "from here" }
+
+// { dg-prune-output "static assertion failed" }
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/conv.cc b/libstdc++-v3/testsuite/20_util/function_ref/conv.cc
new file mode 100644
index 0000000..7dc7b8c
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/conv.cc
@@ -0,0 +1,259 @@
+// { dg-do run { target c++26 } }
+// { dg-require-effective-target hosted }
+
+#include <functional>
+#include <testsuite_hooks.h>
+
+using std::function_ref;
+
+static_assert( std::is_constructible_v<std::function_ref<void() const>,
+ std::function_ref<void()>> );
+
+// Non-trivial args, guarantess that type is not passed by copy
+struct CountedArg
+{
+ CountedArg() = default;
+ CountedArg(const CountedArg& f) noexcept : counter(f.counter) { ++counter; }
+ CountedArg& operator=(CountedArg&&) = delete;
+
+ int counter = 0;
+};
+CountedArg const c;
+
+// The C++26 [func.wrap.general] p2 does not currently cover funciton_ref,
+// so we make extra copies of arguments.
+
+void
+test01()
+{
+ auto f = [](CountedArg const& arg) noexcept { return arg.counter; };
+ std::function_ref<int(CountedArg) const noexcept> r1(f);
+ std::move_only_function<int(CountedArg) const noexcept> m1(f);
+ std::copyable_function<int(CountedArg) const noexcept> c1(f);
+
+ // Complatible signatures
+ std::function_ref<int(CountedArg) const noexcept> r2m(m1);
+ VERIFY( r2m(c) == 2 );
+ std::function_ref<int(CountedArg) const noexcept> r2c(c1);
+ VERIFY( r2c(c) == 2 );
+
+ std::function_ref<int(CountedArg) const> r3r(r1);
+ VERIFY( r3r(c) == 2 );
+ std::function_ref<int(CountedArg) const> r3m(m1);
+ VERIFY( r3m(c) == 2 );
+ std::function_ref<int(CountedArg) const> r3c(c1);
+ VERIFY( r3c(c) == 2 );
+
+ std::function_ref<int(CountedArg)> r4r(r1);
+ VERIFY( r4r(c) == 2 );
+ std::function_ref<int(CountedArg)> r4m(m1);
+ VERIFY( r4m(c) == 2 );
+ std::function_ref<int(CountedArg)> r4c(c1);
+ VERIFY( r4c(c) == 2 );
+
+ // Incompatible signatures
+ std::function_ref<long(CountedArg) const noexcept> r5r(r1);
+ VERIFY( r5r(c) == 2 );
+ std::function_ref<long(CountedArg) const noexcept> r5m(m1);
+ VERIFY( r5r(c) == 2 );
+ std::function_ref<long(CountedArg) const noexcept> r5c(c1);
+ VERIFY( r5r(c) == 2 );
+}
+
+void
+test02()
+{
+ // Constructing move_only_function and copyable_function from function_ref,
+ // have not chance to restore manager, so we store function_ref inside.
+ auto f = [](CountedArg const& arg) noexcept { return arg.counter; };
+ std::function_ref<int(CountedArg) const noexcept> r1(f);
+
+ std::move_only_function<int(CountedArg) const noexcept> m1(r1);
+ VERIFY( m1(c) == 2 );
+
+ std::copyable_function<int(CountedArg) const noexcept> c1(r1);
+ VERIFY( c1(c) == 2 );
+}
+
+void
+test03()
+{
+ struct F
+ {
+ int operator()(CountedArg const& arg) noexcept
+ { return arg.counter; }
+
+ int operator()(CountedArg const& arg) const noexcept
+ { return arg.counter + 1000; }
+ };
+
+ F f;
+ std::function_ref<int(CountedArg) const> r1(f);
+ VERIFY( r1(c) == 1001 );
+
+ // Call const overload as std::function_ref<int(CountedArg) const>
+ // inside std::function_ref<int(CountedArg)> would do.
+ std::function_ref<int(CountedArg)> r2(r1);
+ VERIFY( r2(c) == 1002 );
+ std::move_only_function<int(CountedArg)> m2(r1);
+ VERIFY( m2(c) == 1002 );
+
+ // Call non-const overload as const-qualifed operator() for
+ // std::function_ref<int(CountedArg)> do.
+ std::function_ref<int(CountedArg)> r3(f);
+ VERIFY( r3(c) == 1 );
+ std::function_ref<int(CountedArg) const> r4(r3);
+ VERIFY( r4(c) == 2 );
+ std::move_only_function<int(CountedArg) const> m4(r3);
+ VERIFY( m4(c) == 2 );
+}
+
+void
+test04()
+{
+ auto f = [](CountedArg const& arg) noexcept { return arg.counter; };
+ std::function_ref<int(CountedArg)> w1(f);
+ // function_ref stores function_ref due incompatibile signatures
+ std::function_ref<int(CountedArg const&)> w2(std::move(w1));
+ // copy is made when passing to int(CountedArg)
+ VERIFY( w2(c) == 1 );
+ // wrapped 3 times
+ std::function_ref<int(CountedArg)> w3(w2);
+ VERIFY( w3(c) == 2 );
+ // wrapped 4 times
+ std::function_ref<int(CountedArg const&)> w4(w3);
+ VERIFY( w4(c) == 2 );
+ // wrapped 5 times
+ std::function_ref<int(CountedArg)> w5(w4);
+ VERIFY( w5(c) == 3 );
+}
+
+void
+test05()
+{
+ // No special interoperability with std::function
+ auto f = [](CountedArg const& arg) noexcept { return arg.counter; };
+ std::function<int(CountedArg)> f1(f);
+ std::function_ref<int(CountedArg) const> c1(std::move(f1));
+ VERIFY( c1(c) == 2 );
+
+ std::function_ref<int(CountedArg) const> c2(f);
+ std::function<int(CountedArg)> f2(c2);
+ VERIFY( f2(c) == 2 );
+}
+
+void
+test06()
+{
+ auto* func = +[]{ static int x; return &x; };
+ std::move_only_function<const void*() const> m1(func);
+ std::function_ref<const void*() const> rm1(m1);
+ VERIFY( m1() == rm1() );
+ std::copyable_function<const void*() const> c1(func);
+ std::function_ref<const void*() const> rc1(c1);
+ VERIFY( c1() == rc1() );
+
+ struct Trivial
+ {
+ void const* operator()() const
+ { return this; }
+ };
+ std::move_only_function<const void*() const> m2(Trivial{});
+ std::function_ref<const void*() const> rm2(m2);
+ VERIFY( m2() == rm2() );
+ std::copyable_function<const void*() const> c2(Trivial{});
+ std::function_ref<const void*() const> rc2(c2);
+ VERIFY( c2() == rc2() );
+
+ struct NonTrivial : Trivial
+ {
+ NonTrivial() {}
+ NonTrivial(NonTrivial&&) noexcept {}
+ NonTrivial(const NonTrivial&) {}
+ };
+ std::move_only_function<const void*() const> m3(NonTrivial{});
+ std::function_ref<const void*() const> rm3(m3);
+ VERIFY( m3() == rm3() );
+ std::copyable_function<const void*() const> c3(NonTrivial{});
+ std::function_ref<const void*() const> rc3(c3);
+ VERIFY( c3() == rc3() );
+
+ struct Large : Trivial
+ {
+ int tab[10];
+ };
+ std::move_only_function<const void*() const> m4(Large{});
+ std::function_ref<const void*() const> rm4(m4);
+ VERIFY( m4() == rm4() );
+ std::copyable_function<const void*() const> c4(Large{});
+ std::function_ref<const void*() const> rc4(c4);
+ VERIFY( c4() == rc4() );
+}
+
+void
+test07()
+{
+ int (*f1)() = [] { return 1; };
+ int (*f2)() = [] { return 2; };
+
+ std::function_ref<int() const> r1(f1);
+ std::move_only_function<int() const> m1(f1);
+ std::copyable_function<int() const> c1(f1);
+
+ std::function_ref<int() const> r2r(r1);
+ VERIFY( r2r() == 1 );
+ r1 = f2;
+ VERIFY( r2r() == 1 ); // same-siganture, copy constructor is used
+
+ std::function_ref<int() const> r2m(m1);
+ VERIFY( r2m() == 1 );
+ m1 = f2;
+ VERIFY( r2m() == 2 );
+
+ std::function_ref<int() const> r2c(c1);
+ VERIFY( r2c() == 1 );
+ c1 = f2;
+ VERIFY( r2c() == 2 );
+
+ std::function_ref<int()> r3r(r1);
+ VERIFY( r3r() == 2 );
+ r1 = f1;
+ VERIFY( r3r() == 1 ); // converting-constructor
+
+ std::function_ref<int()> r3m(m1);
+ VERIFY( r3m() == 2 );
+ m1 = f1;
+ VERIFY( r3m() == 1 );
+
+ std::function_ref<int()> r3c(c1);
+ VERIFY( r3c() == 2 );
+ c1 = f1;
+ VERIFY( r3c() == 1 );
+
+}
+
+constexpr bool
+test08()
+{
+ auto f = [](int x) noexcept { return x; };
+ std::function_ref<int(int) const noexcept> rf(f);
+
+ std::function_ref<int(int) const noexcept> rr1(rf);
+ std::function_ref<int(int)> rr2(rf);
+ std::function_ref<int(long)> rr3(rf);
+ return true;
+};
+
+
+int main()
+{
+ test01();
+ test02();
+ test03();
+ test04();
+ test05();
+ test06();
+ test07();
+
+ static_assert( test08() );
+}
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc b/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc
new file mode 100644
index 0000000..2940b87
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/deduction.cc
@@ -0,0 +1,103 @@
+// { dg-do compile { target c++26 } }
+
+#include <functional>
+#include <type_traits>
+
+using std::is_same_v;
+using std::nontype;
+using std::nontype_t;
+using std::function_ref;
+
+int i = 0;
+
+void f0();
+void f0n() noexcept;
+
+static_assert( is_same_v<decltype(function_ref(f0)),
+ function_ref<void()>> );
+static_assert( is_same_v<decltype(function_ref(f0n)),
+ function_ref<void() noexcept>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f0>)),
+ function_ref<void()>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f0n>)),
+ function_ref<void() noexcept>> );
+
+void f1(int);
+void f1n(int) noexcept;
+
+static_assert( is_same_v<decltype(function_ref(f1)),
+ function_ref<void(int)>> );
+static_assert( is_same_v<decltype(function_ref(f1n)),
+ function_ref<void(int) noexcept>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f1>)),
+ function_ref<void(int)>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f1n>)),
+ function_ref<void(int) noexcept>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f1>, i)),
+ function_ref<void()>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f1n>, i)),
+ function_ref<void() noexcept>> );
+
+void f2(int*, int);
+void f2n(int*, int) noexcept;
+
+static_assert( is_same_v<decltype(function_ref(f2)),
+ function_ref<void(int*, int)>> );
+static_assert( is_same_v<decltype(function_ref(f2n)),
+ function_ref<void(int*, int) noexcept>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f2>)),
+ function_ref<void(int*, int)>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f2n>)),
+ function_ref<void(int*, int) noexcept>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f2>, &i)),
+ function_ref<void(int)>> );
+static_assert( is_same_v<decltype(function_ref(nontype<f2n>, &i)),
+ function_ref<void(int) noexcept>> );
+
+struct S
+{
+ int mem;
+ int f();
+ int fn() noexcept;
+
+ int fc(int) const;
+ int fcn(int) const noexcept;
+
+ int fl(int) &;
+ int fln(int) & noexcept;
+
+ int fcl(float) const&;
+ int fcln(float) const& noexcept;
+};
+S s{};
+const S cs{};
+
+static_assert( is_same_v<decltype(function_ref(nontype<&S::mem>, s)),
+ function_ref<int&()>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::mem>, cs)),
+ function_ref<const int&()>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::mem>, &s)),
+ function_ref<int&()>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::mem>, &cs)),
+ function_ref<const int&()>> );
+
+static_assert( is_same_v<decltype(function_ref(nontype<&S::f>, s)),
+ function_ref<int()>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fn>, &s)),
+ function_ref<int() noexcept>> );
+
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fc>, &s)),
+ function_ref<int(int)>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fcn>, s)),
+ function_ref<int(int) noexcept>> );
+
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fl>, &s)),
+ function_ref<int(int)>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fln>, s)),
+ function_ref<int(int) noexcept>> );
+
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fcl>, s)),
+ function_ref<int(float)>> );
+static_assert( is_same_v<decltype(function_ref(nontype<&S::fcln>, &s)),
+ function_ref<int(float) noexcept>> );
+
diff --git a/libstdc++-v3/testsuite/20_util/function_ref/mutation.cc b/libstdc++-v3/testsuite/20_util/function_ref/mutation.cc
new file mode 100644
index 0000000..32c6931
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function_ref/mutation.cc
@@ -0,0 +1,85 @@
+// { dg-do run { target c++26 } }
+
+#include <functional>
+#include <testsuite_hooks.h>
+
+using std::nontype;
+using std::function_ref;
+
+void
+test01()
+{
+ struct F {
+ int v;
+ int operator()() { return v; }
+ };
+ F f1{2}, f2{5};
+
+ function_ref<int()> r1(f1);
+ function_ref<long()> r2(f1);
+
+ VERIFY( r1() == 2 );
+ VERIFY( r2() == 2 );
+
+ f1.v = 10;
+
+ VERIFY( r1() == 10 );
+ VERIFY( r2() == 10 );
+
+ r1 = function_ref<int()>(f2);
+ r2 = function_ref<long()>(f2);
+
+ VERIFY( r1() == 5 );
+ VERIFY( r2() == 5 );
+
+ f2.v = 13;
+
+ VERIFY( r1() == 13 );
+ VERIFY( r2() == 13 );
+
+ r1 = function_ref<int()>(f1);
+ r2 = function_ref<long()>(f1);
+
+ f1.v = 20;
+ VERIFY( r1() == 20 );
+ VERIFY( r2() == 20 );
+}
+
+void
+test02()
+{
+ struct S
+ {
+ int x;
+ int f() { return x; };
+ };
+ S s{10};
+
+ function_ref<int()> r1(nontype<&S::x>, s);
+ function_ref<long()> r2(nontype<&S::x>, &s);
+
+ VERIFY( r1() == 10 );
+ VERIFY( r2() == 10 );
+
+ s.x = 20;
+
+ VERIFY( r1() == 20 );
+ VERIFY( r2() == 20 );
+
+ r1 = function_ref<int()>(nontype<&S::f>, &s);
+ r2 = function_ref<long()>(nontype<&S::f>, s);
+
+ VERIFY( r1() == 20 );
+ VERIFY( r2() == 20 );
+
+ s.x = 30;
+
+ VERIFY( r1() == 30 );
+ VERIFY( r2() == 30 );
+}
+
+int main()
+{
+ test01();
+ test02();
+}
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc b/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
new file mode 100644
index 0000000..eec300f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
@@ -0,0 +1,41 @@
+// { dg-do run { target c++23 } }
+#include <mdspan>
+
+#include <cstdint>
+#include <testsuite_hooks.h>
+
+constexpr auto dyn = std::dynamic_extent;
+
+template<typename Extents>
+ constexpr void
+ test_default_ctor()
+ {
+ Extents exts;
+ for(size_t i = 0; i < Extents::rank(); ++i)
+ if(exts.static_extent(i) == std::dynamic_extent)
+ VERIFY(exts.extent(i) == 0);
+ else
+ VERIFY(exts.extent(i) == Extents::static_extent(i));
+ }
+
+constexpr bool
+test_default_ctor_all()
+{
+ test_default_ctor<std::extents<int, 1>>();
+ test_default_ctor<std::extents<int, dyn>>();
+ test_default_ctor<std::extents<int, 1, 2>>();
+ test_default_ctor<std::extents<int, dyn, 2>>();
+ test_default_ctor<std::extents<int, dyn, dyn>>();
+ test_default_ctor<std::extents<int, 1, 2, 3>>();
+ test_default_ctor<std::extents<int, dyn, 2, dyn>>();
+ test_default_ctor<std::extents<int, dyn, dyn, dyn>>();
+ return true;
+}
+
+int
+main()
+{
+ test_default_ctor_all();
+ static_assert(test_default_ctor_all());
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc
index 3274f05..40abb2c 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/82644.cc
@@ -15,8 +15,9 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__ -D__STRICT_ANSI__" }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
// { dg-do compile { target c++11 } }
+// // { dg-add-options strict_std }
#define conf_hyperg 1
#define conf_hypergf 2
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cstdlib/abs128.cc b/libstdc++-v3/testsuite/26_numerics/headers/cstdlib/abs128.cc
new file mode 100644
index 0000000..cfb0562
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/headers/cstdlib/abs128.cc
@@ -0,0 +1,16 @@
+// { dg-do compile }
+// { dg-add-options strict_std }
+
+#include <cstdlib>
+
+template<typename T> T same_type(T, T) { return T(); }
+
+#ifdef __SIZEOF_INT128__
+__int128 i = 0;
+__int128 j = same_type(std::abs(i), i);
+#endif
+
+#ifdef __SIZEOF_FLOAT128__
+__float128 f = 0.0;
+__float128 g = same_type(std::abs(f), f);
+#endif
diff --git a/libstdc++-v3/testsuite/experimental/names.cc b/libstdc++-v3/testsuite/experimental/names.cc
index e0a7d4f..4bedd53 100644
--- a/libstdc++-v3/testsuite/experimental/names.cc
+++ b/libstdc++-v3/testsuite/experimental/names.cc
@@ -22,6 +22,12 @@
// naming variables, parameters etc. in the library.
#include "../17_intro/names.cc"
+
+#ifdef _AIX
+// <netdb.h> declares endnetgrent_r with ptr parameter.
+# undef n
+#endif
+
// Filesystem
#if __has_include(<experimental/filesystem>)
# include <experimental/filesystem>
diff --git a/libstdc++-v3/testsuite/std/format/debug.cc b/libstdc++-v3/testsuite/std/format/debug.cc
index 6165a29..965b4df 100644
--- a/libstdc++-v3/testsuite/std/format/debug.cc
+++ b/libstdc++-v3/testsuite/std/format/debug.cc
@@ -1,6 +1,7 @@
// { dg-options "-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32LE -DUNICODE_ENC" { target le } }
// { dg-options "-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32BE -DUNICODE_ENC" { target be } }
// { dg-do run { target c++23 } }
+// { dg-require-effective-target 4byte_wchar_t }
// { dg-add-options no_pch }
// { dg-timeout-factor 2 }
diff --git a/libstdc++-v3/testsuite/std/format/functions/format.cc b/libstdc++-v3/testsuite/std/format/functions/format.cc
index 93c33b4..e4adf3a 100644
--- a/libstdc++-v3/testsuite/std/format/functions/format.cc
+++ b/libstdc++-v3/testsuite/std/format/functions/format.cc
@@ -1,6 +1,7 @@
// { dg-options "-fexec-charset=UTF-8" }
// { dg-do run { target c++20 } }
// { dg-add-options no_pch }
+// { dg-additional-options "-DUNICODE" { target 4byte_wchar_t } }
#include <format>
@@ -511,6 +512,7 @@ test_bool()
void
test_unicode()
{
+#ifdef UNICODE
// Similar to sC example in test_std_examples, but not from the standard.
// Verify that the character "🤡" has estimated field width 2,
// rather than estimated field width equal to strlen("🤡"), which would be 4,
@@ -564,6 +566,7 @@ test_unicode()
std::string sA = std::format("{:>5}", input[0]);
VERIFY( sA == input[1] );
}
+#endif
}
int main()
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/copy.cc b/libstdc++-v3/testsuite/std/memory/indirect/copy.cc
new file mode 100644
index 0000000..0ac6e92
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/copy.cc
@@ -0,0 +1,121 @@
+// { dg-do run { target c++26 } }
+
+#include <memory>
+#include <scoped_allocator>
+#include <utility>
+#include <vector>
+
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::tracker_allocator;
+using Counter = __gnu_test::tracker_allocator_counter;
+using Vector = std::vector<int>;
+using Indirect = std::indirect<Vector, tracker_allocator<Vector>>;
+const Indirect src(std::in_place, {1, 2, 3});
+
+constexpr void
+test_ctor()
+{
+ Counter::reset();
+ Indirect i1(src);
+ VERIFY( *i1 == *src );
+ VERIFY( &*i1 != &*src );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Counter::reset();
+ Indirect i2(std::allocator_arg, {}, src);
+ VERIFY( *i2 == *src );
+ VERIFY( &*i2 != &*src );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+constexpr void
+test_assign()
+{
+ Indirect i1;
+ Counter::reset();
+
+ i1 = src;
+ VERIFY( *i1 == *src );
+ VERIFY( &*i1 != &*src );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ auto(std::move(i1));
+ Counter::reset();
+
+ i1 = src;
+ VERIFY( *i1 == *src );
+ VERIFY( &*i1 != &*src );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+constexpr void
+test_valueless()
+{
+ Indirect e;
+ auto(std::move(e));
+ VERIFY( e.valueless_after_move() );
+
+ Counter::reset();
+ Indirect i1(e);
+ VERIFY( i1.valueless_after_move() );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Indirect i2(std::allocator_arg, {}, e);
+ VERIFY( i2.valueless_after_move() );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Indirect i3(src);
+ Counter::reset();
+ i3 = e;
+ VERIFY( i3.valueless_after_move() );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ Counter::reset();
+ i3 = e;
+ VERIFY( i3.valueless_after_move() );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+constexpr void
+test_all()
+{
+ test_ctor();
+ test_assign();
+ test_valueless();
+}
+
+int main()
+{
+ test_all();
+
+ static_assert([] {
+ test_all();
+ return true;
+ });
+}
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc b/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc
new file mode 100644
index 0000000..d5865b9
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc
@@ -0,0 +1,228 @@
+// { dg-do run { target c++26 } }
+
+#include <memory>
+#include <scoped_allocator>
+#include <utility>
+#include <vector>
+
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::propagating_allocator;
+using __gnu_test::tracker_allocator;
+using Counter = __gnu_test::tracker_allocator_counter;
+
+template<bool Propagate>
+constexpr void
+test_ctor()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ const Indirect src(std::allocator_arg, ScopedAlloc{11, 22},
+ std::in_place, {1, 2, 3});
+
+ Counter::reset();
+ Indirect i1(src);
+ VERIFY( *i1 == *src );
+ VERIFY( &*i1 != &*src );
+ if (Propagate)
+ {
+ VERIFY( i1->get_allocator().get_personality() == 22 );
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ }
+ else
+ {
+ VERIFY( i1->get_allocator().get_personality() == 0 );
+ VERIFY( i1.get_allocator().get_personality() == 0 );
+ }
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+
+ Counter::reset();
+ Indirect i2(std::allocator_arg, ScopedAlloc{33, 44}, src);
+ VERIFY( *i2 == *src );
+ VERIFY( &*i2 != &*src );
+ VERIFY( i2->get_allocator().get_personality() == 44 );
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+template<bool Propagate>
+constexpr void
+test_assign()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ const Indirect src(std::allocator_arg, ScopedAlloc{11, 22},
+ std::in_place, {1, 2, 3});
+
+ Indirect i1(std::allocator_arg, ScopedAlloc{11, 22});
+ Counter::reset();
+
+ i1 = src;
+ VERIFY( *i1 == *src );
+ VERIFY( &*i1 != &*src );
+ VERIFY( i1->get_allocator().get_personality() == 22 );
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Indirect i2(std::allocator_arg, ScopedAlloc{33, 44});
+ Counter::reset();
+
+ i2 = src;
+ VERIFY( *i2 == *src );
+ VERIFY( &*i2 != &*src );
+ if (Propagate)
+ {
+ VERIFY( i2->get_allocator().get_personality() == 22 );
+ VERIFY( i2.get_allocator().get_personality() == 11 );
+ }
+ else
+ {
+ VERIFY( i2->get_allocator().get_personality() == 44 );
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ }
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ Indirect i3(std::allocator_arg, ScopedAlloc{11, 22});
+ auto(std::move(i3));
+ Counter::reset();
+
+ i3 = src;
+ VERIFY( *i3 == *src );
+ VERIFY( &*i3 != &*src );
+ VERIFY( i3->get_allocator().get_personality() == 22 );
+ VERIFY( i3.get_allocator().get_personality() == 11 );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Indirect i4(std::allocator_arg, ScopedAlloc{33, 44});
+ auto(std::move(i4));
+ Counter::reset();
+
+ i4 = src;
+ VERIFY( *i4 == *src );
+ VERIFY( &*i4 != &*src );
+ if (Propagate)
+ {
+ VERIFY( i4->get_allocator().get_personality() == 22 );
+ VERIFY( i4.get_allocator().get_personality() == 11 );
+ }
+ else
+ {
+ VERIFY( i4->get_allocator().get_personality() == 44 );
+ VERIFY( i4.get_allocator().get_personality() == 33 );
+ }
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+template<bool Propagate>
+constexpr void
+test_valueless()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ Indirect e(std::allocator_arg, ScopedAlloc{11, 22});
+ auto(std::move(e));
+ VERIFY( e.valueless_after_move() );
+
+ Counter::reset();
+ Indirect i1(e);
+ VERIFY( i1.valueless_after_move() );
+ if (Propagate)
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ else
+ VERIFY( i1.get_allocator().get_personality() == 0 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Counter::reset();
+ Indirect i2(std::allocator_arg, ScopedAlloc{33, 44}, e);
+ VERIFY( i2.valueless_after_move() );
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+
+ Indirect i3(std::allocator_arg, ScopedAlloc{33, 44});
+ Counter::reset();
+
+ i3 = e;
+ VERIFY( i3.valueless_after_move() );
+ if (Propagate)
+ VERIFY( i3.get_allocator().get_personality() == 11 );
+ else
+ VERIFY( i3.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ Counter::reset();
+ i2 = e;
+ VERIFY( i2.valueless_after_move() );
+ if (Propagate)
+ VERIFY( i2.get_allocator().get_personality() == 11 );
+ else
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+template<bool Propagate>
+constexpr void
+test_all()
+{
+ test_ctor<Propagate>();
+ test_assign<Propagate>();
+ test_valueless<Propagate>();
+}
+
+int main()
+{
+ test_all<true>();
+ test_all<false>();
+
+ static_assert([] {
+ test_all<true>();
+ test_all<false>();
+ return true;
+ });
+}
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc b/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc
new file mode 100644
index 0000000..124874d
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/ctor.cc
@@ -0,0 +1,204 @@
+// { dg-do run { target c++26 } }
+
+#include <memory>
+#include <scoped_allocator>
+#include <utility>
+#include <vector>
+
+#ifndef __cpp_lib_indirect
+# error __cpp_lib_indirect feature test macro missing in <memory>
+#elif __cpp_lib_indirect != 202502
+# error __cpp_lib_indirect feature test macro has wrong value in <memory>
+#endif
+
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::uneq_allocator;
+using UneqAlloc = uneq_allocator<int>;
+using ScopedAlloc = std::scoped_allocator_adaptor<
+ uneq_allocator<std::vector<int, UneqAlloc>>,
+ UneqAlloc>;
+
+struct Obj
+{
+ int i;
+ char c[2];
+};
+
+constexpr void
+test_deduction_guides()
+{
+ const Obj o{};
+ std::indirect i1(o);
+ static_assert(std::is_same_v<decltype(i1), std::indirect<Obj>>);
+
+ using Alloc = __gnu_test::SimpleAllocator<Obj>;
+ Alloc a;
+ std::indirect i2(std::allocator_arg, a, o);
+ static_assert(std::is_same_v<decltype(i2), std::indirect<Obj, Alloc>>);
+}
+
+constexpr void
+test_default_ctor()
+{
+ using __gnu_test::default_init_allocator;
+
+ std::indirect<Obj, default_init_allocator<Obj>> i1;
+ default_init_allocator<int> a{};
+
+ // The contained object and the allocator should be value-initialized.
+ VERIFY( i1->i == 0 );
+ VERIFY( i1->c[0] == 0 );
+ VERIFY( i1->c[1] == 0 );
+ VERIFY( i1.get_allocator() == a );
+
+ a.state = 5;
+ // Allocator-extended default constructor:
+ std::indirect<Obj, default_init_allocator<Obj>> i2(std::allocator_arg, a);
+ VERIFY( i2.get_allocator() == a );
+
+ // Object is constructed using allocator-aware constructor.
+ std::indirect<std::vector<int, UneqAlloc>, ScopedAlloc>
+ i3(std::allocator_arg, ScopedAlloc(11, 22));
+ VERIFY( i3->empty() );
+ VERIFY( i3->get_allocator().get_personality() == 22 );
+ VERIFY( i3.get_allocator().get_personality() == 11 );
+}
+
+constexpr void
+test_forwarding_ctor()
+{
+ Obj obj{1, {'2', '3'}};
+ auto verify = [](std::indirect<Obj> const& i)
+ {
+ VERIFY( i->i == 1 );
+ VERIFY( i->c[0] == '2' );
+ VERIFY( i->c[1] == '3' );
+ };
+
+ std::indirect<Obj> i1(std::as_const(obj));
+ verify(i1);
+ std::indirect<Obj> i2(std::move(std::as_const(obj)));
+ verify(i2);
+ std::indirect<Obj> i3(obj);
+ verify(i3);
+ std::indirect<Obj> i4(std::move(obj));
+ verify(i4);
+
+ std::indirect<Obj> i5({1, {'2', '3'}});
+ verify(i5);
+
+ // Aggregate parens init
+ std::indirect<Obj> i6(7);
+ VERIFY( i6->i == 7 );
+
+ std::vector<int, UneqAlloc> v{1, 2, 3, 4, 5};
+ // Object is constructed using allocator-aware constructor.
+ std::indirect<std::vector<int, UneqAlloc>, ScopedAlloc>
+ i7(std::allocator_arg, ScopedAlloc(11, 22), v);
+ VERIFY( i7->size() == 5 );
+ VERIFY( v.size() == 5 );
+ VERIFY( i7->get_allocator().get_personality() == 22 );
+ VERIFY( i7.get_allocator().get_personality() == 11 );
+
+ std::indirect<std::vector<int, UneqAlloc>, ScopedAlloc>
+ i8(std::allocator_arg, ScopedAlloc(11, 22), std::move(v));
+ VERIFY( i8->size() == 5 );
+ VERIFY( v.size() == 0 );
+ VERIFY( i8->get_allocator().get_personality() == 22 );
+ VERIFY( i8.get_allocator().get_personality() == 11 );
+}
+
+constexpr void
+test_inplace_ctor()
+{
+ std::indirect<Obj> i1(std::in_place);
+ VERIFY( i1->i == 0 );
+ VERIFY( i1->c[0] == 0 );
+ VERIFY( i1->c[1] == 0 );
+
+ std::indirect<Obj> i2(std::in_place, 10);
+ VERIFY( i2->i == 10 );
+ VERIFY( i2->c[0] == 0 );
+ VERIFY( i2->c[1] == 0 );
+
+ std::indirect<Obj, uneq_allocator<Obj>>
+ i3(std::allocator_arg, 42, std::in_place);
+ VERIFY( i3->i == 0 );
+ VERIFY( i3->c[0] == 0 );
+ VERIFY( i3->c[1] == 0 );
+ VERIFY( i3.get_allocator().get_personality() == 42 );
+
+ std::indirect<Obj, uneq_allocator<Obj>>
+ i4(std::allocator_arg, 42, std::in_place, 10);
+ VERIFY( i4->i == 10 );
+ VERIFY( i4->c[0] == 0 );
+ VERIFY( i4->c[1] == 0 );
+ VERIFY( i4.get_allocator().get_personality() == 42 );
+
+ std::indirect<std::vector<int>> i5(std::in_place);
+ VERIFY( i5->size() == 0 );
+
+ std::indirect<std::vector<int>> i6(std::in_place, 5, 13);
+ VERIFY( i6->size() == 5 );
+ VERIFY( i6->at(0) == 13 );
+
+ std::indirect<std::vector<int>> i7(std::in_place, {1, 2, 3, 4});
+ VERIFY( i7->size() == 4 );
+ VERIFY( i7->at(2) == 3 );
+
+ std::indirect<std::vector<int, UneqAlloc>>
+ i8(std::in_place, UneqAlloc{42});
+ VERIFY( i8->size() == 0 );
+ VERIFY( i8->get_allocator().get_personality() == 42 );
+
+ std::indirect<std::vector<int, UneqAlloc>>
+ i9(std::in_place, 5, 13, UneqAlloc{42});
+ VERIFY( i9->size() == 5 );
+ VERIFY( i9->at(0) == 13 );
+ VERIFY( i9->get_allocator().get_personality() == 42 );
+
+ std::indirect<std::vector<int, UneqAlloc>>
+ i10(std::in_place, {1, 2, 3, 4}, UneqAlloc{42});
+ VERIFY( i10->size() == 4 );
+ VERIFY( i10->at(2) == 3 );
+ VERIFY( i10->get_allocator().get_personality() == 42 );
+
+ std::indirect<std::vector<int, UneqAlloc>, ScopedAlloc>
+ i14(std::allocator_arg, ScopedAlloc(11, 22),
+ std::in_place);
+ VERIFY( i14->size() == 0 );
+ VERIFY( i14->get_allocator().get_personality() == 22 );
+ VERIFY( i14.get_allocator().get_personality() == 11 );
+
+ std::indirect<std::vector<int, UneqAlloc>, ScopedAlloc>
+ i15(std::allocator_arg, ScopedAlloc(11, 22),
+ std::in_place, 5, 13);
+ VERIFY( i15->size() == 5 );
+ VERIFY( i15->at(0) == 13 );
+ VERIFY( i15->get_allocator().get_personality() == 22 );
+ VERIFY( i15.get_allocator().get_personality() == 11 );
+
+ std::indirect<std::vector<int, UneqAlloc>, ScopedAlloc>
+ i16(std::allocator_arg, ScopedAlloc(11, 22),
+ std::in_place, {1, 2, 3, 4});
+ VERIFY( i16->size() == 4 );
+ VERIFY( i16->at(2) == 3 );
+ VERIFY( i16->get_allocator().get_personality() == 22 );
+ VERIFY( i16.get_allocator().get_personality() == 11 );
+}
+
+int main()
+{
+ test_default_ctor();
+ test_forwarding_ctor();
+ test_inplace_ctor();
+
+ static_assert([] {
+ test_default_ctor();
+ test_forwarding_ctor();
+ test_inplace_ctor();
+ return true;
+ });
+}
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/incomplete.cc b/libstdc++-v3/testsuite/std/memory/indirect/incomplete.cc
new file mode 100644
index 0000000..1faf13d
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/incomplete.cc
@@ -0,0 +1,38 @@
+// { dg-do compile { target c++26 } }
+
+#include <memory>
+
+struct Incomplete;
+bool operator==(const Incomplete&, const Incomplete&);
+std::strong_ordering operator<=>(const Incomplete&, const Incomplete&);
+
+template<>
+struct std::hash<Incomplete>
+{
+ static std::size_t operator()(const Incomplete& c);
+};
+
+std::indirect<Incomplete>*
+test_move(std::indirect<Incomplete>& i1, std::indirect<Incomplete>& i2)
+{
+ i2.swap(i2);
+ return new std::indirect<Incomplete>(std::move(i1));
+}
+
+void
+test_relops(std::indirect<Incomplete> const& i1, Incomplete const& o)
+{
+ void(i1 == i1);
+ void(i1 < i1);
+ void(i1 >= i1);
+
+ void(i1 != o);
+ void(i1 < o);
+}
+
+void
+test_hash(std::indirect<Incomplete> const& i1)
+{
+ std::hash<std::indirect<Incomplete>> h;
+ h(i1);
+}
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/invalid_neg.cc b/libstdc++-v3/testsuite/std/memory/indirect/invalid_neg.cc
new file mode 100644
index 0000000..82e7e84
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/invalid_neg.cc
@@ -0,0 +1,28 @@
+// { dg-do compile { target c++26 } }
+
+#include <memory>
+
+// In every specialization indirect<T, Allocator>, if the type
+// allocator_traits<Allocator>::value_type is not the same type as T,
+// the program is ill-formed.
+using T1 = std::indirect<int, std::allocator<long>>::value_type; // { dg-error "here" }
+
+// A program that instantiates the definition of the template
+// indirect<T, Allocator> with a type for the T parameter that is
+// a non-object type, an array type, in_place_t,
+// a specialization of in_place_type_t, or a cv-qualified type is ill-formed.
+
+using T2 = std::indirect<int&>::value_type; // { dg-error "here" }
+
+using T3 = std::indirect<int[1]>::value_type; // { dg-error "here" }
+
+using T4 = std::indirect<std::in_place_t>::value_type; // { dg-error "here" }
+
+using T5 = std::indirect<std::in_place_type_t<int>>::value_type; // { dg-error "here" }
+
+using T6 = std::indirect<const int>::value_type; // { dg-error "here" }
+
+using T7 = std::indirect<volatile int>::value_type; // { dg-error "here" }
+
+// { dg-error "static assertion failed" "" { target *-*-* } 0 }
+// { dg-prune-output "forming pointer to reference" }
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/move.cc b/libstdc++-v3/testsuite/std/memory/indirect/move.cc
new file mode 100644
index 0000000..6e87c60
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/move.cc
@@ -0,0 +1,144 @@
+// { dg-do run { target c++26 } }
+
+#include <memory>
+#include <scoped_allocator>
+#include <utility>
+#include <vector>
+#include <optional>
+
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::tracker_allocator;
+using Counter = __gnu_test::tracker_allocator_counter;
+using Vector = std::vector<int>;
+using Indirect = std::indirect<Vector, tracker_allocator<Vector>>;
+const Indirect val(std::in_place, {1, 2, 3});
+
+constexpr void
+verifyNoAllocations()
+{
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+constexpr void
+test_ctor()
+{
+ std::optional<Indirect> src;
+ auto make = [&src] -> Indirect&& {
+ src.emplace(val);
+ Counter::reset();
+ return std::move(*src);
+ };
+
+ Indirect i1(make());
+ VERIFY( src->valueless_after_move() );
+ VERIFY( *i1 == *val );
+ verifyNoAllocations();
+
+ Indirect i2(std::allocator_arg, {}, make());
+ VERIFY( src->valueless_after_move() );
+ VERIFY( *i2 == *val );
+ verifyNoAllocations();
+}
+
+constexpr void
+test_assign()
+{
+ std::optional<Indirect> src;
+ auto make = [&src] -> Indirect&& {
+ src.emplace(val);
+ Counter::reset();
+ return std::move(*src);
+ };
+
+ Indirect i1;
+
+ i1 = make();
+ VERIFY( src->valueless_after_move() );
+ VERIFY( *i1 == *val );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ auto(std::move(i1));
+ i1 = make();
+ VERIFY( *i1 == *val );
+ VERIFY( src->valueless_after_move() );
+ verifyNoAllocations();
+}
+
+constexpr void
+test_swap()
+{
+ const Indirect val1(std::in_place, {1, 2, 3});
+ const Indirect val2(std::in_place, {2, 4, 6});
+
+ Indirect i1(val1);
+ Indirect i2(val2);
+ Counter::reset();
+ i1.swap(i2);
+ VERIFY( *i2 == *val1 );
+ VERIFY( *i1 == *val2 );
+ verifyNoAllocations();
+
+ auto(std::move(i1));
+
+ Counter::reset();
+ i1.swap(i2);
+ VERIFY( *i1 == *val1 );
+ VERIFY( i2.valueless_after_move() );
+ verifyNoAllocations();
+}
+
+constexpr void
+test_valueless()
+{
+ auto e = [] {
+ Indirect res;
+ auto(std::move(res));
+ Counter::reset();
+ return res;
+ };
+
+ Indirect i1(e());
+ VERIFY( i1.valueless_after_move() );
+ verifyNoAllocations();
+
+ Indirect i2(std::allocator_arg, {}, e());
+ VERIFY( i2.valueless_after_move() );
+ verifyNoAllocations();
+
+ Indirect i3(val);
+ i3 = e();
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ i3 = e();
+ verifyNoAllocations();
+}
+
+constexpr void
+test_all()
+{
+ test_ctor();
+ test_assign();
+ test_swap();
+ test_valueless();
+}
+
+int main()
+{
+ test_all();
+
+ static_assert([] {
+ test_all();
+ return true;
+ });
+}
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc b/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc
new file mode 100644
index 0000000..cd6f90d
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc
@@ -0,0 +1,296 @@
+// { dg-do run { target c++26 } }
+
+#include <memory>
+#include <scoped_allocator>
+#include <utility>
+#include <vector>
+#include <optional>
+
+#include <testsuite_hooks.h>
+#include <testsuite_allocator.h>
+
+using __gnu_test::propagating_allocator;
+using __gnu_test::tracker_allocator;
+using Counter = __gnu_test::tracker_allocator_counter;
+
+constexpr void
+verifyNoAllocations()
+{
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+template<bool Propagate>
+constexpr void
+test_ctor()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ const Indirect val(std::in_place, {1, 2, 3});
+ std::optional<Indirect> src;
+ auto make = [&val, &src] -> Indirect&& {
+ src.emplace(std::allocator_arg, ScopedAlloc{11, 22}, val);
+ Counter::reset();
+ return std::move(*src);
+ };
+
+ Indirect i1(make());
+ VERIFY( src->valueless_after_move() );
+ VERIFY( *i1 == *val );
+ VERIFY( i1->get_allocator().get_personality() == 22 );
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ verifyNoAllocations();
+
+ Indirect i2(std::allocator_arg, ScopedAlloc{11, 22}, make());
+ VERIFY( src->valueless_after_move() );
+ VERIFY( *i2 == *val );
+ VERIFY( i2->get_allocator().get_personality() == 22 );
+ VERIFY( i2.get_allocator().get_personality() == 11 );
+ verifyNoAllocations();
+
+ Indirect i3(std::allocator_arg, ScopedAlloc{33, 44}, make());
+ // We move-from contained object
+ VERIFY( !src->valueless_after_move() );
+ VERIFY( *i3 == *val );
+ VERIFY( i3->get_allocator().get_personality() == 44 );
+ VERIFY( i3.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 1 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+template<bool Propagate>
+constexpr void
+test_assign()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ const Indirect val(std::in_place, {1, 2, 3});
+ std::optional<Indirect> src;
+ auto make = [&val, &src] -> Indirect&& {
+ src.emplace(std::allocator_arg, ScopedAlloc{11, 22}, val);
+ Counter::reset();
+ return std::move(*src);
+ };
+
+ Indirect i1(std::allocator_arg, ScopedAlloc{11, 22});
+
+ i1 = make();
+ VERIFY( src->valueless_after_move() );
+ VERIFY( *i1 == *val );
+ VERIFY( i1->get_allocator().get_personality() == 22 );
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ Indirect i2(std::allocator_arg, ScopedAlloc{33, 44});
+
+ i2 = make();
+ VERIFY( *i2 == *val );
+ if (Propagate)
+ {
+ VERIFY( src->valueless_after_move() );
+ VERIFY( i2->get_allocator().get_personality() == 22 );
+ VERIFY( i2.get_allocator().get_personality() == 11 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ }
+ else
+ {
+ // We allocate new holder and move-from contained object
+ VERIFY( !src->valueless_after_move() );
+ VERIFY( i2->get_allocator().get_personality() == 44 );
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 1 );
+ }
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ Indirect i3(std::allocator_arg, ScopedAlloc{11, 22});
+ auto(std::move(i3));
+
+ i3 = make();
+ VERIFY( *i3 == *val );
+ VERIFY( src->valueless_after_move() );
+ VERIFY( i3->get_allocator().get_personality() == 22 );
+ VERIFY( i3.get_allocator().get_personality() == 11 );
+ verifyNoAllocations();
+
+ Indirect i4(std::allocator_arg, ScopedAlloc{33, 44});
+ auto(std::move(i4));
+
+ i4 = make();
+ VERIFY( *i4 == *val );
+ if (Propagate)
+ {
+ VERIFY( src->valueless_after_move() );
+ VERIFY( i4->get_allocator().get_personality() == 22 );
+ VERIFY( i4.get_allocator().get_personality() == 11 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_construct_count() == 0 );
+ }
+ else
+ {
+ // We allocate new holder and move-from contained object
+ VERIFY( !src->valueless_after_move() );
+ VERIFY( i4->get_allocator().get_personality() == 44 );
+ VERIFY( i4.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 1 );
+ }
+ VERIFY( Counter::get_deallocation_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 0 );
+}
+
+template<bool Propagate>
+constexpr void
+test_swap()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ const Indirect val1(std::in_place, {1, 2, 3});
+ const Indirect val2(std::in_place, {2, 4, 6});
+
+ Indirect i1(std::allocator_arg, ScopedAlloc{11, 22}, val1);
+ Indirect i2(std::allocator_arg, ScopedAlloc{11, 22}, val2);
+ Counter::reset();
+ i1.swap(i2);
+ VERIFY( *i2 == *val1 );
+ VERIFY( *i1 == *val2 );
+ verifyNoAllocations();
+
+ auto(std::move(i1));
+
+ Counter::reset();
+ i1.swap(i2);
+ VERIFY( *i1 == *val1 );
+ VERIFY( i2.valueless_after_move() );
+ verifyNoAllocations();
+
+ if (!Propagate)
+ return;
+
+ Indirect i3(std::allocator_arg, ScopedAlloc{33, 44}, val2);
+ Counter::reset();
+ i1.swap(i3);
+ VERIFY( *i1 == *val2 );
+ VERIFY( i1->get_allocator().get_personality() == 44 );
+ VERIFY( i1.get_allocator().get_personality() == 33 );
+ VERIFY( *i3 == *val1 );
+ VERIFY( i3->get_allocator().get_personality() == 22 );
+ VERIFY( i3.get_allocator().get_personality() == 11 );
+ verifyNoAllocations();
+
+ i1.swap(i2);
+ VERIFY( i1.valueless_after_move() );
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ VERIFY( *i2 == *val2 );
+ VERIFY( i2->get_allocator().get_personality() == 44 );
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ verifyNoAllocations();
+}
+
+template<bool Propagate>
+constexpr void
+test_valueless()
+{
+ using PropAlloc = propagating_allocator<int, Propagate>;
+ using Vector = std::vector<int, PropAlloc>;
+ using ScopedAlloc = std::scoped_allocator_adaptor<
+ propagating_allocator<Vector, Propagate, tracker_allocator<Vector>>,
+ PropAlloc>;
+ using Indirect = std::indirect<Vector, ScopedAlloc>;
+
+ auto e = [] {
+ Indirect res(std::allocator_arg, ScopedAlloc{11, 22});
+ auto(std::move(res));
+ Counter::reset();
+ return res;
+ };
+
+ Indirect i1(e());
+ VERIFY( i1.valueless_after_move() );
+ VERIFY( i1.get_allocator().get_personality() == 11 );
+ verifyNoAllocations();
+
+ Indirect i2(std::allocator_arg, ScopedAlloc{33, 44}, e());
+ VERIFY( i2.valueless_after_move() );
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ verifyNoAllocations();
+
+ Indirect i3(std::allocator_arg, ScopedAlloc{33, 44});
+
+ i3 = e();
+ VERIFY( i3.valueless_after_move() );
+ if (Propagate)
+ VERIFY( i3.get_allocator().get_personality() == 11 );
+ else
+ VERIFY( i3.get_allocator().get_personality() == 33 );
+ VERIFY( Counter::get_allocation_count() == 0 );
+ VERIFY( Counter::get_deallocation_count() == sizeof(Vector) );
+ VERIFY( Counter::get_construct_count() == 0 );
+ VERIFY( Counter::get_destruct_count() == 1 );
+
+ i2 = e();
+ VERIFY( i2.valueless_after_move() );
+ if (Propagate)
+ VERIFY( i2.get_allocator().get_personality() == 11 );
+ else
+ VERIFY( i2.get_allocator().get_personality() == 33 );
+ verifyNoAllocations();
+
+ i3.swap(i2);
+ VERIFY( i2.valueless_after_move() );
+ VERIFY( i1.valueless_after_move() );
+ verifyNoAllocations();
+
+ if (!Propagate)
+ return;
+
+ Indirect i4(std::allocator_arg, ScopedAlloc{33, 44}, e());
+ i4.swap(i1);
+ verifyNoAllocations();
+}
+
+template<bool Propagate>
+constexpr void
+test_all()
+{
+ test_ctor<Propagate>();
+ test_assign<Propagate>();
+ test_swap<Propagate>();
+ test_valueless<Propagate>();
+}
+
+int main()
+{
+ test_all<true>();
+ test_all<false>();
+
+ static_assert([] {
+ test_all<true>();
+ test_all<false>();
+ return true;
+ });
+}
diff --git a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc
new file mode 100644
index 0000000..d77fef2
--- /dev/null
+++ b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc
@@ -0,0 +1,82 @@
+// { dg-do run { target c++26 } }
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+struct Obj
+{
+ int i;
+ constexpr auto operator<=>(const Obj&) const = default;
+};
+
+template<>
+struct std::hash<Obj>
+{
+ static size_t operator()(Obj const& obj)
+ { return std::hash<int>{}(obj.i); }
+};
+
+constexpr void
+test_relops()
+{
+ std::indirect<Obj> i1;
+ VERIFY( i1 == i1 );
+ VERIFY( i1 <= i1 );
+ VERIFY( i1 >= i1 );
+
+ std::indirect<Obj> i2 = std::move(i1); // make i1 valueless
+ VERIFY( i1 == i1 );
+ VERIFY( i2 == i2 );
+ VERIFY( i2 != i1 );
+ VERIFY( i1 < i2 );
+ VERIFY( i2 >= i1 );
+
+ std::indirect<Obj> i3 = std::move(i2); // make i2 valueless
+ VERIFY( i2 == i1 );
+ VERIFY( i2 >= i1 );
+ VERIFY( i2 <= i1 );
+ VERIFY( i3 > i2 );
+}
+
+constexpr void
+test_comp_with_t()
+{
+ std::indirect<Obj> i1;
+ Obj o{2};
+ VERIFY( i1 != o );
+ VERIFY( i1 < o );
+
+ std::indirect<Obj> i2(Obj{2});
+ VERIFY( i2 == o );
+ VERIFY( i2 <= o );
+ VERIFY( o <= i2 );
+
+ std::indirect<Obj> i3 = std::move(i2); // make i2 valueless
+ VERIFY( i2 != o );
+ VERIFY( i2 < o );
+}
+
+void
+test_hash()
+{
+ Obj o{5};
+ std::indirect<Obj> i(o);
+ VERIFY( std::hash<std::indirect<Obj>>{}(i)
+ == std::hash<Obj>{}(o) );
+
+ auto(std::move(i)); // make i valueless
+ (void)std::hash<std::indirect<Obj>>{}(i);
+}
+
+int main()
+{
+ test_relops();
+ test_comp_with_t();
+ test_hash();
+
+ static_assert([] {
+ test_relops();
+ test_comp_with_t();
+ return true;
+ });
+}