aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog366
-rw-r--r--gcc/testsuite/cobol.dg/group1/declarative_1.cob6
-rw-r--r--gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/88_level_with_FILLER.cob20
-rw-r--r--gcc/testsuite/cobol.dg/group2/88_level_with_THRU.cob86
-rw-r--r--gcc/testsuite/cobol.dg/group2/ADD_CORRESPONDING.cob39
-rw-r--r--gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALPHABETIC-LOWER_test.cob23
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALPHABETIC-UPPER_test.cob23
-rw-r--r--gcc/testsuite/cobol.dg/group2/ALPHABETIC_test.cob23
-rw-r--r--gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob106
-rw-r--r--gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob43
-rw-r--r--gcc/testsuite/cobol.dg/group2/Contained_program_visibility__3_.cob42
-rw-r--r--gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.cob46
-rw-r--r--gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/DEBUG_Line.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/DEBUG_Line.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.cob82
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.out37
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.cob38
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.out8
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.cob31
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.out8
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out7
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob1
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_FD__1_.cob42
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_FD__2_.cob42
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_FD__3_.cob41
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_FD__4_.cob41
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.cob37
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.cob37
-rw-r--r--gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/MULTIPLY_BY_literal_in_INITIAL_program.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.cob69
-rw-r--r--gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out13
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob35
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob292
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob292
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__4_.cob292
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__5_.cob292
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__7_.cob283
-rw-r--r--gcc/testsuite/cobol.dg/group2/Numeric_operations__8_.cob37
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.cob427
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.out71
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.cob428
-rw-r--r--gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out71
-rw-r--r--gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Simple_TYPEDEF.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Simple_p-scaling.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/Simple_p-scaling.out11
-rw-r--r--gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.cob21
-rw-r--r--gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/integer_arithmetic_on_floating-point_var.cob29
-rw-r--r--gcc/testsuite/g++.dg/abi/macro0.C2
-rw-r--r--gcc/testsuite/g++.dg/abi/ref-temp1.C13
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-noexcept1.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C4
-rw-r--r--gcc/testsuite/g++.dg/eh/pr119507.C21
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov.exp15
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C25
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C9
-rw-r--r--gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C10
-rw-r--r--gcc/testsuite/g++.dg/no-stack-protector-attr-3.C1
-rw-r--r--gcc/testsuite/g++.dg/opt/pr119327.C16
-rw-r--r--gcc/testsuite/g++.dg/template/recurse5.C17
-rw-r--r--gcc/testsuite/g++.dg/torture/pr119610.C18
-rw-r--r--gcc/testsuite/g++.target/aarch64/spaceship_1.C192
-rw-r--r--gcc/testsuite/g++.target/aarch64/spaceship_2.C72
-rw-r--r--gcc/testsuite/g++.target/aarch64/spaceship_3.C9
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C20
-rw-r--r--gcc/testsuite/gcc.dg/completion-2.c1
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c30
-rw-r--r--gcc/testsuite/gcc.dg/memcpy-4.c7
-rw-r--r--gcc/testsuite/gcc.dg/pr116357.c6
-rw-r--r--gcc/testsuite/gcc.dg/pr116479.c26
-rw-r--r--gcc/testsuite/gcc.dg/pr118947-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr78408-3.c14
-rw-r--r--gcc/testsuite/gcc.dg/raw-string-1.c25
-rw-r--r--gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c71
-rw-r--r--gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c74
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c30
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c21
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c30
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c26
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c25
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-early-break_38.c1
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-31.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov.exp15
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c54
-rw-r--r--gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c7
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c22
-rw-r--r--gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c24
-rw-r--r--gcc/testsuite/gcc.target/aarch64/bic-1.c40
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c15
-rw-r--r--gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c76
-rw-r--r--gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c64
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c79
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/blendv-to-pand.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr119919.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/pr89618-2.c8
-rw-r--r--gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c12
-rw-r--r--gcc/testsuite/gcc.target/mips/clear-cache-1.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/memcpy-2.c12
-rw-r--r--gcc/testsuite/gcc.target/powerpc/power11-3.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/arch-25.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-1.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-2.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-3.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-4.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-5.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-6.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-7.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-c-8.c6
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-zce-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-zce-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-zce-3.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/attribute-zce-4.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/bext-ext-2.c74
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c48
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c50
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c35
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c51
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c34
-rw-r--r--gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c56
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr108016.c33
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr118410-1.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr118410-2.c9
-rw-r--r--gcc/testsuite/gcc.target/s390/pr119873-1.c11
-rw-r--r--gcc/testsuite/gcc.target/s390/pr119873-2.c17
-rw-r--r--gcc/testsuite/gcc.target/s390/pr119873-3.c27
-rw-r--r--gcc/testsuite/gcc.target/s390/pr119873-4.c27
-rw-r--r--gcc/testsuite/gcc.target/s390/pr119873-5.c11
-rw-r--r--gcc/testsuite/gcc.target/sh/pr111814.c7
-rw-r--r--gcc/testsuite/gdc.dg/gcov.exp15
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/coindexed_3.f081
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/coindexed_5.f9080
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/get_team_1.f9029
-rw-r--r--gcc/testsuite/gfortran.dg/coarray/image_status_1.f082
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_10.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_49.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_collectives_12.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_collectives_16.f902
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_critical_2.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_critical_3.f9032
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f904
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f904
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_this_image_1.f9063
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_this_image_2.f9068
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_this_image_3.f9031
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f902
-rw-r--r--gcc/testsuite/gfortran.dg/move_alloc_11.f9023
-rw-r--r--gcc/testsuite/gfortran.dg/num_images_1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr102458.f902
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_1.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_2.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_3.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/pr119836_4.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_52.f901
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_57.f9036
-rw-r--r--gcc/testsuite/gfortran.dg/team_change_2.f9093
-rw-r--r--gcc/testsuite/gfortran.dg/team_change_3.f9029
-rw-r--r--gcc/testsuite/gfortran.dg/team_end_2.f9042
-rw-r--r--gcc/testsuite/gfortran.dg/team_end_3.f9041
-rw-r--r--gcc/testsuite/gfortran.dg/team_form_2.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/team_form_3.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/team_get_1.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/team_number_1.f906
-rw-r--r--gcc/testsuite/gfortran.dg/team_sync_1.f9024
-rw-r--r--gcc/testsuite/gfortran.dg/team_sync_2.f9027
-rw-r--r--gcc/testsuite/gm2/pim/fail/constintarraybyte.mod10
-rw-r--r--gcc/testsuite/gm2/pimlib/run/pass/format2.mod63
-rw-r--r--gcc/testsuite/gnat.dg/gcov/gcov.exp15
-rw-r--r--gcc/testsuite/lib/target-supports.exp10
-rw-r--r--gcc/testsuite/rust/compile/nr2/compile.exp11
236 files changed, 7595 insertions, 172 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4e61317..47666a9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,369 @@
+2025-04-24 Jakub Jelinek <jakub@redhat.com>
+ Stefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
+
+ PR target/119873
+ * gcc.target/s390/pr119873-1.c: New test.
+ * gcc.target/s390/pr119873-2.c: New test.
+ * gcc.target/s390/pr119873-3.c: New test.
+ * gcc.target/s390/pr119873-4.c: New test.
+
+2025-04-24 Robert Dubner <rdubner@symas.com>
+
+ * cobol.dg/group1/declarative_1.cob: Adjust for repaired exception logic.
+
+2025-04-24 Jan Hubicka <hubicka@ucw.cz>
+
+ * gcc.target/i386/pr119919.c: New test.
+
+2025-04-24 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR target/119610
+ * g++.dg/torture/pr119610.C: New test.
+ * g++.target/aarch64/sve/pr119610-sve.C: Likewise.
+
+2025-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/110343
+ * gcc.dg/raw-string-1.c: New test.
+
+2025-04-24 Kyrylo Tkachov <ktkachov@nvidia.com>
+
+ * gcc.dg/completion-2.c: Remove check for default.
+
+2025-04-24 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/119915
+ * gm2/pimlib/run/pass/format2.mod: New test.
+
+2025-04-24 liuhongt <hongtao.liu@intel.com>
+
+ * gcc.target/i386/avx512vl-pr103750-1.c: New test.
+ * gcc.target/i386/avx512f-pr96891-3.c: Adjust testcase.
+ * gcc.target/i386/avx512f-vpcmpgtuq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpeqq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpequq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpgeq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpgeuq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpgtq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpgtuq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpleq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpleuq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpltq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpltuq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpneqq-1.c: Ditto.
+ * gcc.target/i386/avx512vl-vpcmpnequq-1.c: Ditto.
+
+2025-04-24 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/119914
+ * gm2/pim/fail/constintarraybyte.mod: New test.
+
+2025-04-23 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * g++.dg/no-stack-protector-attr-3.C: Require effective target
+ fstack_protector.
+
+2025-04-23 Jan Hubicka <hubicka@ucw.cz>
+
+ * gcc.dg/ipa/ipa-clone-4.c: New file.
+ * gcc.dg/tree-prof/ipa-cp-1.c: New file.
+
+2025-04-23 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/71233
+ * gcc.target/aarch64/advsimd-intrinsics/vld1x2.c: Enable on arm.
+ * gcc.target/aarch64/advsimd-intrinsics/vld1x3.c: Likewise.
+ * gcc.target/aarch64/advsimd-intrinsics/vld1x4.c: Likewise.
+ * gcc.target/aarch64/advsimd-intrinsics/vst1x2.c: Likewise.
+ * gcc.target/aarch64/advsimd-intrinsics/vst1x3.c: Likewise.
+ * gcc.target/aarch64/advsimd-intrinsics/vst1x4.c: Likewise.
+
+2025-04-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * g++.dg/eh/pr119507.C: Skip on sparc*-*-solaris2* && !gas.
+
+2025-04-23 Tamar Christina <tamar.christina@arm.com>
+
+ PR target/119286
+ * gcc.dg/vect/vect-early-break_38.c: Force -march=gfx908 for amdgcn.
+
+2025-04-23 liuhongt <hongtao.liu@intel.com>
+
+ * gcc.target/i386/blendv-to-maxmin.c: New test.
+ * gcc.target/i386/blendv-to-pand.c: New test.
+
+2025-04-22 Jan Hubicka <hubicka@ucw.cz>
+
+ * gcc.target/i386/pr89618-2.c: XFAIL.
+
+2025-04-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/119327
+ * g++.dg/opt/pr119327.C: New test.
+
+2025-04-22 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.target/aarch64/pragma_cpp_predefs_4.c: Test
+ __ARM_FEATURE_FAMINMAX.
+
+2025-04-22 Spencer Abson <spencer.abson@arm.com>
+
+ * gcc.target/aarch64/_Float16_cmp_1.c: New test.
+ * gcc.target/aarch64/_Float16_cmp_2.c: New (negative) test.
+
+2025-04-22 Spencer Abson <spencer.abson@arm.com>
+
+ PR target/117013
+ * g++.target/aarch64/spaceship_1.C: New test.
+ * g++.target/aarch64/spaceship_2.C: New test.
+ * g++.target/aarch64/spaceship_3.C: New test.
+
+2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ * gfortran.dg/coarray/coindexed_3.f08: Add minimal test for
+ get_team().
+ * gfortran.dg/team_change_2.f90: Add test for change team with
+ label and exiting out of it.
+ * gfortran.dg/team_end_2.f90: Check parsing to labeled team
+ blocks is correct now.
+ * gfortran.dg/team_end_3.f90: Check that end_team call is
+ generated for labeled end_teams, too.
+ * gfortran.dg/coarray/coindexed_5.f90: New test.
+
+2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ * gfortran.dg/coarray_49.f90: Adapt to changed error message.
+ * gfortran.dg/coarray_collectives_12.f90: Adapt to changed
+ function signature of num_images.
+ * gfortran.dg/coarray_collectives_16.f90: Same.
+ * gfortran.dg/coarray_lib_this_image_1.f90: Same.
+ * gfortran.dg/coarray_lib_this_image_2.f90: Same.
+ * gfortran.dg/coarray_this_image_1.f90: Adapt tests for
+ num_images.
+ * gfortran.dg/coarray_this_image_2.f90: Same.
+ * gfortran.dg/coarray_this_image_3.f90: Same.
+ * gfortran.dg/num_images_1.f90: Check that deprecated syntax is
+ no longer supported.
+
+2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/87326
+ * gfortran.dg/coarray_10.f90: Update error messages.
+ * gfortran.dg/coarray_lib_this_image_1.f90: Same.
+ * gfortran.dg/coarray_lib_this_image_2.f90: Same.
+ * gfortran.dg/coarray_this_image_1.f90: Add more tests and
+ remove incorrect ones.
+ * gfortran.dg/coarray_this_image_2.f90: Test more features.
+ * gfortran.dg/coarray_this_image_3.f90: New test.
+
+2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/88154
+ PR fortran/88960
+ PR fortran/97210
+ PR fortran/103001
+ * gfortran.dg/coarray/image_status_1.f08: Correct check for
+ team_type.
+ * gfortran.dg/pr102458.f90: Adapt to multiple errors.
+ * gfortran.dg/coarray/get_team_1.f90: New test.
+ * gfortran.dg/team_get_1.f90: New test.
+ * gfortran.dg/team_number_1.f90: Correct Fortran syntax.
+
+2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/87326
+ PR fortran/87556
+ PR fortran/88254
+ PR fortran/103796
+ * gfortran.dg/team_change_2.f90: New test.
+ * gfortran.dg/team_change_3.f90: New test.
+ * gfortran.dg/team_end_2.f90: New test.
+ * gfortran.dg/team_end_3.f90: New test.
+ * gfortran.dg/team_form_2.f90: New test.
+ * gfortran.dg/team_form_3.f90: New test.
+ * gfortran.dg/team_sync_2.f90: New test.
+
+2025-04-22 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/87939
+ * gfortran.dg/coarray_critical_2.f90: New test.
+ * gfortran.dg/coarray_critical_3.f90: New test.
+ * gfortran.dg/team_sync_1.f90: New test.
+ * gfortran.dg/move_alloc_11.f90: New test.
+
+2025-04-22 Yixuan Chen <chenyixuan@iscas.ac.cn>
+
+ * gcc.target/riscv/mcpu-xt-c908.c: test -mcpu=xt-c908.
+ * gcc.target/riscv/mcpu-xt-c910.c: test -mcpu=xt-c910.
+ * gcc.target/riscv/mcpu-xt-c920v2.c: test -mcpu=xt-c920v2.
+ * gcc.target/riscv/mcpu-xt-c908v.c: test -mcpu=xt-c908v.
+ * gcc.target/riscv/mcpu-xt-c910v2.c: test -mcpu=xt-c910v2.
+ * gcc.target/riscv/mcpu-xt-c920.c: test -mcpu=xt-c920.
+
+2025-04-22 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * g++.dg/gcov/gcov.exp: Handle GCOV_UNDER_TEST.
+ * gcc.misc-tests/gcov.exp: Likewise.
+ * gdc.dg/gcov.exp: Likewise.
+ * gnat.dg/gcov/gcov.exp: Likewise.
+
+2025-04-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.misc-tests/gcov-31.c (run_pending_traps): Use sigsetjmp
+ instead of __sigsetjmp.
+
+2025-04-22 Nathaniel Shead <nathanieloshead@gmail.com>
+
+ PR c++/119863
+ * g++.dg/modules/tpl-friend-18_a.C: New test.
+ * g++.dg/modules/tpl-friend-18_b.C: New test.
+ * g++.dg/modules/tpl-friend-18_c.C: New test.
+
+2025-04-22 Andrew Pinski <quic_apinski@quicinc.com>
+
+ * g++.dg/eh/pr119507.C: Skip for arm eabi.
+
+2025-04-22 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.target/powerpc/power11-3.c: Require ifunc support.
+
+2025-04-21 Jason Merrill <jason@redhat.com>
+
+ PR c++/118775
+ * g++.dg/cpp2a/constexpr-new24.C: Adjust diagnostic.
+
+2025-04-21 Andrew Bennett <andrew.bennett@imgtec.com>
+
+ * gcc.dg/memcpy-4.c: Remove mips specific code.
+ * gcc.target/mips/memcpy-2.c: New test.
+
+2025-04-21 Matthew Fortune <matthew.fortune@imgtec.com>
+
+ * gcc.target/mips/clear-cache-1.c: Also allow jrc.
+
+2025-04-21 Matthew Fortune <matthew.fortune@imgtec.com>
+
+ * gcc.dg/tree-ssa/ssa-dom-cse-2.c: Do not check output for
+ MIPS lp64 abi.
+
+2025-04-21 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/119507
+ * g++.dg/eh/pr119507.C: New test.
+
+2025-04-21 hongtao.liu <hongtao.liu@intel.com>
+
+ * gcc.target/i386/recip-vec-divf-fma.c: New test.
+
+2025-04-20 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/117863
+ * gcc.dg/rtl/i386/vector_eq-2.c: New test.
+ * gcc.dg/rtl/i386/vector_eq-3.c: Likewise.
+
+2025-04-19 Thomas Schwinge <tschwinge@baylibre.com>
+
+ PR testsuite/119508
+ * rust/compile/nr2/compile.exp: Disable parallel testing.
+
+2025-04-19 Co-authored-by: Jeff Law <jlaw@ventanamicro.com>
+
+ PR target/118410
+ * gcc.target/riscv/pr118410-1.c: New test.
+ * gcc.target/riscv/pr118410-2.c: Likewise.
+
+2025-04-19 Andrew Pinski <quic_apinski@quicinc.com>
+
+ * gcc.dg/pr118947-1.c: Use 1025 as the size of the buf.
+ * gcc.dg/pr78408-3.c: Likewise.
+
+2025-04-19 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR rtl-optimization/111949
+ * gcc.target/aarch64/bic-1.c: New test.
+
+2025-04-19 Jiaxun Yang <jiaxun.yang@flygoat.com>
+
+ PR target/111814
+ * gcc.target/sh/pr111814.c: New test.
+
+2025-04-19 Maciej W. Rozycki <macro@orcam.me.uk>
+
+ * gcc.target/alpha/memcpy-nested-offset-long.c: New file.
+ * gcc.target/alpha/memcpy-nested-offset-quad.c: New file.
+
+2025-04-19 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/119836
+ * gfortran.dg/do_concurrent_all_clauses.f90: Remove invalid
+ dg-error test.
+ * gfortran.dg/pr119836_1.f90: New test.
+ * gfortran.dg/pr119836_2.f90: New test.
+ * gfortran.dg/pr119836_3.f90: New test.
+ * gfortran.dg/pr119836_4.f90: New test.
+
+2025-04-18 Thomas Schwinge <tschwinge@baylibre.com>
+
+ PR cobol/119818
+ * cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob:
+ 'dg-set-target-env-var TZ UTC0'.
+
+2025-04-18 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/bext-ext-2.c: New test
+
+2025-04-18 Jonathan Yong <10walls@gmail.com>
+
+ * g++.dg/abi/ref-temp1.C: Replicate some test based on
+ PE expectations.
+ * lib/target-supports.exp: New check_effective_target_pe.
+
+2025-04-18 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/87901
+ * gcc.dg/tree-ssa/ssa-dse-53.c: New test.
+ * gcc.dg/tree-ssa/ssa-dse-54.c: New test.
+
+2025-04-18 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/87901
+ * gcc.dg/tree-ssa/ssa-dse-52.c: New test.
+
+2025-04-18 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/118902
+ * gcc.dg/tree-ssa/pr118902-1.c: New test.
+
+2025-04-18 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/118947
+ * gcc.dg/pr118947-1.c: New test.
+
+2025-04-18 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR tree-optimization/78408
+ PR tree-optimization/118947
+ * gcc.dg/pr78408-3.c: New test.
+
+2025-04-18 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ * gcc.dg/pr116357.c: Use sizeof(int) instead of alignof(int).
+
+2025-04-18 Alexey Merzlyakov <alexey.merzlyakov@samsung.com>
+
+ PR middle-end/108016
+ * gcc.target/riscv/pr108016.c: New test.
+
+2025-04-18 kelefth <konstantinos.eleftheriou@vrull.eu>
+
+ PR rtl-optimization/119160
+ * gcc.dg/pr119160.c: New test.
+
+2025-04-18 Xing Li <lixing@loongson.cn>
+
+ * gcc.target/loongarch/vector/loongarch-vector.exp: Change
+ {dg-do-what-default} save and restore logical.
+
2025-04-17 Jason Merrill <jason@redhat.com>
* g++.dg/cpp2a/constexpr-dtor16.C: Adjust diagnostic.
diff --git a/gcc/testsuite/cobol.dg/group1/declarative_1.cob b/gcc/testsuite/cobol.dg/group1/declarative_1.cob
index 744495a..ec68e9c 100644
--- a/gcc/testsuite/cobol.dg/group1/declarative_1.cob
+++ b/gcc/testsuite/cobol.dg/group1/declarative_1.cob
@@ -1,14 +1,14 @@
*> { dg-do run }
*> { dg-output {Turning EC\-ALL CHECKING OFF \-\- Expecting \+00\.00 from ACOS\(\-3\)(\n|\r\n|\r)} }
-*> { dg-output { \+00\.00 TABL\(VSIX\) is 6(\n|\r\n|\r)} }
+*> { dg-output { \+00\.00 TABL\(VSIX\) is 1(\n|\r\n|\r)} }
*> { dg-output {Turning EC\-ARGUMENT\-FUNCTION CHECKING ON(\n|\r\n|\r)} }
*> { dg-output { Expecting \+0\.00 and DECLARATIVE FOR EC\-ARGUMENT\-FUNCTION(\n|\r\n|\r)} }
*> { dg-output { DECLARATIVE FOR EC\-ARGUMENT\-FUNCTION(\n|\r\n|\r)} }
-*> { dg-output { \+00\.00 TABL\(VSIX\) is 6(\n|\r\n|\r)} }
+*> { dg-output { \+00\.00 TABL\(VSIX\) is 1(\n|\r\n|\r)} }
*> { dg-output {Turning EC\-ARGUMENT CHECKING ON(\n|\r\n|\r)} }
*> { dg-output { Expecting \+0\.00 and DECLARATIVE FOR EC\-ARGUMENT\-FUNCTION(\n|\r\n|\r)} }
*> { dg-output { DECLARATIVE FOR EC\-ARGUMENT\-FUNCTION(\n|\r\n|\r)} }
-*> { dg-output { \+00\.00 TABL\(VSIX\) is 6(\n|\r\n|\r)} }
+*> { dg-output { \+00\.00 TABL\(VSIX\) is 1(\n|\r\n|\r)} }
*> { dg-output {Turning EC\-ALL CHECKING ON(\n|\r\n|\r)} }
*> { dg-output { Expecting \+0\.00 and DECLARATIVE EC\-ARGUMENT\-FUNCTION(\n|\r\n|\r)} }
*> { dg-output { Followed by DECLARATIVE EC\-ALL for TABL\(6\) access(\n|\r\n|\r)} }
diff --git a/gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob b/gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob
new file mode 100644
index 0000000..012da75
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/88_level_with_FALSE_IS_clause.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 MYFLD PIC X(6) VALUE "ABCDEF".
+ 88 MYFLD88 VALUE "ABCDEF"
+ FALSE IS "OKOKOK".
+ PROCEDURE DIVISION.
+ ASTART SECTION.
+ A01.
+ SET MYFLD88 TO FALSE
+ IF MYFLD NOT = "OKOKOK"
+ DISPLAY MYFLD
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/88_level_with_FILLER.cob b/gcc/testsuite/cobol.dg/group2/88_level_with_FILLER.cob
new file mode 100644
index 0000000..49157f4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/88_level_with_FILLER.cob
@@ -0,0 +1,20 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FILLER PIC X VALUE SPACE.
+ 88 X VALUE "X".
+ PROCEDURE DIVISION.
+ IF X
+ DISPLAY "NOT OK"
+ END-DISPLAY
+ END-IF
+ SET X TO TRUE.
+ IF NOT X
+ DISPLAY "NOT OK"
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/88_level_with_THRU.cob b/gcc/testsuite/cobol.dg/group2/88_level_with_THRU.cob
new file mode 100644
index 0000000..005bb64
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/88_level_with_THRU.cob
@@ -0,0 +1,86 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 VAR-X PIC X VALUE SPACE.
+ 88 X VALUE "X".
+ 88 T-Y VALUE "T" THRU "Y".
+ 01 VAR-9 PIC 9 VALUE ZERO.
+ 88 V9 VALUE 9.
+ 88 V2-4 VALUE 2 THRU 4.
+ PROCEDURE DIVISION.
+ IF X
+ DISPLAY "NOT OK '" VAR-X "' IS X"
+ END-DISPLAY
+ END-IF
+ SET X TO TRUE
+ IF NOT X
+ DISPLAY "NOT OK '" VAR-X "' IS NOT X"
+ END-DISPLAY
+ END-IF
+ IF NOT T-Y
+ DISPLAY "NOT OK '" VAR-X "' IS NOT T-Y"
+ END-DISPLAY
+ END-IF
+ SET T-Y TO TRUE
+ IF NOT T-Y
+ DISPLAY "NOT OK '" VAR-X "' IS NOT T-Y"
+ END-DISPLAY
+ END-IF
+ MOVE 'Y' TO VAR-X
+ IF NOT T-Y
+ DISPLAY "NOT OK '" VAR-X "' IS NOT T-Y"
+ END-DISPLAY
+ END-IF
+ MOVE 'Z' TO VAR-X
+ IF T-Y
+ DISPLAY "NOT OK '" VAR-X "' IS T-Y"
+ END-DISPLAY
+ END-IF
+ MOVE 'A' TO VAR-X
+ IF T-Y
+ DISPLAY "NOT OK '" VAR-X "' IS T-Y"
+ END-DISPLAY
+ END-IF
+ IF V9
+ DISPLAY "NOT OK '" VAR-9 "' IS V9"
+ END-DISPLAY
+ END-IF
+ SET V9 TO TRUE
+ IF NOT V9
+ DISPLAY "NOT OK '" VAR-9 "' IS NOT V9"
+ END-DISPLAY
+ END-IF
+ SET V2-4 TO TRUE
+ IF V9
+ DISPLAY "NOT OK '" VAR-9 "' IS V9"
+ END-DISPLAY
+ END-IF
+ IF NOT V2-4
+ DISPLAY "NOT OK '" VAR-9 "' IS NOT V2-4"
+ END-DISPLAY
+ END-IF
+ MOVE 3 TO VAR-9
+ IF NOT V2-4
+ DISPLAY "NOT OK '" VAR-9 "' IS NOT V2-4"
+ END-DISPLAY
+ END-IF
+ MOVE 4 TO VAR-9
+ IF NOT V2-4
+ DISPLAY "NOT OK '" VAR-9 "' IS NOT V2-4"
+ END-DISPLAY
+ END-IF
+ MOVE 5 TO VAR-9
+ IF V2-4
+ DISPLAY "NOT OK '" VAR-9 "' IS V2-4"
+ END-DISPLAY
+ END-IF
+ MOVE 1 TO VAR-9
+ IF V2-4
+ DISPLAY "NOT OK '" VAR-9 "' IS V2-4"
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ADD_CORRESPONDING.cob b/gcc/testsuite/cobol.dg/group2/ADD_CORRESPONDING.cob
new file mode 100644
index 0000000..732d241
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ADD_CORRESPONDING.cob
@@ -0,0 +1,39 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 GROUP-1.
+ 05 FIELD-A PIC 9 VALUE 1.
+ 05 FIELD-B USAGE BINARY-CHAR VALUE 2.
+ 05 INNER-GROUP.
+ 10 FIELD-C USAGE COMP-1 VALUE 3.
+ 05 FIELD-D PIC X VALUE "A".
+ 01 GROUP-2.
+ 05 FIELD-A PIC 9.
+ 05 FIELD-B USAGE BINARY-LONG.
+ 05 INNER-GROUP.
+ 10 FIELD-C PIC 9.
+ 05 FIELD-D PIC 9.
+
+ PROCEDURE DIVISION.
+ ADD CORRESPONDING GROUP-1 TO GROUP-2.
+ IF FIELD-A IN GROUP-2 NOT EQUAL 1 THEN
+ DISPLAY "BAD FIELD-A " FIELD-A IN GROUP-2
+ END-DISPLAY
+ END-IF.
+ IF FIELD-B IN GROUP-2 NOT EQUAL 2 THEN
+ DISPLAY "BAD FIELD-B " FIELD-B IN GROUP-2
+ END-DISPLAY
+ END-IF.
+ IF FIELD-C IN GROUP-2 NOT EQUAL 3 THEN
+ DISPLAY "BAD FIELD-C " FIELD-C IN GROUP-2
+ END-DISPLAY
+ END-IF.
+ IF FIELD-D IN GROUP-2 NOT EQUAL 0 THEN
+ DISPLAY "BAD FIELD-D " FIELD-D IN GROUP-2
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.cob b/gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.cob
new file mode 100644
index 0000000..d90ab7b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ADD_SUBTRACT_CORR_mixed_fix___float.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 GROUP1.
+ 05 VAR1 PIC 9999 VALUE 1.
+ 05 VAR2 PIC 9999 VALUE 2.
+ 05 VAR3 COMP-2 VALUE 3.
+ 05 VAR4 COMP-2 VALUE 4.
+ 01 GROUP2.
+ 05 VAR1 PIC 9999 VALUE 1000.
+ 05 VAR2 COMP-2 VALUE 2000.
+ 05 VAR3 PIC 9999 VALUE 3000.
+ 05 VAR4 COMP-2 VALUE 4000.
+ PROCEDURE DIVISION.
+ PERFORM DISP2
+ ADD CORRESPONDING GROUP1 TO GROUP2
+ PERFORM DISP2
+ SUBTRACT CORRESPONDING GROUP1 FROM GROUP2
+ PERFORM DISP2.
+ GOBACK.
+ DISP2.
+ DISPLAY
+ VAR1 OF GROUP2 SPACE
+ VAR2 OF GROUP2 SPACE
+ VAR3 OF GROUP2 SPACE
+ VAR4 OF GROUP2.
+ END PROGRAM prog.
+
+
diff --git a/gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.out b/gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.out
new file mode 100644
index 0000000..e590ce3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ADD_SUBTRACT_CORR_mixed_fix___float.out
@@ -0,0 +1,4 @@
+1000 2000 3000 4000
+1001 2002 3003 4004
+1000 2000 3000 4000
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALPHABETIC-LOWER_test.cob b/gcc/testsuite/cobol.dg/group2/ALPHABETIC-LOWER_test.cob
new file mode 100644
index 0000000..ff71974
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALPHABETIC-LOWER_test.cob
@@ -0,0 +1,23 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(04) VALUE "aaaa".
+ 01 FILLER REDEFINES X.
+ 03 XBYTE PIC X.
+ 03 FILLER PIC XXX.
+ PROCEDURE DIVISION.
+ MOVE X"0D" TO XBYTE.
+ IF X ALPHABETIC-LOWER
+ DISPLAY "Fail - Not alphabetic lower"
+ END-DISPLAY
+ END-IF.
+ MOVE "a" TO XBYTE.
+ IF X NOT ALPHABETIC-LOWER
+ DISPLAY "Fail - Alphabetic lower"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALPHABETIC-UPPER_test.cob b/gcc/testsuite/cobol.dg/group2/ALPHABETIC-UPPER_test.cob
new file mode 100644
index 0000000..a3c7ed8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALPHABETIC-UPPER_test.cob
@@ -0,0 +1,23 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(04) VALUE "AAAA".
+ 01 FILLER REDEFINES X.
+ 03 XBYTE PIC X.
+ 03 FILLER PIC XXX.
+ PROCEDURE DIVISION.
+ MOVE X"0D" TO XBYTE.
+ IF X ALPHABETIC-UPPER
+ DISPLAY "Fail - Not alphabetic upper"
+ END-DISPLAY
+ END-IF.
+ MOVE "A" TO XBYTE.
+ IF X NOT ALPHABETIC-UPPER
+ DISPLAY "Fail - Alphabetic upper"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ALPHABETIC_test.cob b/gcc/testsuite/cobol.dg/group2/ALPHABETIC_test.cob
new file mode 100644
index 0000000..ebc38cc
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ALPHABETIC_test.cob
@@ -0,0 +1,23 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(04) VALUE "AAAA".
+ 01 FILLER REDEFINES X.
+ 03 XBYTE PIC X.
+ 03 FILLER PIC XXX.
+ PROCEDURE DIVISION.
+ MOVE X"0D" TO XBYTE.
+ IF X ALPHABETIC
+ DISPLAY "Fail - Alphabetic"
+ END-DISPLAY
+ END-IF.
+ MOVE "A" TO XBYTE.
+ IF X NOT ALPHABETIC
+ DISPLAY "Fail - Not Alphabetic"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob b/gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob
new file mode 100644
index 0000000..ae0aa71
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/BLANK_WHEN_ZERO.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 x PIC 9, BLANK WHEN ZERO, VALUE 1.
+ PROCEDURE DIVISION.
+ DISPLAY "X should be 1: " """" x """"
+ MOVE 0 TO x
+ DISPLAY "X should be blank: " """" FUNCTION TRIM(x) """"
+ MOVE ZERO TO x
+ DISPLAY "X should be blank: " """" FUNCTION TRIM(x) """"
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out b/gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out
new file mode 100644
index 0000000..a03f1d1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/BLANK_WHEN_ZERO.out
@@ -0,0 +1,4 @@
+X should be 1: "1"
+X should be blank: ""
+X should be blank: ""
+
diff --git a/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob b/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
new file mode 100644
index 0000000..76bafa4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Check_for_equality_of_COMP-1___COMP-2.cob
@@ -0,0 +1,106 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 SRC1 COMP-2 VALUE 11.55.
+ 01 DST1 COMP-1.
+ 01 SRC2 COMP-1 VALUE 11.55.
+ 01 DST2 COMP-2.
+
+ PROCEDURE DIVISION.
+ MOVE SRC1 TO DST1.
+ IF DST1 not = 11.55
+ DISPLAY 'error: move/compare FLOAT-LONG to FLOAT-SHORT failed ' DST1
+ END-DISPLAY
+ END-IF.
+
+ MOVE SRC1 TO DST2.
+ IF DST1 not = 11.55
+ DISPLAY 'error: move/compare FLOAT-LONG to FLOAT-LONG failed ' DST2
+ END-DISPLAY
+ END-IF.
+
+ MOVE ZERO TO DST1.
+ MOVE ZERO TO DST2.
+
+ MOVE SRC2 TO DST1.
+ IF DST1 not = 11.55
+ DISPLAY 'error: move/compare FLOAT-SHORT to FLOAT-SHORT failed: ' DST1
+ END-DISPLAY
+ END-IF.
+
+ MOVE SRC2 TO DST2.
+ IF DST2 not = 11.5500001907348633
+ DISPLAY 'error: move/compare COMP-2 to literal failed: ' DST2
+ END-DISPLAY
+ END-IF.
+
+ MOVE ZERO TO DST1.
+ IF not (DST1 = 0 AND 0.0)
+ DISPLAY "Zero compare failed: " DST1 END-DISPLAY
+ END-IF.
+
+ MOVE -0.0 TO DST1.
+ IF not (DST1 = 0 AND 0.0)
+ DISPLAY "Negative Zero compare failed: " DST1
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1.1234567 TO DST1.
+ MOVE DST1 TO DST2.
+ IF DST2 not = 1.12345671653747559
+ DISPLAY "move/compare number to FLOAT to DOUBLE failed: "
+ DST1 " - " DST2
+ END-DISPLAY
+ END-IF.
+
+ * Check for Tolerance
+ MOVE 1.1234567 TO DST1.
+ MOVE 1.1234568 TO DST2.
+ IF DST1 = DST2 THEN
+ DISPLAY 'move/compare of very near numbers failed (not identical): ' DST1 " - " DST2
+ END-DISPLAY
+ END-IF.
+
+ * Within tolerance by definition, therefore not checked
+ * MULTIPLY 10000000000 BY DST1 DST2 END-MULTIPLY.
+ * IF DST1 = DST2 THEN
+ * DISPLAY "compare of very near numbers computed failed (id
+ *- "entical): " DST1 " - " DST2
+ * END-DISPLAY
+ * END-IF.
+
+ MOVE 1.1234567 TO DST1.
+ MOVE 1.1234569 TO DST2.
+ IF DST1 = DST2 THEN
+ DISPLAY 'move/compare of near equal numbers failed (identical): ' DST1 " - " DST2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.0001 TO DST1.
+ MOVE 0.0000 TO DST2.
+ IF DST1 = DST2 THEN
+ DISPLAY 'move/compare of nearly equal very small numbers failed (identical): ' DST1 " - " DST2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1000001.0 TO DST1.
+ MOVE 1000000.0 TO DST2.
+ IF DST1 = DST2 THEN
+ DISPLAY 'move/compare of nearly equal big numbers failed (identical): ' DST1 " - " DST2
+ END-DISPLAY
+ END-IF.
+
+ * Within tolerance by definition, therefore not checked
+ * MOVE 1000000000.0 TO DST1.
+ * MOVE 1000000001.0 TO DST2.
+ * IF DST1 = DST2 THEN
+ * DISPLAY 'move/compare of nearly equal very big numbers fa
+ *- 'iled (identical): ' DST1 " - " DST2
+ * END-DISPLAY
+ * END-IF.
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob b/gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob
new file mode 100644
index 0000000..677fadc
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Compare_COMP-2_with_floating-point_literal.cob
@@ -0,0 +1,43 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 VAR COMP-2 VALUE 0.0.
+
+ PROCEDURE DIVISION.
+ MOVE 9.899999999999E+304 TO VAR
+ IF VAR < 0
+ DISPLAY "error: compare " VAR " < " 0 " failed!"
+ END-DISPLAY
+ END-IF.
+ IF VAR < 9.799999999999E+304
+ DISPLAY 'error: compare ' VAR ' < ' 9.799999999999E+304
+ ' failed!'
+ END-DISPLAY
+ END-IF.
+ IF VAR > 9.999999999999E+304
+ DISPLAY 'error: compare ' VAR ' > ' 9.999999999999E+304
+ ' failed!'
+ END-DISPLAY
+ END-IF.
+ MOVE -9.899999999999E+304 TO VAR
+ IF VAR > 0
+ DISPLAY 'error: compare ' VAR ' > ' 0
+ ' failed!'
+ END-DISPLAY
+ END-IF.
+ IF VAR < -9.999999999999E+304
+ DISPLAY 'error: compare ' VAR ' < ' -9.999999999999E+304
+ ' failed!'
+ END-DISPLAY
+ END-IF.
+ IF VAR > -9.799999999999E+304
+ DISPLAY 'error: compare ' VAR ' > ' -9.799999999999E+304
+ ' failed!'
+ END-DISPLAY
+ END-IF.
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__3_.cob b/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__3_.cob
new file mode 100644
index 0000000..624a9e1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__3_.cob
@@ -0,0 +1,42 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(5) GLOBAL VALUE "prog1".
+ PROCEDURE DIVISION.
+ IF X NOT = "prog1"
+ DISPLAY X
+ END-DISPLAY
+ END-IF.
+ CALL "prog2"
+ END-CALL.
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(5) GLOBAL VALUE "prog2".
+ PROCEDURE DIVISION.
+ IF X NOT = "prog2"
+ DISPLAY X
+ END-DISPLAY
+ END-IF.
+ CALL "prog3"
+ END-CALL.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog3 COMMON.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF X NOT = "prog1"
+ DISPLAY X
+ END-DISPLAY
+ END-IF.
+ EXIT PROGRAM.
+ END PROGRAM prog3.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.cob b/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.cob
new file mode 100644
index 0000000..923ce76
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.cob
@@ -0,0 +1,46 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Contained_program_visibility__4_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY "P1" NO ADVANCING
+ END-DISPLAY.
+ CALL "prog2"
+ END-CALL
+ CALL "prog3"
+ END-CALL
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY "P2" NO ADVANCING
+ END-DISPLAY.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ END PROGRAM prog.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog3.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY "P3" NO ADVANCING
+ END-DISPLAY.
+ CALL "prog2"
+ END-CALL.
+ EXIT PROGRAM.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY "P4" NO ADVANCING
+ END-DISPLAY.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ END PROGRAM prog3.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.out b/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.out
new file mode 100644
index 0000000..f31c96b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Contained_program_visibility__4_.out
@@ -0,0 +1 @@
+P1P2P3P4
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.cob
new file mode 100644
index 0000000..37f5c47
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 BYTE-LENGTH PIC 9.
+ 01 X CONSTANT AS BYTE-LENGTH OF BYTE-LENGTH.
+ PROCEDURE DIVISION.
+ MOVE X TO BYTE-LENGTH.
+ DISPLAY BYTE-LENGTH NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.out
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__1_.out
@@ -0,0 +1 @@
+1
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.cob
new file mode 100644
index 0000000..d29f505
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 YYYYMMDD PIC 9 VALUE 0.
+ 01 X PIC X(16).
+ PROCEDURE DIVISION.
+ ACCEPT X FROM DATE YYYYMMDD
+ END-ACCEPT.
+ DISPLAY YYYYMMDD NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__2_.out
@@ -0,0 +1 @@
+0
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.cob
new file mode 100644
index 0000000..0326650
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__3_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 YYYYDDD PIC 9 VALUE 0.
+ 01 X PIC X(16).
+ PROCEDURE DIVISION.
+ ACCEPT X FROM DAY YYYYDDD
+ END-ACCEPT.
+ DISPLAY YYYYDDD NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__3_.out
@@ -0,0 +1 @@
+0
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.cob
new file mode 100644
index 0000000..05f2197
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__4_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION ALL INTRINSIC.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 INTRINSIC PIC 9 VALUE 0.
+ PROCEDURE DIVISION.
+ DISPLAY INTRINSIC NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__4_.out
@@ -0,0 +1 @@
+0
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.cob
new file mode 100644
index 0000000..8a96cf1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__5_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog RECURSIVE.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RECURSIVE PIC 9 VALUE 0.
+ PROCEDURE DIVISION.
+ DISPLAY RECURSIVE NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__5_.out
@@ -0,0 +1 @@
+0
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.cob
new file mode 100644
index 0000000..f83cb63
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__6_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 NORMAL PIC 9 VALUE 0.
+ PROCEDURE DIVISION.
+ DISPLAY NORMAL NO ADVANCING *> Intentionally no period or END-DISPLAY
+ STOP RUN NORMAL.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.out
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__6_.out
@@ -0,0 +1 @@
+0
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.cob
new file mode 100644
index 0000000..0ad5cc8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__7_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC 9 VALUE 0.
+ 01 AWAY-FROM-ZERO PIC 9 VALUE 0.
+ PROCEDURE DIVISION.
+ COMPUTE X ROUNDED MODE AWAY-FROM-ZERO
+ AWAY-FROM-ZERO = 1.1
+ END-COMPUTE
+ DISPLAY X AWAY-FROM-ZERO NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.out
new file mode 100644
index 0000000..aabe6ec
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__7_.out
@@ -0,0 +1 @@
+21
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.cob b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.cob
new file mode 100644
index 0000000..8943f92
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Context_sensitive_words__8_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 UNBNDED.
+ 03 ATTRIBUTES PIC 9 VALUE 0.
+ 01 LOC.
+ 03 NAMESPACE PIC 9 VALUE 1.
+ PROCEDURE DIVISION.
+ DISPLAY UNBNDED ATTRIBUTES
+ NAMESPACE IN LOC
+ NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.out b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.out
new file mode 100644
index 0000000..5325a8d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Context_sensitive_words__8_.out
@@ -0,0 +1 @@
+001
diff --git a/gcc/testsuite/cobol.dg/group2/DEBUG_Line.cob b/gcc/testsuite/cobol.dg/group2/DEBUG_Line.cob
new file mode 100644
index 0000000..a7dca5d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DEBUG_Line.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DEBUG_Line.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER.
+ Linux WITH DEBUGGING MODE.
+ PROCEDURE DIVISION.
+ *> Success is printing this message. If nothing comes out, the
+ *> test fails.
+ D DISPLAY "DEBUG MESSAGE" NO ADVANCING.
+ EXIT PROGRAM.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DEBUG_Line.out b/gcc/testsuite/cobol.dg/group2/DEBUG_Line.out
new file mode 100644
index 0000000..6a3f59c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DEBUG_Line.out
@@ -0,0 +1 @@
+DEBUG MESSAGE
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.cob b/gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.cob
new file mode 100644
index 0000000..2b31113
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.cob
@@ -0,0 +1,82 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DISPLAY_and_assignment_NumericDisplay.out" }
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 vars.
+ 05 vars-display-1.
+ 10 var01a pic 99v999 display value 54.321 .
+ 10 var01b pic s99v999 display value 54.321 .
+ 10 var01c pic s99v999 leading display value -54.321 .
+ 10 var01d pic s99v999 trailing display value 54.321 .
+ 10 var01e pic s99v999 leading separate display value -54.321 .
+ 10 var01f pic s99v999 trailing separate display value 54.321 .
+ 05 vars-display-2.
+ 10 var01g pic 9999ppp display value 4321000 .
+ 10 var01h pic s9999ppp display value 4321000 .
+ 10 var01i pic s9999ppp leading display value -4321000 .
+ 10 var01j pic s9999ppp trailing display value 4321000 .
+ 10 var01k pic s9999ppp leading separate display value -4321000 .
+ 10 var01l pic s9999ppp trailing separate display value 4321000 .
+ 05 vars-display-3.
+ 10 var01m pic ppp9999 display value .0001234 .
+ 10 var01n pic sppp9999 display value .0001234 .
+ 10 var01o pic sppp9999 leading display value -.0001234 .
+ 10 var01p pic sppp9999 trailing display value .0001234 .
+ 10 var01q pic sppp9999 leading separate display value -.0001234 .
+ 10 var01r pic sppp9999 trailing separate display value .0001234 .
+ procedure division.
+ display var01a
+ display var01b
+ display var01c
+ display var01d
+ display var01e
+ display var01f
+ display var01g
+ display var01h
+ display var01i
+ display var01j
+ display var01k
+ display var01l
+ display var01m
+ display var01n
+ display var01o
+ display var01p
+ display var01q
+ display var01r
+
+ move 12.345 to var01a var01c var01e
+ move -12.345 to var01b var01d var01f
+
+ move 9876000 to var01g var01i var01k
+ move -9876000 to var01h var01j var01l
+
+ move .0006789 to var01m var01o var01q
+ move -.0006789 to var01n var01p var01r
+
+ display var01a
+ display var01b
+ display var01c
+ display var01d
+ display var01e
+ display var01f
+ display var01g
+ display var01h
+ display var01i
+ display var01j
+ display var01k
+ display var01l
+ display var01m
+ display var01n
+ display var01o
+ display var01p
+ display var01q
+ display var01r
+
+ continue.
+ quit.
+ goback.
+ end program prog.
+
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.out b/gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.out
new file mode 100644
index 0000000..b18b32d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_and_assignment_NumericDisplay.out
@@ -0,0 +1,37 @@
+54.321
++54.321
+-54.321
++54.321
+-54.321
+54.321+
+4321000
++4321000
+-4321000
++4321000
+-4321000
+4321000+
+.0001234
++.0001234
+-.0001234
++.0001234
+-.0001234
+.0001234+
+12.345
+-12.345
++12.345
+-12.345
++12.345
+12.345-
+9876000
+-9876000
++9876000
+-9876000
++9876000
+9876000-
+.0006789
+-.0006789
++.0006789
+-.0006789
++.0006789
+.0006789-
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.cob b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.cob
new file mode 100644
index 0000000..50c1391
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.cob
@@ -0,0 +1,38 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DISPLAY_data_items_with_MOVE_statement.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X-ABC PIC XXX VALUE "abc".
+ 01 X-123 PIC 999 VALUE 123.
+ 01 X-P123 PIC S999 VALUE +123.
+ 01 X-N123 PIC S999 VALUE -123.
+ 01 X-12-3 PIC 99V9 VALUE 12.3.
+ 01 X-P12-3 PIC S99V9 VALUE +12.3.
+ 01 X-N12-3 PIC S99V9 VALUE -12.3.
+ PROCEDURE DIVISION.
+ MOVE "abc" TO X-ABC.
+ DISPLAY X-ABC
+ END-DISPLAY.
+ MOVE 123 TO X-123.
+ DISPLAY X-123
+ END-DISPLAY.
+ MOVE +123 TO X-P123.
+ DISPLAY X-P123
+ END-DISPLAY.
+ MOVE -123 TO X-N123.
+ DISPLAY X-N123
+ END-DISPLAY.
+ MOVE 12.3 TO X-12-3.
+ DISPLAY X-12-3
+ END-DISPLAY.
+ MOVE +12.3 TO X-P12-3.
+ DISPLAY X-P12-3
+ END-DISPLAY.
+ MOVE -12.3 TO X-N12-3.
+ DISPLAY X-N12-3
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.out b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.out
new file mode 100644
index 0000000..e0624a9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_MOVE_statement.out
@@ -0,0 +1,8 @@
+abc
+123
++123
+-123
+12.3
++12.3
+-12.3
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.cob b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.cob
new file mode 100644
index 0000000..6e502cb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.cob
@@ -0,0 +1,31 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DISPLAY_data_items_with_VALUE_clause.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X-ABC PIC XXX VALUE "abc".
+ 01 X-123 PIC 999 VALUE 123.
+ 01 X-P123 PIC S999 VALUE +123.
+ 01 X-N123 PIC S999 VALUE -123.
+ 01 X-12-3 PIC 99V9 VALUE 12.3.
+ 01 X-P12-3 PIC S99V9 VALUE +12.3.
+ 01 X-N12-3 PIC S99V9 VALUE -12.3.
+ PROCEDURE DIVISION.
+ DISPLAY X-ABC
+ END-DISPLAY.
+ DISPLAY X-123
+ END-DISPLAY.
+ DISPLAY X-P123
+ END-DISPLAY.
+ DISPLAY X-N123
+ END-DISPLAY.
+ DISPLAY X-12-3
+ END-DISPLAY.
+ DISPLAY X-P12-3
+ END-DISPLAY.
+ DISPLAY X-N12-3
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.out b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.out
new file mode 100644
index 0000000..e0624a9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_data_items_with_VALUE_clause.out
@@ -0,0 +1,8 @@
+abc
+123
++123
+-123
+12.3
++12.3
+-12.3
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.cob b/gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.cob
new file mode 100644
index 0000000..8bb5a58
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ PROCEDURE DIVISION.
+ DISPLAY 12,3
+ END-DISPLAY.
+ DISPLAY +12,3
+ END-DISPLAY.
+ DISPLAY -12,3
+ END-DISPLAY.
+ DISPLAY 1,23E0
+ END-DISPLAY.
+ DISPLAY +1,23E0
+ END-DISPLAY.
+ DISPLAY -1,23E0
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out b/gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out
new file mode 100644
index 0000000..4f56ca9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/DISPLAY_literals__DECIMAL-POINT_is_COMMA.out
@@ -0,0 +1,7 @@
+12,3
+12,3
+-12,3
+1,23
+1,23
+-1,23
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
index cc2a4e1..88b1b84 100644
--- a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
@@ -1,4 +1,5 @@
*> { dg-do run }
+ *> { dg-set-target-env-var TZ UTC0 }
identification division.
program-id. test.
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__1_.cob b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__1_.cob
new file mode 100644
index 0000000..6d89908
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__1_.cob
@@ -0,0 +1,42 @@
+ *> { dg-do compile }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE
+ ASSIGN "TESTFILE"
+ ACCESS DYNAMIC
+ ORGANIZATION RELATIVE
+ STATUS TESTSTAT
+ RELATIVE KEY TESTKEY
+ .
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE GLOBAL.
+ 01 TEST-REC PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 GLOBVALS.
+ 03 TESTKEY PIC 9(4).
+ 03 TESTSTAT PIC XX.
+ PROCEDURE DIVISION.
+ OPEN INPUT TEST-FILE.
+ CALL "prog2"
+ END-CALL.
+ CLOSE TEST-FILE.
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ READ TEST-FILE
+ INVALID KEY
+ DISPLAY "NOK"
+ END-DISPLAY
+ END-READ.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__2_.cob b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__2_.cob
new file mode 100644
index 0000000..44d5b2e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__2_.cob
@@ -0,0 +1,42 @@
+ *> { dg-do compile }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE
+ ASSIGN "TESTFILE"
+ ACCESS DYNAMIC
+ ORGANIZATION INDEXED
+ STATUS TESTSTAT
+ RECORD KEY TESTKEY
+ .
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE GLOBAL.
+ 01 TEST-REC.
+ 03 TESTKEY PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 GLOBVALS.
+ 03 TESTSTAT PIC XX.
+ PROCEDURE DIVISION.
+ OPEN INPUT TEST-FILE.
+ CALL "prog2"
+ END-CALL.
+ CLOSE TEST-FILE.
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ READ TEST-FILE
+ INVALID KEY
+ DISPLAY "NOK"
+ END-DISPLAY
+ END-READ.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__3_.cob b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__3_.cob
new file mode 100644
index 0000000..0f423babd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__3_.cob
@@ -0,0 +1,41 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE
+ ASSIGN "TESTFILE"
+ ACCESS DYNAMIC
+ ORGANIZATION RELATIVE
+ STATUS TESTSTAT
+ RELATIVE KEY TESTKEY
+ .
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE GLOBAL.
+ 01 TEST-REC PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 GLOBVALS.
+ 03 TESTKEY PIC 9(4).
+ 03 TESTSTAT PIC XX.
+ PROCEDURE DIVISION.
+ MOVE "00" TO TESTSTAT.
+ CALL "prog2"
+ END-CALL.
+ IF TESTSTAT = "00"
+ DISPLAY "Not OK"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ OPEN INPUT TEST-FILE.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__4_.cob b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__4_.cob
new file mode 100644
index 0000000..116a935
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_FD__4_.cob
@@ -0,0 +1,41 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE
+ ASSIGN "TESTFILE"
+ ACCESS DYNAMIC
+ ORGANIZATION INDEXED
+ STATUS TESTSTAT
+ RECORD KEY TESTKEY
+ .
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE GLOBAL.
+ 01 TEST-REC.
+ 03 TESTKEY PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 GLOBVALS.
+ 03 TESTSTAT PIC XX.
+ PROCEDURE DIVISION.
+ MOVE "00" TO TESTSTAT.
+ CALL "prog2"
+ END-CALL.
+ IF TESTSTAT = "00"
+ DISPLAY "Not OK"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ OPEN INPUT TEST-FILE.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.cob b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.cob
new file mode 100644
index 0000000..f4b5cba
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.cob
@@ -0,0 +1,37 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/GLOBAL_at_lower_level.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(5) GLOBAL VALUE "prog1".
+ PROCEDURE DIVISION.
+ DISPLAY X
+ END-DISPLAY.
+ CALL "prog2"
+ END-CALL
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(5) GLOBAL VALUE "prog2".
+ PROCEDURE DIVISION.
+ DISPLAY X
+ END-DISPLAY.
+ CALL "prog3"
+ END-CALL
+ EXIT PROGRAM.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog3.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY X
+ END-DISPLAY.
+ EXIT PROGRAM.
+ END PROGRAM prog3.
+ END PROGRAM prog2.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.out b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.out
new file mode 100644
index 0000000..ab69cb1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_lower_level.out
@@ -0,0 +1,4 @@
+prog1
+prog2
+prog2
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.cob b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.cob
new file mode 100644
index 0000000..749a26c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.cob
@@ -0,0 +1,37 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/GLOBAL_at_same_level.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(5) GLOBAL VALUE "prog1".
+ PROCEDURE DIVISION.
+ DISPLAY X
+ END-DISPLAY.
+ CALL "prog2"
+ END-CALL
+ CALL "prog3"
+ END-CALL
+ STOP RUN.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(5) GLOBAL VALUE "prog2".
+ PROCEDURE DIVISION.
+ DISPLAY X
+ END-DISPLAY.
+ EXIT PROGRAM.
+ END PROGRAM prog2.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog3.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY X
+ END-DISPLAY.
+ EXIT PROGRAM.
+ END PROGRAM prog3.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.out b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.out
new file mode 100644
index 0000000..4bc5d8b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/GLOBAL_at_same_level.out
@@ -0,0 +1,4 @@
+prog1
+prog2
+prog1
+
diff --git a/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob b/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob
new file mode 100644
index 0000000..9722ebd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Hexadecimal_literal.out" }
+
+ >>DEFINE CHARSET AS 'ASCII'
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ PROCEDURE DIVISION.
+ >>IF CHARSET = 'EBCDIC'
+ DISPLAY X"F1F2F3"
+ >>ELSE
+ DISPLAY X"313233"
+ >>END-IF
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.out b/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.out
new file mode 100644
index 0000000..cc12087
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Hexadecimal_literal.out
@@ -0,0 +1,2 @@
+123
+
diff --git a/gcc/testsuite/cobol.dg/group2/MULTIPLY_BY_literal_in_INITIAL_program.cob b/gcc/testsuite/cobol.dg/group2/MULTIPLY_BY_literal_in_INITIAL_program.cob
new file mode 100644
index 0000000..56f4703
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/MULTIPLY_BY_literal_in_INITIAL_program.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog INITIAL.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 num PIC 9(4) VALUE 5.
+ 01 result PIC 9(4).
+ 01 ws-temp PIC 9(8)V99.
+ 01 ws-temp2 PIC 9(3)V99 VALUE 10.50.
+ PROCEDURE DIVISION.
+ MULTIPLY num BY 4 GIVING result
+ MOVE 1.10 TO WS-TEMP.
+ MULTIPLY WS-TEMP2 BY WS-TEMP GIVING WS-TEMP.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.cob b/gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.cob
new file mode 100644
index 0000000..92a6511
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.cob
@@ -0,0 +1,69 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Named_conditionals_-_fixed__float__and_alphabetic.out" }
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 makeofcar pic x(10).
+ 88 volksgroup value "skoda", "seat",
+ "audi", "volkswagen"
+ false "boat".
+ 88 germanmade value "volkswagen", "audi",
+ "mercedes", "bmw",
+ "porsche".
+ 01 agegroup pic 999.
+ 88 child value 0 through 12.
+ 88 teen value 13 through 19.
+ 88 adult value 20 through 999.
+ 01 floats float-long.
+ 88 neg value -1 through -.1 .
+ 88 zed value zero .
+ 88 pos value .1 through 1.0 .
+ procedure division.
+ move "ford" to makeofcar
+ display function trim (makeofcar)
+ if volksgroup display " volksgroup" end-if
+ if germanmade display " germanmade" end-if
+ move "skoda" to makeofcar
+ display function trim (makeofcar)
+ if volksgroup display " volksgroup" end-if
+ if germanmade display " germanmade" end-if
+ move "volkswagen" to makeofcar
+ display function trim (makeofcar)
+ if volksgroup display " volksgroup" end-if
+ if germanmade display " germanmade" end-if
+ move 5 to agegroup.
+ display agegroup with no advancing
+ if child display " child" end-if
+ if teen display " teen" end-if
+ if adult display " adult" end-if
+ move 15 to agegroup.
+ display agegroup with no advancing
+ if child display " child" end-if
+ if teen display " teen" end-if
+ if adult display " adult" end-if
+ move 75 to agegroup.
+ display agegroup with no advancing
+ if child display " child" end-if
+ if teen display " teen" end-if
+ if adult display " adult" end-if
+ move -0.5 to floats
+ display floats with no advancing
+ if neg display " minus" end-if
+ if zed display " zero" end-if
+ if pos display " plus" end-if
+ move zero to floats
+ display floats with no advancing
+ if neg display " minus" end-if
+ if zed display " zero" end-if
+ if pos display " plus" end-if
+ move 0.5 to floats
+ display floats with no advancing
+ if neg display " minus" end-if
+ if zed display " zero" end-if
+ if pos display " plus" end-if
+ continue.
+ quit.
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out b/gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out
new file mode 100644
index 0000000..9ac5e44
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Named_conditionals_-_fixed__float__and_alphabetic.out
@@ -0,0 +1,13 @@
+ford
+skoda
+ volksgroup
+volkswagen
+ volksgroup
+ germanmade
+005 child
+015 teen
+075 adult
+-0.5 minus
+0 zero
+0.5 plus
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob
new file mode 100644
index 0000000..1e8f48e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__1_.cob
@@ -0,0 +1,35 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9V9.
+ 01 Y PIC S9V9 COMP-3.
+ PROCEDURE DIVISION.
+ MOVE -0.1 TO X.
+ ADD 1 TO X.
+ IF X NOT = 0.9
+ DISPLAY X
+ END-DISPLAY
+ END-IF.
+ MOVE 0.1 TO X.
+ SUBTRACT 1 FROM X.
+ IF X NOT = -0.9
+ DISPLAY X
+ END-DISPLAY
+ END-IF.
+ MOVE -0.1 TO Y.
+ ADD 1 TO Y.
+ IF Y NOT = 0.9
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ MOVE 0.1 TO Y.
+ SUBTRACT 1 FROM Y.
+ IF Y NOT = -0.9
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob
new file mode 100644
index 0000000..d7d71d7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__2_.cob
@@ -0,0 +1,292 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FIELD PIC S9(1)V9(1).
+ 01 FELD2 PIC S9(5)V9(5).
+ 01 FELD3 PIC 9(1)V9(1).
+ 01 FELD4 PIC S9(1).
+ PROCEDURE DIVISION.
+ MOVE 0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 1 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 2 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 3 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 4 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 5 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 6 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 7 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 8 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 9 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 10 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 11 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 12 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 13 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 14 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 15 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 16 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 17 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 18 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 19 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 20 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 21 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 22 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 23 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 24 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 25 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 26 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 27 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 28 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 29 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 30 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 31 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 32 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 33 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 34 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 35 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 36 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 37 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 38 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 39 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 40 " FELD4
+ END-DISPLAY
+ END-IF.
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob
new file mode 100644
index 0000000..e56804a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__3_.cob
@@ -0,0 +1,292 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FIELD PIC S9(1)V9(1) COMP-3.
+ 01 FELD2 PIC S9(5)V9(5) COMP-3.
+ 01 FELD3 PIC 9(1)V9(1) COMP-3.
+ 01 FELD4 PIC S9(1) COMP-3.
+ PROCEDURE DIVISION.
+ MOVE 0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 1 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 2 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 3 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 4 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 5 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 6 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 7 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 8 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 9 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 10 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 11 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 12 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 13 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 14 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 15 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 16 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 17 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 18 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 19 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 20 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 21 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 22 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 23 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 24 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 25 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 26 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 27 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 28 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 29 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 30 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 31 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 32 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 33 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 34 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 35 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 36 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 37 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 38 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 39 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 40 " FELD4
+ END-DISPLAY
+ END-IF.
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__4_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__4_.cob
new file mode 100644
index 0000000..2b5c8ee
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__4_.cob
@@ -0,0 +1,292 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FIELD PIC S9(1)V9(1) COMP.
+ 01 FELD2 PIC S9(5)V9(5) COMP.
+ 01 FELD3 PIC 9(1)V9(1) COMP.
+ 01 FELD4 PIC S9(1) COMP.
+ PROCEDURE DIVISION.
+ MOVE 0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 1 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 2 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 3 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 4 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 5 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 6 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 7 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 8 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 9 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 10 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 11 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 12 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 13 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 14 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 15 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 16 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 17 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 18 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 19 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 20 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 21 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 22 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 23 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 24 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 25 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 26 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 27 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 28 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 29 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 30 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 31 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 32 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 33 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 34 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 35 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 36 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 37 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 38 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 39 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 40 " FELD4
+ END-DISPLAY
+ END-IF.
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__5_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__5_.cob
new file mode 100644
index 0000000..1f72e69
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__5_.cob
@@ -0,0 +1,292 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FIELD PIC S9(1)V9(1) COMP-5.
+ 01 FELD2 PIC S9(5)V9(5) COMP-5.
+ 01 FELD3 PIC 9(1)V9(1) COMP-5.
+ 01 FELD4 PIC S9(1) COMP-5.
+ PROCEDURE DIVISION.
+ MOVE 0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 1 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 2 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD 1 TO FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 3 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ ADD -1 TO FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 4 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -0.8
+ DISPLAY "Test 5 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 1.2
+ DISPLAY "Test 6 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT 1 FROM FIELD
+ IF FIELD NOT = -1.2
+ DISPLAY "Test 7 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FIELD
+ SUBTRACT -1 FROM FIELD
+ IF FIELD NOT = 0.8
+ DISPLAY "Test 8 " FIELD
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 9 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 10 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD 1 TO FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 11 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ ADD -1 TO FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 12 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -0.8
+ DISPLAY "Test 13 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 1.2
+ DISPLAY "Test 14 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT 1 FROM FELD2
+ IF FELD2 NOT = -1.2
+ DISPLAY "Test 15 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD2
+ SUBTRACT -1 FROM FELD2
+ IF FELD2 NOT = 0.8
+ DISPLAY "Test 16 " FELD2
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 17 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 18 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD 1 TO FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 19 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ ADD -1 TO FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 20 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 21 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 22 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT 1 FROM FELD3
+ IF FELD3 NOT = 0.8
+ DISPLAY "Test 23 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE -0.2 TO FELD3
+ SUBTRACT -1 FROM FELD3
+ IF FELD3 NOT = 1.2
+ DISPLAY "Test 24 " FELD3
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 25 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 26 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD 1 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 27 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ ADD -1 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 28 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 29 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 30 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT 1 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 31 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -2 TO FELD4
+ SUBTRACT -1 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 32 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 33 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 34 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD 2 TO FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 35 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ ADD -2 TO FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 36 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -1
+ DISPLAY "Test 37 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE 1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 3
+ DISPLAY "Test 38 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT 2 FROM FELD4
+ IF FELD4 NOT = -3
+ DISPLAY "Test 39 " FELD4
+ END-DISPLAY
+ END-IF.
+
+ MOVE -1 TO FELD4
+ SUBTRACT -2 FROM FELD4
+ IF FELD4 NOT = 1
+ DISPLAY "Test 40 " FELD4
+ END-DISPLAY
+ END-IF.
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__7_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__7_.cob
new file mode 100644
index 0000000..df517db
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__7_.cob
@@ -0,0 +1,283 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 FIELD PIC S9(4)V9(2) COMP-5.
+ 01 FIELD-DISP PIC S9(4)V9(2) DISPLAY.
+ PROCEDURE DIVISION.
+ MOVE 0.2 TO FIELD.
+ ADD 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+ 100
+ 101
+ 102
+ 103
+ 104
+ 105
+ 106
+ 107
+ 108
+ 109
+ 110
+ 111
+ 112
+ 113
+ 114
+ 115
+ 116
+ 117
+ 118
+ 119
+ 120
+ 121
+ 122
+ 123
+ 124
+ 125
+ 126
+ 127
+ 128
+ 129
+ TO FIELD
+ END-ADD.
+ IF FIELD NOT = 8385.2
+ MOVE FIELD TO FIELD-DISP
+ DISPLAY 'ADD with wrong result: ' FIELD-DISP
+ END-DISPLAY
+ END-IF.
+ COMPUTE FIELD = (0.2
+ + 2
+ + 3
+ + 4
+ + 5
+ + 6
+ + 7
+ + 8
+ + 9
+ + 10
+ + 11
+ + 12
+ + 13
+ + 14
+ + 15
+ + 16
+ + 17
+ + 18
+ + 19
+ + 20
+ + 21
+ + 22
+ + 23
+ + 24
+ + 25
+ + 26
+ + 27
+ + 28
+ + 29
+ + 30
+ + 31
+ + 32
+ + 33
+ + 34
+ + 35
+ + 36
+ + 37
+ + 38
+ + 39
+ + 40
+ + 41
+ + 42
+ + 43
+ + 44
+ + 45
+ + 46
+ + 47
+ + 48
+ + 49
+ + 50
+ + 51
+ + 52
+ + 53
+ + 54
+ + 55
+ + 56
+ + 57
+ + 58
+ - 59
+ - 60
+ - 61
+ - 62
+ - 63
+ - 64
+ - 65
+ - 66
+ - 67
+ - 68
+ - 69
+ - 70
+ - 71
+ - 72
+ - 73
+ - 74
+ - 75
+ - 76
+ - 77
+ - 78
+ - 79
+ - 80
+ - 81
+ - 82
+ - 83
+ - 84
+ - 85
+ - 86
+ - 87
+ - 88
+ - 89
+ - 90
+ - 91
+ - 92
+ - 93
+ - 94
+ - 95
+ - 96
+ - 97
+ - 98
+ - 99
+ - 100
+ - 101
+ - 102
+ - 103
+ - 104
+ - 105
+ - 106
+ - 107
+ - 108
+ - 109
+ - 110
+ - 111
+ - 112
+ - 113
+ - 114
+ - 115
+ - 116
+ - 117
+ - 118
+ - 119
+ - 120
+ - 121
+ - 122
+ - 123
+ - 124
+ - 125
+ - 126
+ - 127)
+ * 12800000000
+ / 12900000000
+ END-COMPUTE.
+ IF FIELD NOT = -4670.31
+ MOVE FIELD TO FIELD-DISP
+ DISPLAY 'COMPUTE with wrong result: ' FIELD-DISP
+ END-DISPLAY
+ END-IF.
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Numeric_operations__8_.cob b/gcc/testsuite/cobol.dg/group2/Numeric_operations__8_.cob
new file mode 100644
index 0000000..68d5f9b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Numeric_operations__8_.cob
@@ -0,0 +1,37 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 1 COMPUTE-DATA.
+ 2 COMPUTE-8 PICTURE 999 VALUE ZERO.
+ PROCEDURE DIVISION.
+ COMPUTE COMPUTE-8 = (((24.0 + 1) * (60 - 10)) / 125) ** 2
+ IF COMPUTE-8 NOT = 100
+ DISPLAY 'COMPUTE with wrong result: ' COMPUTE-8
+ END-DISPLAY
+ END-IF
+ COMPUTE COMPUTE-8 = 55 / (1 - 2 + 1)
+ NOT ON SIZE ERROR
+ DISPLAY 'SIZE ERROR not set from divide by zero!'
+ END-DISPLAY
+ END-COMPUTE
+ COMPUTE COMPUTE-8 = 0 ** 1
+ IF COMPUTE-8 NOT = 0
+ DISPLAY '0 ** 1 <> 0: ' COMPUTE-8
+ END-DISPLAY
+ END-IF
+ COMPUTE COMPUTE-8 = 55 ** 0
+ IF COMPUTE-8 NOT = 1
+ DISPLAY '55 ** 0 <> 1: ' COMPUTE-8
+ END-DISPLAY
+ END-IF
+ COMPUTE COMPUTE-8 = 1 ** 55
+ IF COMPUTE-8 NOT = 1
+ DISPLAY '11 ** 55 <> 1: ' COMPUTE-8
+ END-DISPLAY
+ END-IF
+
+ GOBACK.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob
new file mode 100644
index 0000000..dc7ddad
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_AWAY-FROM-ZERO.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE AWAY-FROM-ZERO
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE AWAY-FROM-ZERO
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE AWAY-FROM-ZERO
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE AWAY-FROM-ZERO
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE AWAY-FROM-ZERO
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE AWAY-FROM-ZERO
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE AWAY-FROM-ZERO
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE AWAY-FROM-ZERO
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE AWAY-FROM-ZERO
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE AWAY-FROM-ZERO
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out
new file mode 100644
index 0000000..67784de
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_AWAY-FROM-ZERO.out
@@ -0,0 +1 @@
++3 -3 +3 -3 +4 -4 +4 -4 +4 -4
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob
new file mode 100644
index 0000000..8a1e0ca
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE NEAREST-AWAY-FROM-ZERO
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.out
new file mode 100644
index 0000000..18afa23
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-AWAY-FROM-ZERO.out
@@ -0,0 +1 @@
++2 -2 +3 -3 +3 -3 +4 -4 +4 -4
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.cob
new file mode 100644
index 0000000..77529d2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_NEAREST-EVEN.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE NEAREST-EVEN
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE NEAREST-EVEN
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE NEAREST-EVEN
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE NEAREST-EVEN
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE NEAREST-EVEN
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE NEAREST-EVEN
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE NEAREST-EVEN
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE NEAREST-EVEN
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE NEAREST-EVEN
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE NEAREST-EVEN
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.out
new file mode 100644
index 0000000..59e459b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-EVEN.out
@@ -0,0 +1 @@
++2 -2 +2 -2 +3 -3 +4 -4 +4 -4
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.cob
new file mode 100644
index 0000000..6f3f28d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_NEAREST-TOWARD-ZERO.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE NEAREST-TOWARD-ZERO
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE NEAREST-TOWARD-ZERO
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE NEAREST-TOWARD-ZERO
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE NEAREST-TOWARD-ZERO
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE NEAREST-TOWARD-ZERO
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE NEAREST-TOWARD-ZERO
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE NEAREST-TOWARD-ZERO
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE NEAREST-TOWARD-ZERO
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE NEAREST-TOWARD-ZERO
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE NEAREST-TOWARD-ZERO
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.out
new file mode 100644
index 0000000..05ce11c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_NEAREST-TOWARD-ZERO.out
@@ -0,0 +1 @@
++2 -2 +2 -2 +3 -3 +3 -3 +4 -4
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.cob
new file mode 100644
index 0000000..c2b3cf8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_TOWARD-GREATER.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE TOWARD-GREATER
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE TOWARD-GREATER
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE TOWARD-GREATER
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE TOWARD-GREATER
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE TOWARD-GREATER
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE TOWARD-GREATER
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE TOWARD-GREATER
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE TOWARD-GREATER
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE TOWARD-GREATER
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE TOWARD-GREATER
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.out
new file mode 100644
index 0000000..54ab7f3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-GREATER.out
@@ -0,0 +1 @@
++3 -2 +3 -2 +4 -3 +4 -3 +4 -3
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.cob
new file mode 100644
index 0000000..37c1749
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_TOWARD-LESSER.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE TOWARD-LESSER
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE TOWARD-LESSER
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE TOWARD-LESSER
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE TOWARD-LESSER
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE TOWARD-LESSER
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE TOWARD-LESSER
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE TOWARD-LESSER
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE TOWARD-LESSER
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE TOWARD-LESSER
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE TOWARD-LESSER
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.out
new file mode 100644
index 0000000..2cf5645
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_TOWARD-LESSER.out
@@ -0,0 +1 @@
++2 -3 +2 -3 +3 -4 +3 -4 +3 -4
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.cob b/gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.cob
new file mode 100644
index 0000000..9f46dc7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDED_TRUNCATION.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 M PIC S9.
+ 01 N PIC S9.
+ 01 O PIC S9.
+ 01 P PIC S9.
+ 01 Q PIC S9.
+ 01 R PIC S9.
+ 01 S PIC S9.
+ 01 T PIC S9.
+ 01 U PIC S9.
+ 01 V PIC S9.
+ PROCEDURE DIVISION.
+ COMPUTE M ROUNDED MODE TRUNCATION
+ = 2.49
+ END-COMPUTE
+ COMPUTE N ROUNDED MODE TRUNCATION
+ = -2.49
+ END-COMPUTE
+ COMPUTE O ROUNDED MODE TRUNCATION
+ = 2.50
+ END-COMPUTE
+ COMPUTE P ROUNDED MODE TRUNCATION
+ = -2.50
+ END-COMPUTE
+ COMPUTE Q ROUNDED MODE TRUNCATION
+ = 3.49
+ END-COMPUTE
+ COMPUTE R ROUNDED MODE TRUNCATION
+ = -3.49
+ END-COMPUTE
+ COMPUTE S ROUNDED MODE TRUNCATION
+ = 3.50
+ END-COMPUTE
+ COMPUTE T ROUNDED MODE TRUNCATION
+ = -3.50
+ END-COMPUTE
+ COMPUTE U ROUNDED MODE TRUNCATION
+ = 3.510
+ END-COMPUTE
+ COMPUTE V ROUNDED MODE TRUNCATION
+ = -3.510
+ END-COMPUTE
+ DISPLAY M " " N " " O " " P " " Q " " R " " S " " T
+ " " U " " V
+ NO ADVANCING
+ END-DISPLAY
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.out b/gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.out
new file mode 100644
index 0000000..c178d5a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDED_TRUNCATION.out
@@ -0,0 +1 @@
++2 -2 +2 -2 +3 -3 +3 -3 +3 -3
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.cob b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.cob
new file mode 100644
index 0000000..4bc8b28
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.cob
@@ -0,0 +1,427 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.out" }
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 VAR1 COMP-2.
+ 01 VAR2 PICTURE S999.
+ 01 SHOULD_BE PICTURE S999.
+ 01 RMODE PICTURE X(64).
+ 01 EMPTY PIC X VALUE " ".
+ 01 FLAG PIC X.
+ PROCEDURE DIVISION.
+
+ DISPLAY "ROUNDING from COMP-2 after COMPUTE."
+
+ PERFORM truncation-e.
+ PERFORM truncation-m.
+ PERFORM nearest-away-from-zero-e.
+ PERFORM nearest-away-from-zero-m.
+ PERFORM away-from-zero-e.
+ PERFORM away-from-zero-m.
+ PERFORM nearest-even-e.
+ PERFORM nearest-even-m.
+ PERFORM nearest-toward-zero-e.
+ PERFORM nearest-toward-zero-m.
+ PERFORM toward-greater-e.
+ PERFORM toward-greater-m.
+ PERFORM toward-lesser-e.
+ PERFORM toward-lesser-m.
+ PERFORM prohibited-e.
+ GOBACK.
+
+ truncation-e.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+
+ truncation-m.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-away-from-zero-e.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-away-from-zero-m.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ away-from-zero-e.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ away-from-zero-m.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-even-e.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.0 TO VAR1
+ MOVE 110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.1 TO VAR1
+ MOVE 110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.5 TO VAR1
+ MOVE 110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.9 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-even-m.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.0 TO VAR1
+ MOVE -110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.1 TO VAR1
+ MOVE -110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.5 TO VAR1
+ MOVE -110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.9 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-toward-zero-e.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-toward-zero-m.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-greater-e.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-greater-m.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-lesser-e.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-lesser-m.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ prohibited-e.
+ MOVE "PROHIBITED - fits" TO RMODE
+ SET LAST EXCEPTION TO OFF
+ MOVE 123 TO VAR2
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE PROHIBITED = VAR1
+ PERFORM SHOW_RESULTS
+ DISPLAY " EXCEPTION STATUS IS "
+ """" FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """".
+
+ MOVE "PROHIBITED - doesn't fit; no ON ERROR phrase" TO RMODE
+ SET LAST EXCEPTION TO OFF
+ MOVE 123 TO VAR2
+ MOVE 111.5 TO VAR1
+ MOVE 123 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE PROHIBITED = VAR1
+ PERFORM SHOW_RESULTS
+ DISPLAY " EXCEPTION STATUS IS "
+ """" FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """".
+
+ MOVE "PROHIBITED - doesn't fit; ON ERROR phrase" TO RMODE
+ SET LAST EXCEPTION TO OFF
+ MOVE SPACE TO FLAG
+ MOVE 123 TO VAR2
+ MOVE 111.5 TO VAR1
+ MOVE 123 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE PROHIBITED = VAR1
+ ON SIZE ERROR MOVE 'X' TO FLAG
+ END-COMPUTE
+ PERFORM SHOW_RESULTS
+ IF FLAG EQUAL 'X'
+ DISPLAY " COMPUTE had an ON SIZE error"
+ END-IF.
+ DISPLAY " EXCEPTION STATUS IS "
+ """" FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """".
+
+ SHOW_RESULTS.
+ DISPLAY "Rounding mode " FUNCTION TRIM(RMODE)
+ " " VAR1 " becomes " VAR2
+ WITH NO ADVANCING
+ END-DISPLAY
+ IF VAR2 EQUALS SHOULD_BE
+ DISPLAY FUNCTION TRIM(EMPTY)
+ ELSE
+ DISPLAY " but it should be " SHOULD_BE
+ END-IF.
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.out b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.out
new file mode 100644
index 0000000..4ff4e29
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_Floating-Point_from_COMPUTE.out
@@ -0,0 +1,71 @@
+ROUNDING from COMP-2 after COMPUTE.
+Rounding mode TRUNCATION 111 becomes +111
+Rounding mode TRUNCATION 111.099999999999994 becomes +111
+Rounding mode TRUNCATION 111.5 becomes +111
+Rounding mode TRUNCATION 111.900000000000006 becomes +111
+Rounding mode TRUNCATION -111 becomes -111
+Rounding mode TRUNCATION -111.099999999999994 becomes -111
+Rounding mode TRUNCATION -111.5 becomes -111
+Rounding mode TRUNCATION -111.900000000000006 becomes -111
+Rounding mode NEAREST-AWAY-FROM-ZERO 111 becomes +111
+Rounding mode NEAREST-AWAY-FROM-ZERO 111.099999999999994 becomes +111
+Rounding mode NEAREST-AWAY-FROM-ZERO 111.5 becomes +112
+Rounding mode NEAREST-AWAY-FROM-ZERO 111.900000000000006 becomes +112
+Rounding mode NEAREST-AWAY-FROM-ZERO -111 becomes -111
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.099999999999994 becomes -111
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.5 becomes -112
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.900000000000006 becomes -112
+Rounding mode AWAY-FROM-ZERO 111 becomes +111
+Rounding mode AWAY-FROM-ZERO 111.099999999999994 becomes +112
+Rounding mode AWAY-FROM-ZERO 111.5 becomes +112
+Rounding mode AWAY-FROM-ZERO 111.900000000000006 becomes +112
+Rounding mode AWAY-FROM-ZERO -111 becomes -111
+Rounding mode AWAY-FROM-ZERO -111.099999999999994 becomes -112
+Rounding mode AWAY-FROM-ZERO -111.5 becomes -112
+Rounding mode AWAY-FROM-ZERO -111.900000000000006 becomes -112
+Rounding mode NEAREST-EVEN 110 becomes +110
+Rounding mode NEAREST-EVEN 110.099999999999994 becomes +110
+Rounding mode NEAREST-EVEN 110.5 becomes +110
+Rounding mode NEAREST-EVEN 111 becomes +111
+Rounding mode NEAREST-EVEN 111.099999999999994 becomes +111
+Rounding mode NEAREST-EVEN 111.5 becomes +112
+Rounding mode NEAREST-EVEN 111.900000000000006 becomes +112
+Rounding mode NEAREST-EVEN -110 becomes -110
+Rounding mode NEAREST-EVEN -110.099999999999994 becomes -110
+Rounding mode NEAREST-EVEN -110.5 becomes -110
+Rounding mode NEAREST-EVEN -111 becomes -111
+Rounding mode NEAREST-EVEN -111.099999999999994 becomes -111
+Rounding mode NEAREST-EVEN -111.5 becomes -112
+Rounding mode NEAREST-EVEN -111.900000000000006 becomes -112
+Rounding mode NEAREST-TOWARD-ZERO 111 becomes +111
+Rounding mode NEAREST-TOWARD-ZERO 111.099999999999994 becomes +111
+Rounding mode NEAREST-TOWARD-ZERO 111.5 becomes +111
+Rounding mode NEAREST-TOWARD-ZERO 111.900000000000006 becomes +112
+Rounding mode NEAREST-TOWARD-ZERO -111 becomes -111
+Rounding mode NEAREST-TOWARD-ZERO -111.099999999999994 becomes -111
+Rounding mode NEAREST-TOWARD-ZERO -111.5 becomes -111
+Rounding mode NEAREST-TOWARD-ZERO -111.900000000000006 becomes -112
+Rounding mode TOWARD-GREATER 111 becomes +111
+Rounding mode TOWARD-GREATER 111.099999999999994 becomes +112
+Rounding mode TOWARD-GREATER 111.5 becomes +112
+Rounding mode TOWARD-GREATER 111.900000000000006 becomes +112
+Rounding mode TOWARD-GREATER -111 becomes -111
+Rounding mode TOWARD-GREATER -111.099999999999994 becomes -111
+Rounding mode TOWARD-GREATER -111.5 becomes -111
+Rounding mode TOWARD-GREATER -111.900000000000006 becomes -111
+Rounding mode TOWARD-LESSER 111 becomes +111
+Rounding mode TOWARD-LESSER 111.099999999999994 becomes +111
+Rounding mode TOWARD-LESSER 111.5 becomes +111
+Rounding mode TOWARD-LESSER 111.900000000000006 becomes +111
+Rounding mode TOWARD-LESSER -111 becomes -111
+Rounding mode TOWARD-LESSER -111.099999999999994 becomes -112
+Rounding mode TOWARD-LESSER -111.5 becomes -112
+Rounding mode TOWARD-LESSER -111.900000000000006 becomes -112
+Rounding mode PROHIBITED - fits 111 becomes +111
+ EXCEPTION STATUS IS ""
+Rounding mode PROHIBITED - doesn't fit; no ON ERROR phrase 111.5 becomes +123
+ EXCEPTION STATUS IS "EC-SIZE-TRUNCATION"
+Rounding mode PROHIBITED - doesn't fit; ON ERROR phrase 111.5 becomes +123
+ COMPUTE had an ON SIZE error
+ EXCEPTION STATUS IS "EC-SIZE-TRUNCATION"
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.cob b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.cob
new file mode 100644
index 0000000..3138233
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.cob
@@ -0,0 +1,428 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out" }
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 VAR1 PICTURE S999V9.
+ 01 VAR2 PICTURE S999.
+ 01 SHOULD_BE PICTURE S999.
+ 01 RMODE PICTURE X(64).
+ 01 EMPTY PIC X VALUE " ".
+ 01 FLAG PIC X.
+ PROCEDURE DIVISION.
+
+ DISPLAY "ROUNDING from NumericDisplay after COMPUTE."
+
+ PERFORM truncation-e.
+ PERFORM truncation-m.
+ PERFORM nearest-away-from-zero-e.
+ PERFORM nearest-away-from-zero-m.
+ PERFORM away-from-zero-e.
+ PERFORM away-from-zero-m.
+ PERFORM nearest-even-e.
+ PERFORM nearest-even-m.
+ PERFORM nearest-toward-zero-e.
+ PERFORM nearest-toward-zero-m.
+ PERFORM toward-greater-e.
+ PERFORM toward-greater-m.
+ PERFORM toward-lesser-e.
+ PERFORM toward-lesser-m.
+ PERFORM prohibited-e.
+ GOBACK.
+
+ truncation-e.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+
+ truncation-m.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TRUNCATION" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TRUNCATION = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-away-from-zero-e.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-away-from-zero-m.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ away-from-zero-e.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ away-from-zero-m.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "AWAY-FROM-ZERO" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE AWAY-FROM-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-even-e.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.0 TO VAR1
+ MOVE 110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.1 TO VAR1
+ MOVE 110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.5 TO VAR1
+ MOVE 110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 110.9 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-even-m.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.0 TO VAR1
+ MOVE -110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.1 TO VAR1
+ MOVE -110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.5 TO VAR1
+ MOVE -110 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -110.9 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-EVEN" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-EVEN = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-toward-zero-e.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ nearest-toward-zero-m.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "NEAREST-TOWARD-ZERO" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE NEAREST-TOWARD-ZERO = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-greater-e.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-greater-m.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-GREATER" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-GREATER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-lesser-e.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.1 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.5 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE 111.9 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ toward-lesser-m.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.0 TO VAR1
+ MOVE -111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.1 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.5 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+ MOVE "TOWARD-LESSER" TO RMODE
+ MOVE -111.9 TO VAR1
+ MOVE -112 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE TOWARD-LESSER = VAR1
+ PERFORM SHOW_RESULTS.
+
+ prohibited-e.
+ MOVE "PROHIBITED - fits" TO RMODE
+ SET LAST EXCEPTION TO OFF
+ MOVE 123 TO VAR2
+ MOVE 111.0 TO VAR1
+ MOVE 111 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE PROHIBITED = VAR1
+ PERFORM SHOW_RESULTS
+ DISPLAY " EXCEPTION STATUS IS "
+ """" FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """".
+
+ MOVE "PROHIBITED - doesn't fit; no ON ERROR phrase" TO RMODE
+ SET LAST EXCEPTION TO OFF
+ MOVE 123 TO VAR2
+ MOVE 111.5 TO VAR1
+ MOVE 123 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE PROHIBITED = VAR1
+ PERFORM SHOW_RESULTS
+ DISPLAY " EXCEPTION STATUS IS "
+ """" FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """".
+
+ MOVE "PROHIBITED - doesn't fit; ON ERROR phrase" TO RMODE
+ SET LAST EXCEPTION TO OFF
+ MOVE SPACE TO FLAG
+ MOVE 123 TO VAR2
+ MOVE 111.5 TO VAR1
+ MOVE 123 TO SHOULD_BE
+ COMPUTE VAR2 ROUNDED MODE PROHIBITED = VAR1
+ ON SIZE ERROR MOVE 'X' TO FLAG
+ END-COMPUTE
+ PERFORM SHOW_RESULTS
+ IF FLAG EQUAL 'X'
+ DISPLAY " COMPUTE had an ON SIZE error"
+ END-IF.
+ DISPLAY " EXCEPTION STATUS IS "
+ """" FUNCTION TRIM(FUNCTION EXCEPTION-STATUS) """".
+
+ SHOW_RESULTS.
+ DISPLAY "Rounding mode " FUNCTION TRIM(RMODE)
+ " " VAR1 " becomes " VAR2
+ WITH NO ADVANCING
+ END-DISPLAY
+ IF VAR2 EQUALS SHOULD_BE
+ DISPLAY FUNCTION TRIM(EMPTY)
+ ELSE
+ DISPLAY " but it should be " SHOULD_BE
+ END-IF.
+
+
diff --git a/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out
new file mode 100644
index 0000000..af94786
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/ROUNDING_omnibus_NumericDisplay_from_COMPUTE.out
@@ -0,0 +1,71 @@
+ROUNDING from NumericDisplay after COMPUTE.
+Rounding mode TRUNCATION +111.0 becomes +111
+Rounding mode TRUNCATION +111.1 becomes +111
+Rounding mode TRUNCATION +111.5 becomes +111
+Rounding mode TRUNCATION +111.9 becomes +111
+Rounding mode TRUNCATION -111.0 becomes -111
+Rounding mode TRUNCATION -111.1 becomes -111
+Rounding mode TRUNCATION -111.5 becomes -111
+Rounding mode TRUNCATION -111.9 becomes -111
+Rounding mode NEAREST-AWAY-FROM-ZERO +111.0 becomes +111
+Rounding mode NEAREST-AWAY-FROM-ZERO +111.1 becomes +111
+Rounding mode NEAREST-AWAY-FROM-ZERO +111.5 becomes +112
+Rounding mode NEAREST-AWAY-FROM-ZERO +111.9 becomes +112
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.0 becomes -111
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.1 becomes -111
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.5 becomes -112
+Rounding mode NEAREST-AWAY-FROM-ZERO -111.9 becomes -112
+Rounding mode AWAY-FROM-ZERO +111.0 becomes +111
+Rounding mode AWAY-FROM-ZERO +111.1 becomes +112
+Rounding mode AWAY-FROM-ZERO +111.5 becomes +112
+Rounding mode AWAY-FROM-ZERO +111.9 becomes +112
+Rounding mode AWAY-FROM-ZERO -111.0 becomes -111
+Rounding mode AWAY-FROM-ZERO -111.1 becomes -112
+Rounding mode AWAY-FROM-ZERO -111.5 becomes -112
+Rounding mode AWAY-FROM-ZERO -111.9 becomes -112
+Rounding mode NEAREST-EVEN +110.0 becomes +110
+Rounding mode NEAREST-EVEN +110.1 becomes +110
+Rounding mode NEAREST-EVEN +110.5 becomes +110
+Rounding mode NEAREST-EVEN +111.0 becomes +111
+Rounding mode NEAREST-EVEN +111.1 becomes +111
+Rounding mode NEAREST-EVEN +111.5 becomes +112
+Rounding mode NEAREST-EVEN +111.9 becomes +112
+Rounding mode NEAREST-EVEN -110.0 becomes -110
+Rounding mode NEAREST-EVEN -110.1 becomes -110
+Rounding mode NEAREST-EVEN -110.5 becomes -110
+Rounding mode NEAREST-EVEN -111.0 becomes -111
+Rounding mode NEAREST-EVEN -111.1 becomes -111
+Rounding mode NEAREST-EVEN -111.5 becomes -112
+Rounding mode NEAREST-EVEN -111.9 becomes -112
+Rounding mode NEAREST-TOWARD-ZERO +111.0 becomes +111
+Rounding mode NEAREST-TOWARD-ZERO +111.1 becomes +111
+Rounding mode NEAREST-TOWARD-ZERO +111.5 becomes +111
+Rounding mode NEAREST-TOWARD-ZERO +111.9 becomes +112
+Rounding mode NEAREST-TOWARD-ZERO -111.0 becomes -111
+Rounding mode NEAREST-TOWARD-ZERO -111.1 becomes -111
+Rounding mode NEAREST-TOWARD-ZERO -111.5 becomes -111
+Rounding mode NEAREST-TOWARD-ZERO -111.9 becomes -112
+Rounding mode TOWARD-GREATER +111.0 becomes +111
+Rounding mode TOWARD-GREATER +111.1 becomes +112
+Rounding mode TOWARD-GREATER +111.5 becomes +112
+Rounding mode TOWARD-GREATER +111.9 becomes +112
+Rounding mode TOWARD-GREATER -111.0 becomes -111
+Rounding mode TOWARD-GREATER -111.1 becomes -111
+Rounding mode TOWARD-GREATER -111.5 becomes -111
+Rounding mode TOWARD-GREATER -111.9 becomes -111
+Rounding mode TOWARD-LESSER +111.0 becomes +111
+Rounding mode TOWARD-LESSER +111.1 becomes +111
+Rounding mode TOWARD-LESSER +111.5 becomes +111
+Rounding mode TOWARD-LESSER +111.9 becomes +111
+Rounding mode TOWARD-LESSER -111.0 becomes -111
+Rounding mode TOWARD-LESSER -111.1 becomes -112
+Rounding mode TOWARD-LESSER -111.5 becomes -112
+Rounding mode TOWARD-LESSER -111.9 becomes -112
+Rounding mode PROHIBITED - fits +111.0 becomes +111
+ EXCEPTION STATUS IS ""
+Rounding mode PROHIBITED - doesn't fit; no ON ERROR phrase +111.5 becomes +123
+ EXCEPTION STATUS IS "EC-SIZE-TRUNCATION"
+Rounding mode PROHIBITED - doesn't fit; ON ERROR phrase +111.5 becomes +123
+ COMPUTE had an ON SIZE error
+ EXCEPTION STATUS IS "EC-SIZE-TRUNCATION"
+
diff --git a/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.cob b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.cob
new file mode 100644
index 0000000..631b48e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Separate_sign_positions__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9 VALUE -1 SIGN LEADING SEPARATE.
+ 01 Y PIC S9 VALUE -1 SIGN TRAILING SEPARATE.
+ PROCEDURE DIVISION.
+ DISPLAY X(1:1) X(2:1) NO ADVANCING
+ END-DISPLAY.
+ DISPLAY Y(1:1) Y(2:1) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.out b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.out
new file mode 100644
index 0000000..d981f48
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__1_.out
@@ -0,0 +1 @@
+-11-
diff --git a/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.cob b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.cob
new file mode 100644
index 0000000..1c6b423
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Separate_sign_positions__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9 SIGN LEADING SEPARATE.
+ 01 Y PIC S9 SIGN TRAILING SEPARATE.
+ PROCEDURE DIVISION.
+ MOVE 0 TO X.
+ DISPLAY X NO ADVANCING
+ END-DISPLAY.
+ MOVE ZERO TO X.
+ DISPLAY X NO ADVANCING
+ END-DISPLAY.
+ MOVE 0 TO Y.
+ DISPLAY Y NO ADVANCING
+ END-DISPLAY.
+ MOVE ZERO TO Y.
+ DISPLAY Y NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.out b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.out
new file mode 100644
index 0000000..6d2ea72
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Separate_sign_positions__2_.out
@@ -0,0 +1 @@
++0+00+0+
diff --git a/gcc/testsuite/cobol.dg/group2/Simple_TYPEDEF.cob b/gcc/testsuite/cobol.dg/group2/Simple_TYPEDEF.cob
new file mode 100644
index 0000000..c2fffbe
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Simple_TYPEDEF.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-options "-dialect mf" }
+
+ identification division.
+ program-id. wrapper.
+ data division.
+ working-storage section.
+ 77 UNS-CHAR PIC 9(02) COMP-5 IS TYPEDEF.
+ 01 Z-H3 PIC X(017) .
+ 01 I-H3A USAGE UNS-CHAR.
+ 01 I-H3B USAGE UNS-CHAR.
+ 78 I-H3-max VALUE LENGTH OF Z-H3.
+ procedure division.
+ goback.
+ end program wrapper.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Simple_p-scaling.cob b/gcc/testsuite/cobol.dg/group2/Simple_p-scaling.cob
new file mode 100644
index 0000000..db3bc41
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Simple_p-scaling.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Simple_p-scaling.out" }
+
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 vars.
+ 05 vars01 picture 99ppp DISPLAY value 78000 .
+ 05 vars02 picture 99ppp BINARY value 78000 .
+ 05 vars03 picture 99ppp COMP-3 value 78000 .
+ 05 vars04 picture 99ppp COMP-5 value 78000 .
+ 05 vars05 picture 99ppp PACKED-DECIMAL value 78000 .
+ 01 vary.
+ 05 vary01 picture ppp99 DISPLAY value 0.00078 .
+ 05 vary02 picture ppp99 BINARY value 0.00078 .
+ 05 vary03 picture ppp99 COMP-3 value 0.00078 .
+ 05 vary04 picture ppp99 COMP-5 value 0.00078 .
+ 05 vary05 picture ppp99 PACKED-DECIMAL value 0.00078 .
+ procedure division.
+ display vars01
+ display vars02
+ display vars03
+ display vars04
+ display vars05
+ display vary01
+ display vary02
+ display vary03
+ display vary04
+ display vary05
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Simple_p-scaling.out b/gcc/testsuite/cobol.dg/group2/Simple_p-scaling.out
new file mode 100644
index 0000000..8d9c45c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Simple_p-scaling.out
@@ -0,0 +1,11 @@
+78000
+78000
+78000
+78000
+78000
+.00078
+.00078
+.00078
+.00078
+.00078
+
diff --git a/gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.cob b/gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.cob
new file mode 100644
index 0000000..880d865
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.cob
@@ -0,0 +1,21 @@
+ *> { dg-do run }
+ *> { dg-options "-ffixed-form" }
+ *> { dg-output-file "group2/debugging_lines__WITH_DEBUGGING_MODE_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. mine WITH DEBUGGING MODE.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ * Original "incorrect ordered lines"
+ * DISPLAY "KO" NO ADVANCING UPON STDOUT
+ * END-DISPLAY.
+ D DISPLAY "KO" UPON STDOUT NO ADVANCING
+ D END-DISPLAY.
+ DISPLAY "OK" UPON STDOUT NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.out b/gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.out
new file mode 100644
index 0000000..6f0a25f5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/debugging_lines__WITH_DEBUGGING_MODE_.out
@@ -0,0 +1 @@
+KOOK
diff --git a/gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.cob b/gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.cob
new file mode 100644
index 0000000..56cb067
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/debugging_lines__not_active_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY "OK" NO ADVANCING
+ END-DISPLAY.
+ D DISPLAY "KO" NO ADVANCING
+ D END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.out b/gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.out
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/debugging_lines__not_active_.out
@@ -0,0 +1 @@
+OK
diff --git a/gcc/testsuite/cobol.dg/group2/integer_arithmetic_on_floating-point_var.cob b/gcc/testsuite/cobol.dg/group2/integer_arithmetic_on_floating-point_var.cob
new file mode 100644
index 0000000..bf7bd78
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/integer_arithmetic_on_floating-point_var.cob
@@ -0,0 +1,29 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 x USAGE COMP-1 VALUE 123.456.
+ PROCEDURE DIVISION.
+ ADD 360 TO x
+ IF x > 483.457 OR x < 483.455
+ DISPLAY "ADD wrong: " x
+ MOVE 483.456 TO x
+ END-IF
+ SUBTRACT 360 FROM x
+ IF x > 123.457 OR x < 123.455
+ DISPLAY "SUBTRACT wrong: " x
+ MOVE 123.456 TO x
+ END-IF
+ DIVIDE 2 INTO x
+ IF x > 61.729 OR x < 61.727
+ DISPLAY "DIVIDE wrong: " x
+ MOVE 61.728 TO x
+ END-IF
+ MULTIPLY 2 BY x
+ IF x > 123.457 OR x < 123.455
+ DISPLAY "MULTIPLY wrong: " x
+ END-IF
+ GOBACK.
+
diff --git a/gcc/testsuite/g++.dg/abi/macro0.C b/gcc/testsuite/g++.dg/abi/macro0.C
index f6a57c1..3dd44fc 100644
--- a/gcc/testsuite/g++.dg/abi/macro0.C
+++ b/gcc/testsuite/g++.dg/abi/macro0.C
@@ -1,6 +1,6 @@
// This testcase will need to be kept in sync with c_common_post_options.
// { dg-options "-fabi-version=0" }
-#if __GXX_ABI_VERSION != 1020
+#if __GXX_ABI_VERSION != 1021
#error "Incorrect value of __GXX_ABI_VERSION"
#endif
diff --git a/gcc/testsuite/g++.dg/abi/ref-temp1.C b/gcc/testsuite/g++.dg/abi/ref-temp1.C
index 70c9a7a..b02dcf6 100644
--- a/gcc/testsuite/g++.dg/abi/ref-temp1.C
+++ b/gcc/testsuite/g++.dg/abi/ref-temp1.C
@@ -7,11 +7,16 @@ struct B { const A (&x)[2]; };
template <typename T> B &&b = { { { { 1, 2, 3 } }, { { 4, 5, 6 } } } };
B &temp = b<void>;
-// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE_" } }
-// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE0_" } }
-// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE1_" } }
-// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE2_" } }
+// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE_" { target { ! pe } } } }
+// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE0_" { target { ! pe } } } }
+// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE1_" { target { ! pe } } } }
+// { dg-final { scan-assembler ".weak\(_definition\)?\[ \t\]_?_ZGR1bIvE2_" { target { ! pe } } } }
+// { dg-final { scan-assembler "\.section\t\.data\\\$_ZGR1bIvE_,\"w\"\n\t\.linkonce same_size" { target pe } } }
+// { dg-final { scan-assembler "\.section\t\.rdata\\\$_ZGR1bIvE0_,\"dr\"\n\t\.linkonce same_size" { target pe } } }
+// { dg-final { scan-assembler "\.section\t\.rdata\\\$_ZGR1bIvE1_,\"dr\"\n\t\.linkonce same_size" { target pe } } }
+// { dg-final { scan-assembler "\.section\t\.rdata\\\$_ZGR1bIvE2_,\"dr\"\n\t\.linkonce same_size" { target pe } } }
+//
// { dg-final { scan-assembler "_ZGR1bIvE_:\n\[^\n]+_ZGR1bIvE0_" } }
// { dg-final { scan-assembler "_ZGR1bIvE0_:\n\[^\n]+_ZGR1bIvE1_" } }
// { dg-final { scan-assembler "_ZGR1bIvE1_:\n\[^\n]+\[ \t\]1" } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-noexcept1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-noexcept1.C
new file mode 100644
index 0000000..d744556
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-noexcept1.C
@@ -0,0 +1,10 @@
+// PR c++/119764
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "-fabi-version=0 -Wabi=20" }
+
+int main() {
+ const int x = 123;
+ auto a = [&]() { return x; };
+ auto b = [&]() noexcept { return x; }; // { dg-warning "no longer captured" }
+ static_assert(sizeof(a) == sizeof(b), "");
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C
index ee62f18..17c9f54 100644
--- a/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C
+++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-new24.C
@@ -6,14 +6,14 @@ int a;
constexpr char *
f1 ()
{
- constexpr auto p = new char[(long int) &a]; // { dg-error "size not constant" }
+ constexpr auto p = new char[(long int) &a]; // { dg-error "conversion from pointer" }
return p;
}
constexpr char *
f2 ()
{
- auto p = new char[(long int) &a]; // { dg-error "size not constant" }
+ auto p = new char[(long int) &a]; // { dg-error "conversion from pointer" }
return p;
}
diff --git a/gcc/testsuite/g++.dg/eh/pr119507.C b/gcc/testsuite/g++.dg/eh/pr119507.C
new file mode 100644
index 0000000..168779b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/pr119507.C
@@ -0,0 +1,21 @@
+// { dg-do compile { target comdat_group } }
+// ARM EABI has its own exception handling data handling and does not use gcc_except_table
+// { dg-skip-if "!TARGET_EXCEPTION_DATA" { arm_eabi } }
+// Solaris/SPARC as uses a widely different COMDAT section syntax.
+// { dg-skip-if "Solaris/SPARC as syntax" { sparc*-*-solaris2* && { ! gas } } }
+// Force off function sections
+// Force on exceptions
+// { dg-options "-fno-function-sections -fexceptions" }
+// PR middle-end/119507
+
+
+inline int comdat() { try { throw 1; } catch (int) { return 1; } return 0; }
+int another_func_with_exception() { try { throw 1; } catch (int) { return 1; } return 0; }
+inline int comdat1() { try { throw 1; } catch (int) { return 1; } return 0; }
+int foo() { return comdat() + comdat1(); }
+
+// Make sure the gcc puts the exception table for both comdat and comdat1 in their own section
+// { dg-final { scan-assembler-times ".section\[\t \]\[^\n\]*.gcc_except_table._Z6comdatv" 1 } }
+// { dg-final { scan-assembler-times ".section\[\t \]\[^\n\]*.gcc_except_table._Z7comdat1v" 1 } }
+// There should be 3 exception tables,
+// { dg-final { scan-assembler-times ".section\[\t \]\[^\n\]*.gcc_except_table" 3 } }
diff --git a/gcc/testsuite/g++.dg/gcov/gcov.exp b/gcc/testsuite/g++.dg/gcov/gcov.exp
index 50f60c4..04c7c95 100644
--- a/gcc/testsuite/g++.dg/gcov/gcov.exp
+++ b/gcc/testsuite/g++.dg/gcov/gcov.exp
@@ -21,12 +21,19 @@ load_lib g++-dg.exp
load_lib gcov.exp
global GXX_UNDER_TEST
+global GCOV_UNDER_TEST
-# Find gcov in the same directory as $GXX_UNDER_TEST.
-if { ![is_remote host] && [string match "*/*" [lindex $GXX_UNDER_TEST 0]] } {
- set GCOV [file dirname [lindex $GXX_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov]
+# Find gcov in the same directory as $GXX_UNDER_TEST, unless
+# GCOV_UNDER_TEST is defined.
+
+if ![info exists GCOV_UNDER_TEST] {
+ if { ![is_remote host] && [string match "*/*" [lindex $GXX_UNDER_TEST 0]] } {
+ set GCOV [file dirname [lindex $GXX_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov]
+ } else {
+ set GCOV [gcc-transform-out-of-tree gcov]
+ }
} else {
- set GCOV [gcc-transform-out-of-tree gcov]
+ set GCOV $GCOV_UNDER_TEST
}
# Initialize harness.
diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C b/gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C
new file mode 100644
index 0000000..333c976
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/tpl-friend-18_a.C
@@ -0,0 +1,25 @@
+// PR c++/119863
+// { dg-additional-options "-fmodules" }
+// { dg-module-cmi A }
+
+export module A;
+
+template<typename>
+class T;
+
+template<typename>
+class U
+{
+ template<typename>
+ friend class T;
+};
+
+template<typename V>
+class T
+{
+ U<V> x = {};
+};
+
+export
+template<typename V>
+T<V> f(V) { return {}; }
diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C b/gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C
new file mode 100644
index 0000000..2e537ed
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/tpl-friend-18_b.C
@@ -0,0 +1,9 @@
+// PR c++/119863
+// { dg-additional-options "-fmodules" }
+// { dg-module-cmi B }
+
+export module B;
+
+// this should not be considered conflicting
+template <typename>
+class T;
diff --git a/gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C b/gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C
new file mode 100644
index 0000000..6c8d85b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/tpl-friend-18_c.C
@@ -0,0 +1,10 @@
+// PR c++/119863
+// { dg-additional-options "-fmodules" }
+
+import A;
+import B;
+
+int main()
+{
+ auto const x = f(1);
+}
diff --git a/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C b/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C
index 147c2b7..b858d70 100644
--- a/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C
+++ b/gcc/testsuite/g++.dg/no-stack-protector-attr-3.C
@@ -6,6 +6,7 @@
/* { dg-additional-options "-fno-PIE" { target ia32 } } */
/* { dg-do compile { target { ! hppa*-*-* } } } */
+/* { dg-require-effective-target fstack_protector } */
int __attribute__((no_stack_protector)) foo()
{
diff --git a/gcc/testsuite/g++.dg/opt/pr119327.C b/gcc/testsuite/g++.dg/opt/pr119327.C
new file mode 100644
index 0000000..598ae1c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr119327.C
@@ -0,0 +1,16 @@
+// PR target/119327
+// { dg-do compile { target c++11 } }
+// { dg-options "-Os" }
+
+#pragma GCC optimize "fp-contract=off"
+
+template <class T>
+void
+foo (T f)
+{
+ f ();
+}
+
+struct S {
+ S () { [] {}; foo ([] __attribute__((always_inline)) {}); }
+} s;
diff --git a/gcc/testsuite/g++.dg/template/recurse5.C b/gcc/testsuite/g++.dg/template/recurse5.C
new file mode 100644
index 0000000..7bfe523
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/recurse5.C
@@ -0,0 +1,17 @@
+// Test that we don't bother to instantiate add since there were errors in
+// checked_add.
+
+template <class T> T add (T t) { return t+1; } // { dg-bogus "no match" }
+
+template <class T> T checked_add (T t)
+{
+ add (t);
+ return t+1; // { dg-error "no match" }
+}
+
+struct A { };
+
+int main()
+{
+ checked_add (A());
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr119610.C b/gcc/testsuite/g++.dg/torture/pr119610.C
new file mode 100644
index 0000000..9998026
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr119610.C
@@ -0,0 +1,18 @@
+// { dg-do run }
+// { dg-additional-options "-fstack-protector-strong" { target fstack_protector } }
+// { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } }
+
+int *ptr;
+void foo() {
+ int c[1024*128];
+ ptr = c;
+ throw 1;
+}
+int main()
+{
+ try {
+ foo();
+ } catch(int x) {
+ return 0;
+ }
+}
diff --git a/gcc/testsuite/g++.target/aarch64/spaceship_1.C b/gcc/testsuite/g++.target/aarch64/spaceship_1.C
new file mode 100644
index 0000000..e6daf62
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/spaceship_1.C
@@ -0,0 +1,192 @@
+// PR117013
+/* { dg-do run } */
+/* { dg-options "-O2 -std=c++20 -save-temps -fno-schedule-insns2" } */
+/* { dg-final { check-function-bodies "**" "" ""} } */
+
+#include <compare>
+#include <stdint.h>
+
+/* Some implementation-defined value (other than 2) to represent
+ partial_ordering::unordered (that for libc++ in this case). */
+#define IMP_UN -127
+
+#define SPACESHIP_FN(TYPE) \
+ [[gnu::noipa]] \
+ auto ss_##TYPE (TYPE a, TYPE b) \
+ { return a <=> b; } \
+
+#define SPACESHIP_FN_NN(TYPE) \
+ [[gnu::noipa, gnu::optimize ("-ffinite-math-only")]] \
+ auto ss_##TYPE##_no_nans (TYPE a, TYPE b) \
+ { return a <=> b; } \
+
+/* <=> implementation for floating-point operands. */
+#define SPACESHIP_FP_IDIOM(TYPE) \
+ [[gnu::noipa]] \
+ int ss_##TYPE##_idiom (TYPE a, TYPE b) \
+ { return ((a) == (b) ? 0 : (a) < (b) ? -1 : (a) > (b) ? 1 : IMP_UN); } \
+
+#define RUN_TEST(TYPE, ARGA, ARGB, EXPECT, SUFF) \
+ if (ss_##TYPE##SUFF ((ARGA), (ARGB)) != (EXPECT)) \
+ __builtin_abort(); \
+
+/*
+** _Z8ss_floatff:
+** fcmpe s0, s1
+** csinv (w[0-9]+), wzr, wzr, pl
+** cset (w[0-9]+), vs
+** csinc w0, \1, \2, ls
+** ret
+*/
+SPACESHIP_FN(float);
+
+/*
+** _Z16ss_float_no_nansff:
+** fcmpe s0, s1
+** csinv (w[0-9]+), wzr, wzr, pl
+** csinc w0, \1, wzr, ls
+** ret
+*/
+SPACESHIP_FN_NN(float);
+
+/*
+** _Z9ss_doubledd:
+** fcmpe d0, d1
+** csinv (w[0-9]+), wzr, wzr, pl
+** cset (w[0-9]+), vs
+** csinc w0, \1, \2, ls
+** ret
+*/
+SPACESHIP_FN(double);
+
+/*
+** _Z17ss_double_no_nansdd:
+** fcmpe d0, d1
+** csinv (w[0-9]+), wzr, wzr, pl
+** csinc w0, \1, wzr, ls
+** ret
+*/
+SPACESHIP_FN_NN(double);
+
+/*
+** _Z14ss_float_idiomff:
+** fcmpe s0, s1
+** csinv (w[0-9]+), wzr, wzr, pl
+** mov (w[0-9]+), -128
+** csel (w[0-9]+), \2, wzr, vs
+** csinc w0, \1, \3, ls
+** ret
+*/
+SPACESHIP_FP_IDIOM(float);
+
+/*
+** _Z15ss_double_idiomdd:
+** fcmpe d0, d1
+** csinv (w[0-9]+), wzr, wzr, pl
+** mov (w[0-9]+), -128
+** csel (w[0-9]+), \2, wzr, vs
+** csinc w0, \1, \3, ls
+** ret
+*/
+SPACESHIP_FP_IDIOM(double);
+
+/*
+** _Z10ss_int32_tii:
+** cmp w0, w1
+** cset (w[0-9]+), gt
+** csinv w0, \1, wzr, ge
+** ret
+*/
+SPACESHIP_FN(int32_t);
+
+/*
+** _Z10ss_int64_tll:
+** cmp x0, x1
+** cset (w[0-9]+), gt
+** csinv w0, \1, wzr, ge
+** ret
+*/
+SPACESHIP_FN(int64_t);
+
+/*
+** _Z11ss_uint32_tjj:
+** cmp w0, w1
+** cset (w[0-9]+), hi
+** csinv w0, \1, wzr, cs
+** ret
+*/
+SPACESHIP_FN(uint32_t);
+
+/*
+** _Z11ss_uint64_tmm:
+** cmp x0, x1
+** cset (w[0-9]+), hi
+** csinv w0, \1, wzr, cs
+** ret
+*/
+SPACESHIP_FN(uint64_t);
+
+
+int
+main()
+{
+ /* Single precision floating point. */
+ RUN_TEST (float, -1.0f, 1.0f, std::partial_ordering::less,);
+ RUN_TEST (float, -1.0f, 1.0f, -1, _idiom);
+
+ RUN_TEST (float, 1.0f, -1.0f, std::partial_ordering::greater,);
+ RUN_TEST (float, 1.0f, -1.0f, 1, _idiom);
+
+ RUN_TEST (float, -1.0f, -1.0f, std::partial_ordering::equivalent,);
+ RUN_TEST (float, -1.0f, -1.0f, 0, _idiom);
+
+ RUN_TEST (float, __builtin_nanf(""), 1.0f, std::partial_ordering::unordered,);
+ RUN_TEST (float, __builtin_nanf(""), 1.0f, IMP_UN, _idiom);
+ RUN_TEST (float, 1.0f ,__builtin_nanf(""), std::partial_ordering::unordered,);
+ RUN_TEST (float, 1.0f, __builtin_nanf(""), IMP_UN, _idiom);
+
+ /* No-NaNs. */
+ RUN_TEST (float, -1.0f, 1.0f, std::partial_ordering::less, _no_nans);
+ RUN_TEST (float, 1.0f, -1.0f, std::partial_ordering::greater, _no_nans);
+ RUN_TEST (float, -1.0f, -1.0f, std::partial_ordering::equivalent, _no_nans);
+
+ /* Double precision floating point. */
+ RUN_TEST (double, -1.0f, 1.0f, std::partial_ordering::less,);
+ RUN_TEST (double, -1.0f, 1.0f, -1, _idiom);
+
+ RUN_TEST (double, 1.0f, -1.0f, std::partial_ordering::greater,);
+ RUN_TEST (double, 1.0f, -1.0f, 1, _idiom);
+
+ RUN_TEST (double, -1.0f, -1.0f, std::partial_ordering::equivalent,);
+ RUN_TEST (double, -1.0f, -1.0f, 0, _idiom);
+
+ RUN_TEST (double, __builtin_nanf(""), 1.0f, std::partial_ordering::unordered,);
+ RUN_TEST (double, __builtin_nanf(""), 1.0f, IMP_UN, _idiom);
+ RUN_TEST (double, 1.0f, __builtin_nanf(""), std::partial_ordering::unordered,);
+ RUN_TEST (double, 1.0f, __builtin_nanf(""), IMP_UN, _idiom);
+
+ /* No-NaNs. */
+ RUN_TEST (double, -1.0f, 1.0f, std::partial_ordering::less, _no_nans);
+ RUN_TEST (double, 1.0f, -1.0f, std::partial_ordering::greater, _no_nans);
+ RUN_TEST (double, -1.0f, -1.0f, std::partial_ordering::equivalent, _no_nans);
+
+ /* Single integer. */
+ RUN_TEST (int32_t, -42, 0, std::strong_ordering::less,);
+ RUN_TEST (int32_t, 0, -42, std::strong_ordering::greater,);
+ RUN_TEST (int32_t, 42, 42, std::strong_ordering::equal,);
+
+ RUN_TEST (uint32_t, 0, 42, std::strong_ordering::less,);
+ RUN_TEST (uint32_t, 42, 0, std::strong_ordering::greater,);
+ RUN_TEST (uint32_t, 42, 42, std::strong_ordering::equal,);
+
+ /* Double integer. */
+ RUN_TEST (int64_t, -42, 0, std::strong_ordering::less,);
+ RUN_TEST (int64_t, 42, 0, std::strong_ordering::greater,);
+ RUN_TEST (int64_t, 42, 42, std::strong_ordering::equal,);
+
+ RUN_TEST (uint64_t, 0, 42, std::strong_ordering::less,);
+ RUN_TEST (uint64_t, 42, 0, std::strong_ordering::greater,);
+ RUN_TEST (uint64_t, 42, 42, std::strong_ordering::equal,);
+
+ return 0;
+} \ No newline at end of file
diff --git a/gcc/testsuite/g++.target/aarch64/spaceship_2.C b/gcc/testsuite/g++.target/aarch64/spaceship_2.C
new file mode 100644
index 0000000..c1d3900
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/spaceship_2.C
@@ -0,0 +1,72 @@
+// PR117013
+/* { dg-do run } */
+// { dg-options "-O2 -std=c++20 -save-temps" }
+
+#include <compare>
+
+#ifndef fp_type
+#define fp_type float
+#endif
+
+#define TEST_SS_IDIOM(ARGA, ARGB, EXPECT) \
+ if (spaceship_idiom ((ARGA), (ARGB)) != (EXPECT)) \
+ __builtin_abort(); \
+
+#define TEST_BR_ON_SS(ARGA, ARGB, EXPECT) \
+ if(branch_on_spaceship ((ARGA), (ARGB)) != (EXPECT)) \
+ __builtin_abort(); \
+
+
+#define RUN_TEST(ARGA, ARGB, EXPECT) \
+ TEST_SS_IDIOM(ARGA, ARGB, EXPECT) \
+ TEST_BR_ON_SS(ARGA, ARGB, EXPECT) \
+
+/* Test when .SPACESHIP prompts the back end to implement <=> with
+ conditional branches (only applies to floating-point operands). */
+
+[[gnu::noipa]] auto
+equiv() { return std::partial_ordering::equivalent; }
+[[gnu::noipa]] auto
+less() { return std::partial_ordering::less; }
+[[gnu::noipa]] auto
+greater() { return std::partial_ordering::greater; }
+[[gnu::noipa]] auto
+unordered() { return std::partial_ordering::unordered; }
+
+auto
+spaceship_idiom(fp_type a, fp_type b)
+{
+ if (a == b)
+ return equiv();
+ if (a < b)
+ return less();
+ if (a > b)
+ return greater();
+ return unordered();
+}
+
+auto
+branch_on_spaceship(fp_type a, fp_type b)
+{
+ auto res = a <=> b;
+ if (res == 0)
+ return equiv();
+ else if (res < 0)
+ return less();
+ else if (res > 0)
+ return greater();
+ return unordered();
+}
+
+int
+main()
+{
+ RUN_TEST (-1.0f, 1.0f, std::partial_ordering::less);
+ RUN_TEST (1.0f, -1.0f, std::partial_ordering::greater);
+ RUN_TEST (1.0f, 1.0f, std::partial_ordering::equivalent);
+ RUN_TEST (1.0f, __builtin_nanf(""), std::partial_ordering::unordered);
+ RUN_TEST (__builtin_nanf(""), 1.0f, std::partial_ordering::unordered);
+}
+
+/* { dg-final { scan-assembler-not "\tfcmp\t" } } */
+/* { dg-final { scan-assembler-times "\tfcmpe\t" 2 } } */ \ No newline at end of file
diff --git a/gcc/testsuite/g++.target/aarch64/spaceship_3.C b/gcc/testsuite/g++.target/aarch64/spaceship_3.C
new file mode 100644
index 0000000..f58b084
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/spaceship_3.C
@@ -0,0 +1,9 @@
+// PR117013
+/* { dg-do run } */
+// { dg-options "-O2 -std=c++20 -save-temps" }
+
+#define fp_type double
+#include "spaceship_2.C"
+
+/* { dg-final { scan-assembler-not "\tfcmp\t" } } */
+/* { dg-final { scan-assembler-times "\tfcmpe\t" 2 } } */ \ No newline at end of file
diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C b/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C
new file mode 100644
index 0000000..0044e51
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C
@@ -0,0 +1,20 @@
+// { dg-do run { target aarch64_sve_hw } }
+// { dg-additional-options "-fstack-protector-strong" { target fstack_protector } }
+// { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } }
+
+void *a_ptr, *b_ptr;
+void foo() {
+ __SVInt32_t a;
+ int b[1024*128];
+ a_ptr = &a;
+ b_ptr = b;
+ throw 1;
+}
+int main()
+{
+ try {
+ foo();
+ } catch(int x) {
+ return 0;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/completion-2.c b/gcc/testsuite/gcc.dg/completion-2.c
index 46c511c..99e6531 100644
--- a/gcc/testsuite/gcc.dg/completion-2.c
+++ b/gcc/testsuite/gcc.dg/completion-2.c
@@ -5,7 +5,6 @@
-flto-partition=1to1
-flto-partition=balanced
-flto-partition=cache
--flto-partition=default
-flto-partition=max
-flto-partition=none
-flto-partition=one
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c b/gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c
new file mode 100644
index 0000000..bf74e64
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/ipa-clone-4.c
@@ -0,0 +1,30 @@
+/* { dg-options "-O3 -fdump-ipa-cp" } */
+__attribute__ ((used))
+int a[1000];
+
+__attribute__ ((noinline))
+void
+test2(int sz)
+{
+ for (int i = 0; i < sz; i++)
+ a[i]++;
+ asm volatile (""::"m"(a));
+}
+
+__attribute__ ((noinline))
+void
+test1 (int sz)
+{
+ for (int i = 0; i < 1000; i++)
+ test2(sz);
+}
+int main()
+{
+ test1(1000);
+ return 0;
+}
+/* We should clone test1 and test2 for constant 1000.
+ In the past we did not do this since we did not clone for edges that are not hot
+ and call main->test1 is not considered hot since it is executed just once. */
+/* { dg-final { scan-ipa-dump-times "Creating a specialized node of test1" 1 "cp"} } */
+/* { dg-final { scan-ipa-dump-times "Creating a specialized node of test2" 1 "cp"} } */
diff --git a/gcc/testsuite/gcc.dg/memcpy-4.c b/gcc/testsuite/gcc.dg/memcpy-4.c
index 4c726f0..b17b369 100644
--- a/gcc/testsuite/gcc.dg/memcpy-4.c
+++ b/gcc/testsuite/gcc.dg/memcpy-4.c
@@ -1,13 +1,8 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-rtl-expand" } */
+/* { dg-options "-O2" } */
-#ifdef __mips
-__attribute__((nomips16))
-#endif
void
f1 (char *p)
{
__builtin_memcpy (p, "12345", 5);
}
-
-/* { dg-final { scan-rtl-dump "mem/u.*mem/u" "expand" { target mips*-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/pr116357.c b/gcc/testsuite/gcc.dg/pr116357.c
index 07effa1..12aaf62 100644
--- a/gcc/testsuite/gcc.dg/pr116357.c
+++ b/gcc/testsuite/gcc.dg/pr116357.c
@@ -2,9 +2,9 @@
/* { dg-do compile } */
/* { dg-options "" } */
-typedef int A __attribute__((aligned (2 * alignof (int))));
+typedef int A __attribute__((aligned (2 * sizeof (int))));
A a[4]; /* { dg-error "alignment of array elements is greater than element size" } */
-typedef volatile int B __attribute__((aligned (2 * alignof (int))));
+typedef volatile int B __attribute__((aligned (2 * sizeof (int))));
B b[4]; /* { dg-error "alignment of array elements is greater than element size" } */
-typedef const int C __attribute__((aligned (2 * alignof (int))));
+typedef const int C __attribute__((aligned (2 * sizeof (int))));
C c[4]; /* { dg-error "alignment of array elements is greater than element size" } */
diff --git a/gcc/testsuite/gcc.dg/pr116479.c b/gcc/testsuite/gcc.dg/pr116479.c
new file mode 100644
index 0000000..dbbcb9a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr116479.c
@@ -0,0 +1,26 @@
+/* PR 116479 */
+/* { dg-do run { target { bitint } } } */
+/* { dg-additional-options "-O -funroll-loops -finline-stringops -fmodulo-sched --param=max-iterations-computation-cost=637924687 -std=c23" } */
+
+#if __BITINT_MAXWIDTH__ >= 13577
+_BitInt (13577) b;
+
+void
+foo (char *ret)
+{
+ __builtin_memset (&b, 4, 697);
+ *ret = 0;
+}
+#endif
+
+int
+main ()
+{
+#if __BITINT_MAXWIDTH__ >= 13577
+ char x;
+ foo (&x);
+ for (unsigned i = 0; i < sizeof (x); i++)
+ if (x != 0)
+ __builtin_abort ();
+#endif
+}
diff --git a/gcc/testsuite/gcc.dg/pr118947-1.c b/gcc/testsuite/gcc.dg/pr118947-1.c
new file mode 100644
index 0000000..8733e8d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr118947-1.c
@@ -0,0 +1,15 @@
+/* PR tree-optimization/118947 */
+/* { dg-do compile { target size32plus } } */
+/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */
+/* { dg-final { scan-tree-dump-times "after previous" 1 "forwprop1" } } */
+
+void* aaa();
+void* bbb()
+{
+ char buf[1025] = {};
+ /* Tha call to aaa should not matter and clobber buf. */
+ void* ret = aaa();
+ __builtin_memcpy(ret, buf, sizeof(buf));
+ return ret;
+}
+
diff --git a/gcc/testsuite/gcc.dg/pr78408-3.c b/gcc/testsuite/gcc.dg/pr78408-3.c
new file mode 100644
index 0000000..5ea5458
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr78408-3.c
@@ -0,0 +1,14 @@
+/* PR tree-optimization/78408 */
+/* { dg-do compile { target size32plus } } */
+/* { dg-options "-O2 -fdump-tree-forwprop1-details" } */
+/* { dg-final { scan-tree-dump-times "after previous" 1 "forwprop1" } } */
+
+void* aaa();
+void* bbb()
+{
+ void* ret = aaa();
+ char buf[1025] = {};
+ __builtin_memcpy(ret, buf, sizeof(buf));
+ return ret;
+}
+
diff --git a/gcc/testsuite/gcc.dg/raw-string-1.c b/gcc/testsuite/gcc.dg/raw-string-1.c
new file mode 100644
index 0000000..77d6145
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/raw-string-1.c
@@ -0,0 +1,25 @@
+/* PR c++/110343 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu23" } */
+
+const void *s0 = R"0123456789abcdefg()0123456789abcdefg" 0;
+ /* { dg-error "raw string delimiter longer" "longer" { target *-*-* } .-1 } */
+ /* { dg-error "stray" "stray" { target *-*-* } .-2 } */
+const void *s1 = R" () " 0;
+ /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */
+ /* { dg-error "stray" "stray" { target *-*-* } .-2 } */
+const void *s2 = R" () " 0;
+ /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */
+ /* { dg-error "stray" "stray" { target *-*-* } .-2 } */
+const void *s3 = R")())" 0;
+ /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */
+ /* { dg-error "stray" "stray" { target *-*-* } .-2 } */
+const char *s4 = R"@()@";
+const char *s5 = R"$()$";
+const char *s6 = R"`()`";
+const void *s7 = R"\u0040()\u0040" 0;
+ /* { dg-error "invalid character" "invalid" { target *-*-* } .-1 } */
+ /* { dg-error "stray" "stray" { target *-*-* } .-2 } */
+const char *s8 = R"`@$$@`@`$()`@$$@`@`$";
+
+int main () {}
diff --git a/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c
new file mode 100644
index 0000000..871d489
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-2.c
@@ -0,0 +1,71 @@
+/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-additional-options "-O2 -march=x86-64-v3" } */
+
+typedef int v4si __attribute__((vector_size(16)));
+typedef int v8si __attribute__((vector_size(32)));
+typedef int v2di __attribute__((vector_size(16)));
+
+v4si __RTL (startwith ("vregs1")) foo1 (void)
+{
+(function "foo1"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cnote 2 NOTE_INSN_FUNCTION_BEG)
+ (cinsn 3 (set (reg:V4SI <0>) (const_vector:V4SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1)])))
+ (cinsn 4 (set (reg:V4SI <1>) (const_vector:V4SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1)])))
+ (cinsn 5 (set (reg:V4SI <2>)
+ (eq:V4SI (reg:V4SI <0>) (reg:V4SI <1>))))
+ (cinsn 6 (set (reg:V4SI <3>) (reg:V4SI <2>)))
+ (cinsn 7 (set (reg:V4SI xmm0) (reg:V4SI <3>)))
+ (edge-to exit (flags "FALLTHRU"))
+ )
+ )
+ (crtl (return_rtx (reg/i:V4SI xmm0)))
+)
+}
+
+v8si __RTL (startwith ("vregs1")) foo2 (void)
+{
+(function "foo2"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cnote 2 NOTE_INSN_FUNCTION_BEG)
+ (cinsn 3 (set (reg:V8SI <0>) (const_vector:V8SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1)])))
+ (cinsn 4 (set (reg:V8SI <1>) (const_vector:V8SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1) (const_int -1)])))
+ (cinsn 5 (set (reg:V8SI <2>)
+ (eq:V8SI (reg:V8SI <0>) (reg:V8SI <1>))))
+ (cinsn 6 (set (reg:V8SI <3>) (reg:V8SI <2>)))
+ (cinsn 7 (set (reg:V8SI xmm0) (reg:V8SI <3>)))
+ (edge-to exit (flags "FALLTHRU"))
+ )
+ )
+ (crtl (return_rtx (reg/i:V8SI xmm0)))
+)
+}
+
+v2di __RTL (startwith ("vregs1")) foo3 (void)
+{
+(function "foo3"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cnote 2 NOTE_INSN_FUNCTION_BEG)
+ (cinsn 3 (set (reg:V2DI <0>) (const_vector:V2DI [(const_int -1) (const_int -1)])))
+ (cinsn 4 (set (reg:V2DI <1>) (const_vector:V2DI [(const_int -1) (const_int -1)])))
+ (cinsn 5 (set (reg:V2DI <2>)
+ (eq:V2DI (reg:V2DI <0>) (reg:V2DI <1>))))
+ (cinsn 6 (set (reg:V2DI <3>) (reg:V2DI <2>)))
+ (cinsn 7 (set (reg:V2DI xmm0) (reg:V2DI <3>)))
+ (edge-to exit (flags "FALLTHRU"))
+ )
+ )
+ (crtl (return_rtx (reg/i:V2DI xmm0)))
+)
+}
+
+/* { dg-final { scan-assembler-times "vpcmpeq" 3 } } */
diff --git a/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c
new file mode 100644
index 0000000..276c4c2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c
@@ -0,0 +1,74 @@
+/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-additional-options "-O2 -march=x86-64-v3" } */
+
+typedef int v4si __attribute__((vector_size(16)));
+typedef int v8si __attribute__((vector_size(32)));
+typedef int v2di __attribute__((vector_size(16)));
+
+v4si __RTL (startwith ("vregs1")) foo1 (void)
+{
+(function "foo1"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cnote 2 NOTE_INSN_FUNCTION_BEG)
+ (cinsn 3 (set (reg:V4SI <1>)
+ (mem:V4SI (reg:SI di) [0 ptr S128 A128])))
+ (cinsn 4 (set (reg:V4SI <2>)
+ (eq:V4SI (reg:V4SI <1>)
+ (mem:V4SI (reg:SI di) [0 ptr S128 A128]))))
+ (cinsn 5 (set (reg:V4SI <3>) (reg:V4SI <2>)))
+ (cinsn 6 (set (reg:V4SI xmm0) (reg:V4SI <3>)))
+ (edge-to exit (flags "FALLTHRU"))
+ )
+ )
+ (crtl (return_rtx (reg/i:V4SI xmm0)))
+)
+}
+
+v8si __RTL (startwith ("vregs1")) foo2 (void)
+{
+(function "foo2"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cnote 2 NOTE_INSN_FUNCTION_BEG)
+ (cinsn 3 (set (reg:V8SI <1>)
+ (mem:V8SI (reg:SI di) [0 ptr S256 A256])))
+ (cinsn 4 (set (reg:V8SI <2>)
+ (eq:V8SI (mem:V8SI (reg:SI di) [0 ptr S256 A256])
+ (reg:V8SI <1>))))
+ (cinsn 5 (set (reg:V8SI <3>) (reg:V8SI <2>)))
+ (cinsn 6 (set (reg:V8SI xmm0) (reg:V8SI <3>)))
+ (edge-to exit (flags "FALLTHRU"))
+ )
+ )
+ (crtl (return_rtx (reg/i:V8SI xmm0)))
+)
+}
+
+v2di __RTL (startwith ("vregs1")) foo3 (void)
+{
+(function "foo3"
+ (insn-chain
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
+ (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK)
+ (cnote 2 NOTE_INSN_FUNCTION_BEG)
+ (cinsn 3 (set (reg:V2DI <1>)
+ (mem:V2DI (reg:SI di) [0 ptr S128 A128])))
+ (cinsn 4 (set (reg:V2DI <2>)
+ (eq:V2DI (reg:V2DI <1>)
+ (mem:V2DI (reg:SI di) [0 ptr S128 A128]))))
+ (cinsn 5 (set (reg:V2DI <3>) (reg:V2DI <2>)))
+ (cinsn 6 (set (reg:V2DI xmm0) (reg:V2DI <3>)))
+ (edge-to exit (flags "FALLTHRU"))
+ )
+ )
+ (crtl (return_rtx (reg/i:V2DI xmm0)))
+)
+}
+
+/* { dg-final { scan-assembler-times "vpcmpeq" 3 } } */
diff --git a/gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c b/gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c
new file mode 100644
index 0000000..ab6a7f7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-prof/ipa-cp-1.c
@@ -0,0 +1,30 @@
+/* { dg-options "-O2 -fdump-ipa-cp" } */
+__attribute__ ((used))
+int a[1000];
+
+__attribute__ ((noinline))
+void
+test2(int sz)
+{
+ for (int i = 0; i < sz; i++)
+ a[i]++;
+ asm volatile (""::"m"(a));
+}
+
+__attribute__ ((noinline))
+void
+test1 (int sz)
+{
+ for (int i = 0; i < 1000; i++)
+ test2(sz);
+}
+int main()
+{
+ test1(1000);
+ return 0;
+}
+/* We should clone test1 and test2 for constant 1000.
+ In the past we did not do this since we did not clone for edges that are not hot
+ and call main->test1 is not considered hot since it is executed just once. */
+/* { dg-final-use { scan-ipa-dump-times "Creating a specialized node of test1" 1 "cp"} } */
+/* { dg-final-use { scan-ipa-dump-times "Creating a specialized node of test2" 1 "cp"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c
new file mode 100644
index 0000000..fa21b8a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr118902-1.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+void foo(int);
+void l(int**);
+int f1(int j, int t)
+{
+ int p = 0;
+ int *a = &p;
+ l(&a);
+ if (a == &p)
+ return 0;
+ for(int i = 0; i < j; i++)
+ {
+ if (a == &p) foo(p);
+ }
+ return 0;
+}
+
+/* We should be able to remove the call to foo because a is never equal to &p inside the loop. */
+/* { dg-final { scan-tree-dump-not "foo " "optimized"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c
index a879d30..6fa52f6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-cse-2.c
@@ -27,4 +27,4 @@ foo ()
but the loop reads only one element at a time, and DOM cannot resolve these.
The same happens on powerpc depending on the SIMD support available. */
-/* { dg-final { scan-tree-dump "return 28;" "optimized" { xfail { { alpha*-*-* hppa*64*-*-* nvptx*-*-* mmix-knuth-mmixware } || { { { lp64 && { powerpc*-*-* sparc*-*-* riscv*-*-* } } || aarch64_sve } || { arm*-*-* && { ! arm_neon } } } } } } } */
+/* { dg-final { scan-tree-dump "return 28;" "optimized" { xfail { { alpha*-*-* hppa*64*-*-* nvptx*-*-* mmix-knuth-mmixware } || { { { lp64 && { mips*-*-* powerpc*-*-* sparc*-*-* riscv*-*-* } } || aarch64_sve } || { arm*-*-* && { ! arm_neon } } } } } } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c
new file mode 100644
index 0000000..9e605ac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-52.c
@@ -0,0 +1,30 @@
+/* { dg-options "-O2 -fdump-tree-dse-details -fno-tree-fre -fdump-tree-optimized" } */
+
+/* PR tree-optimization/87901 */
+
+char z[32];
+void foo1(void)
+{
+ char z1[17];
+ char z2[24];
+ __builtin_memset (z1, 0, 17);
+ __builtin_memcpy (z, z1, 17);
+ __builtin_memset (z2, 0, 24);
+ __builtin_memcpy (z+8, z2, 24);
+}
+
+/* we should get:
+ MEM <unsigned char[8]> [(char * {ref-all})&z] = {};
+ MEM <unsigned char[24]> [(char * {ref-all})&z + 8B] = {};
+ after DSE; trimming the first memset to z (which was memcpy) to 8 bytes
+ from the original 17.
+ and not have a [17] in the IR after DSE.
+ The two memset to z1/z2 will also be removed.
+ */
+/* { dg-final { scan-tree-dump-not "\\\[17\\\]" "optimized" } } */
+/* { dg-final { scan-tree-dump "\\\[8\\\]" "dse1" } } */
+
+/* { dg-final { scan-tree-dump-times "Trimming statement " 1 "dse1" } } */
+/* { dg-final { scan-tree-dump-times "Deleted dead call:" 2 "dse1" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c
new file mode 100644
index 0000000..a2df591
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-53.c
@@ -0,0 +1,26 @@
+/* { dg-options "-O2 -fno-strict-aliasing -fdump-tree-dse-details -fno-tree-fre -fdump-tree-optimized" } */
+
+/* PR tree-optimization/87901 */
+
+
+int i;
+int foo ()
+{
+ i = 0;
+ *((short *)&i + 1) = 1;
+ return i;
+}
+
+/* we should get:
+ MEM <char[2]> [(int *)&i] = {};
+ MEM[(short int *)&i + 2B] = 1;
+ in DSE1.
+
+ Note later on the stores will be merged. */
+/* { dg-final { scan-tree-dump "return 65536;" "optimized" { target le } } } */
+/* { dg-final { scan-tree-dump "return 1;" "optimized" { target be } } } */
+/* { dg-final { scan-tree-dump "\\\[2\\\]" "dse1" } } */
+
+/* { dg-final { scan-tree-dump-times "Trimming statement " 1 "dse1" } } */
+
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c
new file mode 100644
index 0000000..7e79a73
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dse-54.c
@@ -0,0 +1,25 @@
+/* { dg-options "-O2 -fdump-tree-dse-details -fno-tree-fre -fdump-tree-optimized" } */
+
+/* PR tree-optimization/87901 */
+
+int z[128];
+void foo1(void)
+{
+ int z1;
+ int z2[24/sizeof(int)];
+ __builtin_memset (&z1, 0, sizeof(int));
+ __builtin_memcpy (z, &z1, sizeof(int));
+ __builtin_memset (z2, 0, 24);
+ __builtin_memcpy (((char*)z)+1, z2, 24);
+}
+
+/* we should get:
+ MEM[(char * {ref-all})&z] = {};
+ __builtin_memset (&MEM <int[128]> [(void *)&z + 1B], 0, 24);
+ */
+
+/* { dg-final { scan-tree-dump-not "MEM <unsigned int>" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "MEM \\\[" "dse1" } } */
+/* { dg-final { scan-tree-dump-times "Trimming statement " 1 "dse1" } } */
+/* { dg-final { scan-tree-dump-times "Deleted dead call:" 1 "dse1" } } */
+
diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c
index 36fc6a6..010e7ea 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_38.c
@@ -2,6 +2,7 @@
/* { dg-do compile } */
/* { dg-require-effective-target vect_early_break } */
/* { dg-require-effective-target vect_int } */
+/* { dg-additional-options "-march=gfx908" { target amdgcn*-*-* } } */
#ifndef N
#define N 803
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-31.c b/gcc/testsuite/gcc.misc-tests/gcov-31.c
index 6c42d34..5f060e9 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov-31.c
+++ b/gcc/testsuite/gcc.misc-tests/gcov-31.c
@@ -20,7 +20,7 @@ run_pending_traps ()
jump_to_top_level (2);
for (sig = 1; sig < (64 + 1) ; sig++)
- __sigsetjmp ((return_catch), 0);
+ sigsetjmp ((return_catch), 0);
}
/* Distilled from alsalib-1.2.11 pcm/pcm_route.c. */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov.exp b/gcc/testsuite/gcc.misc-tests/gcov.exp
index c8f20e1..4d427c8 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov.exp
+++ b/gcc/testsuite/gcc.misc-tests/gcov.exp
@@ -21,12 +21,19 @@ load_lib gcc-dg.exp
load_lib gcov.exp
global GCC_UNDER_TEST
+global GCOV_UNDER_TEST
-# For now find gcov in the same directory as $GCC_UNDER_TEST.
-if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } {
- set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov]
+# For now find gcov in the same directory as $GCC_UNDER_TEST, unless
+# GCOV_UNDER_TEST is defined.
+
+if ![info exists GCOV_UNDER_TEST] {
+ if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } {
+ set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov]
+ } else {
+ set GCOV [gcc-transform-out-of-tree gcov]
+ }
} else {
- set GCOV [gcc-transform-out-of-tree gcov]
+ set GCOV $GCOV_UNDER_TEST
}
# Initialize harness.
diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c
new file mode 100644
index 0000000..e49ace1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_1.c
@@ -0,0 +1,54 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv8.2-a+fp16" } */
+
+/*
+** test_fcmp_store:
+** fcmp h0, h1
+** cset w0, eq
+** ret
+*/
+int
+test_fcmp_store(_Float16 a, _Float16 b)
+{
+ return a == b;
+}
+
+/*
+** test_fcmpe_store:
+** fcmpe h0, h1
+** cset w0, mi
+** ret
+*/
+int
+test_fcmpe_store(_Float16 a, _Float16 b)
+{
+ return a < b;
+}
+
+/*
+** test_fcmp_branch:
+** fcmp h0, h1
+** ...
+*/
+_Float16
+test_fcmp_branch(_Float16 a, _Float16 b)
+{
+ if (a == b)
+ return a * b;
+ return a;
+}
+
+/*
+** test_fcmpe_branch:
+** fcmpe h0, h1
+** ...
+*/
+_Float16
+test_fcmpe_branch(_Float16 a, _Float16 b)
+{
+ if (a < b)
+ return a * b;
+ return a;
+}
+
+/* { dg-final { check-function-bodies "**" "" "" } } */ \ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c
new file mode 100644
index 0000000..0ff7cda
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/_Float16_cmp_2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=armv8.2-a+nofp16" } */
+
+#include "_Float16_cmp_1.c"
+
+/* { dg-final { scan-assembler-not {\tfcmp\th[0-9]+} } } */
+/* { dg-final { scan-assembler-not {\tfcmpe\th[0-9]+} } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c
index 0892ce7..a653296 100644
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x2.c
@@ -1,7 +1,3 @@
-/* We haven't implemented these intrinsics for arm yet. */
-/* { dg-skip-if "unimplemented" { arm*-*-* } } */
-/* { dg-options "-O3" } */
-
#include <arm_neon.h>
#include "arm-neon-ref.h"
@@ -39,7 +35,6 @@ VARIANT (int32, 2, _s32) \
VARIANT (int64, 1, _s64) \
VARIANT (poly8, 8, _p8) \
VARIANT (poly16, 4, _p16) \
-VARIANT (float16, 4, _f16) \
VARIANT (float32, 2, _f32) \
VARIANT (uint8, 16, q_u8) \
VARIANT (uint16, 8, q_u16) \
@@ -51,17 +46,30 @@ VARIANT (int32, 4, q_s32) \
VARIANT (int64, 2, q_s64) \
VARIANT (poly8, 16, q_p8) \
VARIANT (poly16, 8, q_p16) \
-VARIANT (float16, 8, q_f16) \
VARIANT (float32, 4, q_f32)
+#if defined (__ARM_FP16_FORMAT_IEEE) \
+ || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \
+ || defined (__aarch64__)
+#define VARIANTS_F16(VARIANT) \
+ VARIANT (float16, 4, _f16) \
+ VARIANT (float16, 8, q_f16)
+#else
+#define VARIANTS_F16(VARIANTS_F16)
+#endif
+
#ifdef __aarch64__
#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT) \
+VARIANT (poly64, 1, _p64) \
+VARIANT (poly64, 2, q_p64) \
VARIANT (mfloat8, 8, _mf8) \
VARIANT (mfloat8, 16, q_mf8) \
VARIANT (float64, 1, _f64) \
VARIANT (float64, 2, q_f64)
#else
-#define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
+#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT)
#endif
/* Tests of vld1_x2 and vld1q_x2. */
diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c
index 9465e4a..832ee75 100644
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c
+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c
@@ -1,7 +1,3 @@
-/* We haven't implemented these intrinsics for arm yet. */
-/* { dg-skip-if "unimplemented" { arm*-*-* } } */
-/* { dg-options "-O3" } */
-
#include <arm_neon.h>
#include "arm-neon-ref.h"
@@ -40,7 +36,6 @@ VARIANT (int32, 2, _s32) \
VARIANT (int64, 1, _s64) \
VARIANT (poly8, 8, _p8) \
VARIANT (poly16, 4, _p16) \
-VARIANT (float16, 4, _f16) \
VARIANT (float32, 2, _f32) \
VARIANT (uint8, 16, q_u8) \
VARIANT (uint16, 8, q_u16) \
@@ -52,17 +47,30 @@ VARIANT (int32, 4, q_s32) \
VARIANT (int64, 2, q_s64) \
VARIANT (poly8, 16, q_p8) \
VARIANT (poly16, 8, q_p16) \
-VARIANT (float16, 8, q_f16) \
VARIANT (float32, 4, q_f32)
+#if defined (__ARM_FP16_FORMAT_IEEE) \
+ || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \
+ || defined (__aarch64__)
+#define VARIANTS_F16(VARIANT) \
+ VARIANT (float16, 4, _f16) \
+ VARIANT (float16, 8, q_f16)
+#else
+#define VARIANTS_F16(VARIANTS_F16)
+#endif
+
#ifdef __aarch64__
#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT) \
+VARIANT (poly64, 1, _p64) \
+VARIANT (poly64, 2, q_p64) \
VARIANT (mfloat8, 8, _mf8) \
VARIANT (mfloat8, 16, q_mf8) \
VARIANT (float64, 1, _f64) \
VARIANT (float64, 2, q_f64)
#else
-#define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
+#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT)
#endif
diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c
index a1461fd..e5f55f0 100644
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c
@@ -1,7 +1,3 @@
-/* We haven't implemented these intrinsics for arm yet. */
-/* { dg-skip-if "unimplemented" { arm*-*-* } } */
-/* { dg-options "-O3" } */
-
#include <stdbool.h>
#include <arm_neon.h>
#include "arm-neon-ref.h"
@@ -42,8 +38,6 @@ VARIANT (int32, 2, _s32) \
VARIANT (int64, 1, _s64) \
VARIANT (poly8, 8, _p8) \
VARIANT (poly16, 4, _p16) \
-VARIANT (poly64, 1, _p64) \
-VARIANT (float16, 4, _f16) \
VARIANT (float32, 2, _f32) \
VARIANT (uint8, 16, q_u8) \
VARIANT (uint16, 8, q_u16) \
@@ -55,18 +49,30 @@ VARIANT (int32, 4, q_s32) \
VARIANT (int64, 2, q_s64) \
VARIANT (poly8, 16, q_p8) \
VARIANT (poly16, 8, q_p16) \
-VARIANT (poly64, 2, q_p64) \
-VARIANT (float16, 8, q_f16) \
VARIANT (float32, 4, q_f32)
+#if defined (__ARM_FP16_FORMAT_IEEE) \
+ || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \
+ || defined (__aarch64__)
+#define VARIANTS_F16(VARIANT) \
+ VARIANT (float16, 4, _f16) \
+ VARIANT (float16, 8, q_f16)
+#else
+#define VARIANTS_F16(VARIANTS_F16)
+#endif
+
#ifdef __aarch64__
#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT) \
+VARIANT (poly64, 1, _p64) \
+VARIANT (poly64, 2, q_p64) \
VARIANT (mfloat8, 8, _mf8) \
VARIANT (mfloat8, 16, q_mf8) \
VARIANT (float64, 1, _f64) \
VARIANT (float64, 2, q_f64)
#else
-#define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
+#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT)
#endif
/* Tests of vld1_x4 and vld1q_x4. */
diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c
index 3cf5eb3..8399290 100644
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c
+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x2.c
@@ -1,7 +1,3 @@
-/* We haven't implemented these intrinsics for arm yet. */
-/* { dg-skip-if "unimplemented" { arm*-*-* } } */
-/* { dg-options "-O3" } */
-
#include <arm_neon.h>
#include "arm-neon-ref.h"
@@ -39,7 +35,6 @@ VARIANT (int32, 2, _s32) \
VARIANT (int64, 1, _s64) \
VARIANT (poly8, 8, _p8) \
VARIANT (poly16, 4, _p16) \
-VARIANT (float16, 4, _f16) \
VARIANT (float32, 2, _f32) \
VARIANT (uint8, 16, q_u8) \
VARIANT (uint16, 8, q_u16) \
@@ -51,17 +46,30 @@ VARIANT (int32, 4, q_s32) \
VARIANT (int64, 2, q_s64) \
VARIANT (poly8, 16, q_p8) \
VARIANT (poly16, 8, q_p16) \
-VARIANT (float16, 8, q_f16) \
VARIANT (float32, 4, q_f32)
+#if defined (__ARM_FP16_FORMAT_IEEE) \
+ || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \
+ || defined (__aarch64__)
+#define VARIANTS_F16(VARIANT) \
+ VARIANT (float16, 4, _f16) \
+ VARIANT (float16, 8, q_f16)
+#else
+#define VARIANTS_F16(VARIANTS_F16)
+#endif
+
#ifdef __aarch64__
#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT) \
+VARIANT (poly64, 1, _p64) \
+VARIANT (poly64, 2, q_p64) \
VARIANT (mfloat8, 8, _mf8) \
VARIANT (mfloat8, 16, q_mf8) \
VARIANT (float64, 1, _f64) \
VARIANT (float64, 2, q_f64)
#else
-#define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
+#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT)
#endif
/* Tests of vst1_x2 and vst1q_x2. */
diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c
index c05f8e7..e7d9e02 100644
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c
+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x3.c
@@ -1,7 +1,3 @@
-/* We haven't implemented these intrinsics for arm yet. */
-/* { dg-skip-if "unimplemented" { arm*-*-* } } */
-/* { dg-options "-O3" } */
-
#include <arm_neon.h>
#include "arm-neon-ref.h"
@@ -40,7 +36,6 @@ VARIANT (int32, 2, _s32) \
VARIANT (int64, 1, _s64) \
VARIANT (poly8, 8, _p8) \
VARIANT (poly16, 4, _p16) \
-VARIANT (float16, 4, _f16) \
VARIANT (float32, 2, _f32) \
VARIANT (uint8, 16, q_u8) \
VARIANT (uint16, 8, q_u16) \
@@ -52,17 +47,30 @@ VARIANT (int32, 4, q_s32) \
VARIANT (int64, 2, q_s64) \
VARIANT (poly8, 16, q_p8) \
VARIANT (poly16, 8, q_p16) \
-VARIANT (float16, 8, q_f16) \
VARIANT (float32, 4, q_f32)
+#if defined (__ARM_FP16_FORMAT_IEEE) \
+ || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \
+ || defined (__aarch64__)
+#define VARIANTS_F16(VARIANT) \
+ VARIANT (float16, 4, _f16) \
+ VARIANT (float16, 8, q_f16)
+#else
+#define VARIANTS_F16(VARIANTS_F16)
+#endif
+
#ifdef __aarch64__
#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT) \
+VARIANT (poly64, 1, _p64) \
+VARIANT (poly64, 2, q_p64) \
VARIANT (mfloat8, 8, _mf8) \
VARIANT (mfloat8, 16, q_mf8) \
VARIANT (float64, 1, _f64) \
VARIANT (float64, 2, q_f64)
#else
-#define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
+#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT)
#endif
/* Tests of vst1_x3 and vst1q_x3. */
diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c
index a9867c3..83b0567 100644
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c
+++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vst1x4.c
@@ -1,7 +1,3 @@
-/* We haven't implemented these intrinsics for arm yet. */
-/* { dg-skip-if "unimplemented" { arm*-*-* } } */
-/* { dg-options "-O3" } */
-
#include <arm_neon.h>
#include "arm-neon-ref.h"
@@ -41,8 +37,6 @@ VARIANT (int32, 2, _s32) \
VARIANT (int64, 1, _s64) \
VARIANT (poly8, 8, _p8) \
VARIANT (poly16, 4, _p16) \
-VARIANT (poly64, 1, _p64) \
-VARIANT (float16, 4, _f16) \
VARIANT (float32, 2, _f32) \
VARIANT (uint8, 16, q_u8) \
VARIANT (uint16, 8, q_u16) \
@@ -54,18 +48,30 @@ VARIANT (int32, 4, q_s32) \
VARIANT (int64, 2, q_s64) \
VARIANT (poly8, 16, q_p8) \
VARIANT (poly16, 8, q_p16) \
-VARIANT (poly64, 2, q_p64) \
-VARIANT (float16, 8, q_f16) \
VARIANT (float32, 4, q_f32)
+#if defined (__ARM_FP16_FORMAT_IEEE) \
+ || defined (__ARM_FP16_FORMAT_ALTERNATIVE) \
+ || defined (__aarch64__)
+#define VARIANTS_F16(VARIANT) \
+ VARIANT (float16, 4, _f16) \
+ VARIANT (float16, 8, q_f16)
+#else
+#define VARIANTS_F16(VARIANTS_F16)
+#endif
+
#ifdef __aarch64__
#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT) \
+VARIANT (poly64, 1, _p64) \
+VARIANT (poly64, 2, q_p64) \
VARIANT (mfloat8, 8, _mf8) \
VARIANT (mfloat8, 16, q_mf8) \
VARIANT (float64, 1, _f64) \
VARIANT (float64, 2, q_f64)
#else
-#define VARIANTS(VARIANT) VARIANTS_1(VARIANT)
+#define VARIANTS(VARIANT) VARIANTS_1(VARIANT) \
+VARIANTS_F16(VARIANT)
#endif
/* Tests of vst1_x4 and vst1q_x4. */
diff --git a/gcc/testsuite/gcc.target/aarch64/bic-1.c b/gcc/testsuite/gcc.target/aarch64/bic-1.c
new file mode 100644
index 0000000..65e1514
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/bic-1.c
@@ -0,0 +1,40 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-final { check-function-bodies "**" "" "" } } */
+
+/* PR rtl-optmization/111949 */
+
+/*
+**func1:
+** bic w([0-9]+), w0, w1
+** and w0, w\1, 1
+** ret
+*/
+
+unsigned func1(unsigned a, bool b)
+{
+ int c = a & b;
+ return (c ^ a)&1;
+}
+
+/*
+**func2:
+** bic w([0-9]+), w1, w0
+** and w0, w\1, 255
+** ret
+*/
+unsigned func2(bool a, bool b)
+{
+ return ~a & b;
+}
+
+/*
+**func3:
+** bic w([0-9]+), w1, w0
+** and w0, w\1, 1
+** ret
+*/
+bool func3(bool a, unsigned char b)
+{
+ return !a & b;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
index dcac6d5..3799fb4 100644
--- a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c
@@ -315,3 +315,18 @@
#ifndef __ARM_FEATURE_FP8DOT2
#error Foo
#endif
+
+#pragma GCC target "arch=armv9.4-a"
+#ifdef __ARM_FEATURE_FAMINMAX
+#error Foo
+#endif
+
+#pragma GCC target "arch=armv9.5-a"
+#ifndef __ARM_FEATURE_FAMINMAX
+#error Foo
+#endif
+
+#pragma GCC target "arch=armv8-a+faminmax"
+#ifndef __ARM_FEATURE_FAMINMAX
+#error Foo
+#endif
diff --git a/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c
new file mode 100644
index 0000000..631d14f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-long.c
@@ -0,0 +1,76 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+/* { dg-skip-if "" { *-*-* } { "-O0" } } */
+
+typedef unsigned int __attribute__ ((mode (DI))) int64_t;
+typedef unsigned int __attribute__ ((mode (SI))) int32_t;
+
+typedef union
+ {
+ int32_t l[8];
+ }
+val;
+
+typedef struct
+ {
+ int32_t l[2];
+ val v;
+ }
+tre;
+
+typedef struct
+ {
+ int32_t l[3];
+ tre t;
+ }
+due;
+
+typedef struct
+ {
+ val v;
+ int64_t q;
+ int32_t l[2];
+ due d;
+ }
+uno;
+
+void
+memcpy_nested_offset_long (uno *u)
+{
+ u->d.t.v = u->v;
+}
+
+/* Expect assembly such as:
+
+ ldq $4,0($16)
+ ldq $3,8($16)
+ ldq $2,16($16)
+ srl $4,32,$7
+ ldq $1,24($16)
+ srl $3,32,$6
+ stl $4,68($16)
+ srl $2,32,$5
+ stl $7,72($16)
+ srl $1,32,$4
+ stl $3,76($16)
+ stl $6,80($16)
+ stl $2,84($16)
+ stl $5,88($16)
+ stl $1,92($16)
+ stl $4,96($16)
+
+ that is with four quadword loads at offsets 0, 8, 16, 24 each and
+ eight longword stores at offsets 68, 72, 76, 80, 84, 88, 92, 96 each. */
+
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,0\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,8\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,16\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,24\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,68\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,72\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,76\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,80\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,84\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,88\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,92\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstl\\s\\\$\[0-9\]+,96\\\(\\\$16\\\)\\s" 1 } } */
diff --git a/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c
new file mode 100644
index 0000000..1d2227e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/alpha/memcpy-nested-offset-quad.c
@@ -0,0 +1,64 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+/* { dg-skip-if "" { *-*-* } { "-O0" } } */
+
+typedef unsigned int __attribute__ ((mode (DI))) int64_t;
+typedef unsigned int __attribute__ ((mode (SI))) int32_t;
+
+typedef union
+ {
+ int32_t l[8];
+ }
+val;
+
+typedef struct
+ {
+ int32_t l[2];
+ val v;
+ }
+tre;
+
+typedef struct
+ {
+ int32_t l[3];
+ tre t;
+ }
+due;
+
+typedef struct
+ {
+ val v;
+ int64_t q;
+ int32_t l[3];
+ due d;
+ }
+uno;
+
+void
+memcpy_nested_offset_quad (uno *u)
+{
+ u->d.t.v = u->v;
+}
+
+/* Expect assembly such as:
+
+ ldq $4,0($16)
+ ldq $3,8($16)
+ ldq $2,16($16)
+ ldq $1,24($16)
+ stq $4,72($16)
+ stq $3,80($16)
+ stq $2,88($16)
+ stq $1,96($16)
+
+ that is with four quadword loads at offsets 0, 8, 16, 24 each
+ and four quadword stores at offsets 72, 80, 88, 96 each. */
+
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,0\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,8\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,16\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sldq\\s\\\$\[0-9\]+,24\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,72\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,80\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,88\\\(\\\$16\\\)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\sstq\\s\\\$\[0-9\]+,96\\\(\\\$16\\\)\\s" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c b/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c
index 5b26081..5eb60d9 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c
+++ b/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c
@@ -1,11 +1,10 @@
/* { dg-do compile } */
/* { dg-options "-mavx512vl -mavx512bw -mavx512dq -O2 -masm=att -mstv -mno-stackrealign" } */
/* { dg-final { scan-assembler-not {not[bwlqd]\]} } } */
-/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$5} 4} } */
-/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$6} 4} } */
+/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$5} 2} } */
+/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$6} 3} } */
/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$[37]} 4} } */
-/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$5} 2} } */
-/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$6} 2} } */
+/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$6} 1} } */
/* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$7} 2} } */
#include<immintrin.h>
@@ -20,20 +19,14 @@
FOO (__m128i,, epi8, __mmask16, 128, 1);
FOO (__m128i,, epi16, __mmask8, 128, 1);
-FOO (__m128i,, epi32, __mmask8, 128, 1);
-FOO (__m128i,, epi64, __mmask8, 128, 1);
FOO (__m256i, 256, epi8, __mmask32, 256, 2);
FOO (__m256i, 256, epi16, __mmask16, 256, 2);
FOO (__m256i, 256, epi32, __mmask8, 256, 2);
-FOO (__m256i, 256, epi64, __mmask8, 256, 2);
FOO (__m512i, 512, epi8, __mmask64, 512, 3);
FOO (__m512i, 512, epi16, __mmask32, 512, 3);
FOO (__m512i, 512, epi32, __mmask16, 512, 3);
FOO (__m512i, 512, epi64, __mmask8, 512, 3);
-FOO (__m128,, ps, __mmask8, 128, 1);
-FOO (__m128d,, pd, __mmask8, 128, 1);
FOO (__m256, 256, ps, __mmask8, 256, 2);
-FOO (__m256d, 256, pd, __mmask8, 256, 2);
FOO (__m512, 512, ps, __mmask16, 512, 3);
FOO (__m512d, 512, pd, __mmask8, 512, 3);
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c b/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c
index ef6a525..37ca646 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512f-vpcmpgtuq-1.c
@@ -12,5 +12,5 @@ void extern
avx512f_test (void)
{
m = _mm512_cmpgt_epu64_mask (x, x);
- m = _mm512_mask_cmpgt_epu64_mask (3, x, x);
+ m = _mm512_mask_cmpgt_epu64_mask (5, x, x);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c
new file mode 100644
index 0000000..a15fae8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-pr103750-1.c
@@ -0,0 +1,79 @@
+/* PR target/103750 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx512vl" } */
+/* { dg-final { scan-assembler-not "and" } } */
+
+#include <immintrin.h>
+extern __m128i* pi128;
+extern __m256i* pi256;
+
+extern __m128* ps128;
+extern __m256* ps256;
+
+extern __m128d* pd128;
+extern __m256d* pd256;
+
+extern char a;
+void
+foo ()
+{
+ __mmask8 mask1 = _mm_cmpeq_epu32_mask (pi128[0], pi128[1]);
+ a = mask1 & 15;
+}
+
+void
+foo1 ()
+{
+ __mmask8 mask1 = _mm_cmpeq_epu64_mask (pi128[0], pi128[1]);
+ a = mask1 & 3;
+}
+
+void
+foo2 ()
+{
+ __mmask8 mask1 = _mm256_cmpeq_epu64_mask (pi256[0], pi256[1]);
+ a = mask1 & 15;
+}
+
+void
+sign_foo ()
+{
+ __mmask8 mask1 = _mm_cmpeq_epi32_mask (pi128[0], pi128[1]);
+ a = mask1 & 15;
+}
+
+void
+sign_foo1 ()
+{
+ __mmask8 mask1 = _mm_cmpeq_epi64_mask (pi128[0], pi128[1]);
+ a = mask1 & 3;
+}
+
+
+void
+sign_foo2 ()
+{
+ __mmask8 mask1 = _mm256_cmpeq_epi64_mask (pi256[0], pi256[1]);
+ a = mask1 & 15;
+}
+
+void
+float_foo ()
+{
+ __mmask8 mask1 = _mm_cmp_ps_mask (ps128[0], ps128[1], 1);
+ a = mask1 & 15;
+}
+
+void
+double_foo ()
+{
+ __mmask8 mask1 = _mm_cmp_pd_mask (pd128[0], pd128[1], 1);
+ a = mask1 & 3;
+}
+
+void
+double_foo2 ()
+{
+ __mmask8 mask1 = _mm256_cmp_pd_mask (pd256[0], pd256[1], 1);
+ a = mask1 & 15;
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c
index 69b200a..a798d06 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpeqq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpeq_epi64_mask (x128, x128);
m = _mm256_cmpeq_epi64_mask (x256, x256);
- m = _mm_mask_cmpeq_epi64_mask (3, x128, x128);
- m = _mm256_mask_cmpeq_epi64_mask (3, x256, x256);
+ m = _mm_mask_cmpeq_epi64_mask (5, x128, x128);
+ m = _mm256_mask_cmpeq_epi64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c
index c925d32..736763f 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpequq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpeq_epu64_mask (x128, x128);
m = _mm256_cmpeq_epu64_mask (x256, x256);
- m = _mm_mask_cmpeq_epu64_mask (3, x128, x128);
- m = _mm256_mask_cmpeq_epu64_mask (3, x256, x256);
+ m = _mm_mask_cmpeq_epu64_mask (5, x128, x128);
+ m = _mm256_mask_cmpeq_epu64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c
index ef40e41..19110a5 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpge_epi64_mask (x128, x128);
m = _mm256_cmpge_epi64_mask (x256, x256);
- m = _mm_mask_cmpge_epi64_mask (3, x128, x128);
- m = _mm256_mask_cmpge_epi64_mask (3, x256, x256);
+ m = _mm_mask_cmpge_epi64_mask (5, x128, x128);
+ m = _mm256_mask_cmpge_epi64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c
index 1f7dd49..d82f8e5 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgeuq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpge_epu64_mask (x128, x128);
m = _mm256_cmpge_epu64_mask (x256, x256);
- m = _mm_mask_cmpge_epu64_mask (3, x128, x128);
- m = _mm256_mask_cmpge_epu64_mask (3, x256, x256);
+ m = _mm_mask_cmpge_epu64_mask (5, x128, x128);
+ m = _mm256_mask_cmpge_epu64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c
index 26cac3a..79f9430 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpgt_epi64_mask (x128, x128);
m = _mm256_cmpgt_epi64_mask (x256, x256);
- m = _mm_mask_cmpgt_epi64_mask (3, x128, x128);
- m = _mm256_mask_cmpgt_epi64_mask (3, x256, x256);
+ m = _mm_mask_cmpgt_epi64_mask (5, x128, x128);
+ m = _mm256_mask_cmpgt_epi64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c
index 10717cd..bef015f 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpgtuq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpgt_epu64_mask (x128, x128);
m = _mm256_cmpgt_epu64_mask (x256, x256);
- m = _mm_mask_cmpgt_epu64_mask (3, x128, x128);
- m = _mm256_mask_cmpgt_epu64_mask (3, x256, x256);
+ m = _mm_mask_cmpgt_epu64_mask (5, x128, x128);
+ m = _mm256_mask_cmpgt_epu64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c
index 110ff70..9974aa5 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmple_epi64_mask (x128, x128);
m = _mm256_cmple_epi64_mask (x256, x256);
- m = _mm_mask_cmple_epi64_mask (3, x128, x128);
- m = _mm256_mask_cmple_epi64_mask (3, x256, x256);
+ m = _mm_mask_cmple_epi64_mask (5, x128, x128);
+ m = _mm256_mask_cmple_epi64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c
index e3faf41..0a5a513 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpleuq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmple_epu64_mask (x128, x128);
m = _mm256_cmple_epu64_mask (x256, x256);
- m = _mm_mask_cmple_epu64_mask (3, x128, x128);
- m = _mm256_mask_cmple_epu64_mask (3, x256, x256);
+ m = _mm_mask_cmple_epu64_mask (5, x128, x128);
+ m = _mm256_mask_cmple_epu64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c
index 1b8f7f1..5f40c79 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmplt_epi64_mask (x128, x128);
m = _mm256_cmplt_epi64_mask (x256, x256);
- m = _mm_mask_cmplt_epi64_mask (3, x128, x128);
- m = _mm256_mask_cmplt_epi64_mask (3, x256, x256);
+ m = _mm_mask_cmplt_epi64_mask (5, x128, x128);
+ m = _mm256_mask_cmplt_epi64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c
index 5c2f025..afda5e7 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpltuq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmplt_epu64_mask (x128, x128);
m = _mm256_cmplt_epu64_mask (x256, x256);
- m = _mm_mask_cmplt_epu64_mask (3, x128, x128);
- m = _mm256_mask_cmplt_epu64_mask (3, x256, x256);
+ m = _mm_mask_cmplt_epu64_mask (5, x128, x128);
+ m = _mm256_mask_cmplt_epu64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c
index f48de10..5ef2548 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpneqq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpneq_epi64_mask (x128, x128);
m = _mm256_cmpneq_epi64_mask (x256, x256);
- m = _mm_mask_cmpneq_epi64_mask (3, x128, x128);
- m = _mm256_mask_cmpneq_epi64_mask (3, x256, x256);
+ m = _mm_mask_cmpneq_epi64_mask (5, x128, x128);
+ m = _mm256_mask_cmpneq_epi64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c
index 726a887..4a9aacf 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-vpcmpnequq-1.c
@@ -16,6 +16,6 @@ avx512vl_test (void)
{
m = _mm_cmpneq_epu64_mask (x128, x128);
m = _mm256_cmpneq_epu64_mask (x256, x256);
- m = _mm_mask_cmpneq_epu64_mask (3, x128, x128);
- m = _mm256_mask_cmpneq_epu64_mask (3, x256, x256);
+ m = _mm_mask_cmpneq_epu64_mask (5, x128, x128);
+ m = _mm256_mask_cmpneq_epu64_mask (5, x256, x256);
}
diff --git a/gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c b/gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c
new file mode 100644
index 0000000..042eb7d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/blendv-to-maxmin.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-march=x86-64-v3 -O2 -mfpmath=sse" } */
+/* { dg-final { scan-assembler-times "vmaxsd" 1 } } */
+
+double
+foo (double a)
+{
+ if (a > 0.0)
+ return a;
+ return 0.0;
+}
+
diff --git a/gcc/testsuite/gcc.target/i386/blendv-to-pand.c b/gcc/testsuite/gcc.target/i386/blendv-to-pand.c
new file mode 100644
index 0000000..2896a2b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/blendv-to-pand.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=x86-64-v3 -mfpmath=sse" } */
+/* { dg-final { scan-assembler-not "vblendv" } } */
+
+void
+foo (float* a, float* b, float* c, float* __restrict d, int n)
+{
+ for (int i = 0; i != n; i++)
+ {
+ c[i] *= 2.0f;
+ if (a[i] > b[i])
+ d[i] = 0.0f;
+ else
+ d[i] = c[i];
+ }
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr119919.c b/gcc/testsuite/gcc.target/i386/pr119919.c
new file mode 100644
index 0000000..ed64656
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr119919.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -msse2 -fdump-tree-vect-details" } */
+int a[9*9];
+bool b[9];
+void test()
+{
+ for (int i = 0; i < 9; i++)
+ {
+ b[i] = a[i*9] != 0;
+ }
+}
+
+/* { dg-final { scan-tree-dump "loop vectorized using 8 byte vectors" "vect" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr89618-2.c b/gcc/testsuite/gcc.target/i386/pr89618-2.c
index c414053..11d658f 100644
--- a/gcc/testsuite/gcc.target/i386/pr89618-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr89618-2.c
@@ -19,5 +19,9 @@ void foo (int n, int *off, double *a)
}
/* Make sure the cost model selects SSE vectors rather than AVX to avoid
- too many scalar ops for the address computes in the loop. */
-/* { dg-final { scan-tree-dump "loop vectorized using 16 byte vectors" "vect" { target { ! ia32 } } } } */
+ too many scalar ops for the address computes in the loop.
+
+ Since open-coded scatters are costed wrong, we no longer vectorize after fixing
+ COND_EXPR costs. See PR119902. */
+/* { dg-final { scan-tree-dump "loop vectorized using 16 byte vectors" "vect" { target { ! ia32 } xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-not "loop vectorized using 32 byte vectors" "vect" { target { ! ia32 } } } } */
diff --git a/gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c b/gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c
new file mode 100644
index 0000000..ad9e07b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/recip-vec-divf-fma.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-Ofast -mfma -mavx2" } */
+/* { dg-final { scan-assembler-times {(?n)vfn?m(add|sub)[1-3]*ps} 2 } } */
+
+typedef float v4sf __attribute__((vector_size(16)));
+/* (a - (rcp(b) * a * b)) * rcp(b) + rcp(b) * a */
+
+v4sf
+foo (v4sf a, v4sf b)
+{
+ return a / b;
+}
diff --git a/gcc/testsuite/gcc.target/mips/clear-cache-1.c b/gcc/testsuite/gcc.target/mips/clear-cache-1.c
index f1554f5..cd11c66 100644
--- a/gcc/testsuite/gcc.target/mips/clear-cache-1.c
+++ b/gcc/testsuite/gcc.target/mips/clear-cache-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-msynci isa_rev>=2" } */
/* { dg-final { scan-assembler "\tsynci\t" } } */
-/* { dg-final { scan-assembler "\tjr.hb\t" } } */
+/* { dg-final { scan-assembler "\tjrc?.hb\t" } } */
/* { dg-final { scan-assembler-not "_flush_cache|mips_sync_icache|_cacheflush" } } */
NOMIPS16 void f()
diff --git a/gcc/testsuite/gcc.target/mips/memcpy-2.c b/gcc/testsuite/gcc.target/mips/memcpy-2.c
new file mode 100644
index 0000000..df0cd18
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/memcpy-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "isa_rev<=5 -fdump-rtl-expand" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-Os" } { "" } } */
+
+__attribute__((nomips16))
+void
+f1 (char *p)
+{
+ __builtin_memcpy (p, "12345", 5);
+}
+
+/* { dg-final { scan-rtl-dump "mem/u.*mem/u" "expand" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/power11-3.c b/gcc/testsuite/gcc.target/powerpc/power11-3.c
index fa1aedd..56bf881 100644
--- a/gcc/testsuite/gcc.target/powerpc/power11-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/power11-3.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-mdejagnu-cpu=power8 -O2" } */
+/* { dg-require-ifunc "" } */
/* Check if we can set the power11 target via a target_clones attribute. */
diff --git a/gcc/testsuite/gcc.target/riscv/arch-25.c b/gcc/testsuite/gcc.target/riscv/arch-25.c
index 3be4ade..9201883 100644
--- a/gcc/testsuite/gcc.target/riscv/arch-25.c
+++ b/gcc/testsuite/gcc.target/riscv/arch-25.c
@@ -2,4 +2,4 @@
/* { dg-options "-march=rv64i_zcf -mabi=lp64" } */
int foo() {}
/* { dg-error "'-march=rv64i_zcf': zcf extension supports in rv32 only" "" { target *-*-* } 0 } */
-/* { dg-error "'-march=rv64i_zca_zcf': zcf extension supports in rv32 only" "" { target *-*-* } 0 } */
+/* { dg-error "'-march=rv64ic_zca_zcf': zcf extension supports in rv32 only" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-1.c b/gcc/testsuite/gcc.target/riscv/attribute-c-1.c
new file mode 100644
index 0000000..5627e16
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-1.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv32i_zca -mabi=ilp32" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_c2p0_zca1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-2.c b/gcc/testsuite/gcc.target/riscv/attribute-c-2.c
new file mode 100644
index 0000000..4c7d5f9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-2.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv32if_zca -mabi=ilp32" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_f2p2_zicsr2p0_zca1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-3.c b/gcc/testsuite/gcc.target/riscv/attribute-c-3.c
new file mode 100644
index 0000000..7ff68f7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-3.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv32if_zca_zcf -mabi=ilp32" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_f2p2_c2p0_zicsr2p0_zca1p0_zcf1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-4.c b/gcc/testsuite/gcc.target/riscv/attribute-c-4.c
new file mode 100644
index 0000000..ef59b65
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-4.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv32ifd_zca_zcf -mabi=ilp32" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_f2p2_d2p2_zicsr2p0_zca1p0_zcf1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-5.c b/gcc/testsuite/gcc.target/riscv/attribute-c-5.c
new file mode 100644
index 0000000..14e9551
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-5.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv32ifd_zca_zcf_zcd -mabi=ilp32" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_f2p2_d2p2_c2p0_zicsr2p0_zca1p0_zcd1p0_zcf1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-6.c b/gcc/testsuite/gcc.target/riscv/attribute-c-6.c
new file mode 100644
index 0000000..30cda55
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-6.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv64i_zca -mabi=lp64" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_c2p0_zca1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-7.c b/gcc/testsuite/gcc.target/riscv/attribute-c-7.c
new file mode 100644
index 0000000..b06388b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-7.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv64ifd_zca -mabi=lp64" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_f2p2_d2p2_zicsr2p0_zca1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-c-8.c b/gcc/testsuite/gcc.target/riscv/attribute-c-8.c
new file mode 100644
index 0000000..fa76050
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/attribute-c-8.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-mriscv-attribute -march=rv64ifd_zca_zcd -mabi=lp64" } */
+
+void foo(){}
+
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_f2p2_d2p2_c2p0_zicsr2p0_zca1p0_zcd1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-zce-1.c b/gcc/testsuite/gcc.target/riscv/attribute-zce-1.c
index e477414..fc86dbe 100644
--- a/gcc/testsuite/gcc.target/riscv/attribute-zce-1.c
+++ b/gcc/testsuite/gcc.target/riscv/attribute-zce-1.c
@@ -3,4 +3,4 @@
void foo(){}
-/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_c2p0_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-zce-2.c b/gcc/testsuite/gcc.target/riscv/attribute-zce-2.c
index 7008eb5..4504158 100644
--- a/gcc/testsuite/gcc.target/riscv/attribute-zce-2.c
+++ b/gcc/testsuite/gcc.target/riscv/attribute-zce-2.c
@@ -3,4 +3,4 @@
void foo(){}
-/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_f2p2_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcf1p0_zcmp1p0_zcmt1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p1_f2p2_c2p0_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcf1p0_zcmp1p0_zcmt1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-zce-3.c b/gcc/testsuite/gcc.target/riscv/attribute-zce-3.c
index 89ebaaf..4ffc051 100644
--- a/gcc/testsuite/gcc.target/riscv/attribute-zce-3.c
+++ b/gcc/testsuite/gcc.target/riscv/attribute-zce-3.c
@@ -3,4 +3,4 @@
void foo(){}
-/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_c2p0_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/attribute-zce-4.c b/gcc/testsuite/gcc.target/riscv/attribute-zce-4.c
index cacbcaa..7ee8de2 100644
--- a/gcc/testsuite/gcc.target/riscv/attribute-zce-4.c
+++ b/gcc/testsuite/gcc.target/riscv/attribute-zce-4.c
@@ -3,4 +3,4 @@
void foo(){}
-/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_f2p2_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0\"" } } */
+/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_f2p2_c2p0_zicsr2p0_zca1p0_zcb1p0_zce1p0_zcmp1p0_zcmt1p0\"" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/bext-ext-2.c b/gcc/testsuite/gcc.target/riscv/bext-ext-2.c
new file mode 100644
index 0000000..aa170d0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/bext-ext-2.c
@@ -0,0 +1,74 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcb -mabi=lp64" } */
+/* { dg-skip-if "" { *-*-* } { "-O0" } } */
+
+struct obstack;
+struct bitmap_head_def;
+typedef struct bitmap_head_def *bitmap;
+struct obstack
+{
+ long chunk_size;
+ struct _obstack_chunk *chunk;
+ char *object_base;
+ char *next_free;
+ char *chunk_limit;
+ long int temp;
+ int alignment_mask;
+
+
+
+ struct _obstack_chunk *(*chunkfun) (void *, long);
+ void (*freefun) (void *, struct _obstack_chunk *);
+ void *extra_arg;
+ unsigned use_extra_arg:1;
+ unsigned maybe_empty_object:1;
+
+
+
+ unsigned alloc_failed:1;
+
+
+};
+
+typedef unsigned long BITMAP_WORD;
+typedef struct bitmap_obstack {
+ struct bitmap_element_def *elements;
+ struct bitmap_head_def *heads;
+ struct obstack obstack;
+} bitmap_obstack;
+typedef struct bitmap_element_def {
+ struct bitmap_element_def *next;
+ struct bitmap_element_def *prev;
+ unsigned int indx;
+ BITMAP_WORD bits[((128 + (8
+ * 8 * 1u) - 1) / (8
+ * 8 * 1u))];
+} bitmap_element;
+bitmap_element *bitmap_find_bit (bitmap, unsigned int);
+
+
+int
+bitmap_bit_p (bitmap head, int bit)
+{
+ bitmap_element *ptr;
+ unsigned bit_num;
+ unsigned word_num;
+
+ ptr = bitmap_find_bit (head, bit);
+ if (ptr == 0)
+ return 0;
+
+ bit_num = bit % (8
+ * 8 * 1u);
+ word_num = bit / (8
+ * 8 * 1u) % ((128 + (8
+ * 8 * 1u) - 1) / (8
+ * 8 * 1u));
+
+ return (ptr->bits[word_num] >> bit_num) & 1;
+}
+
+/* { dg-final { scan-assembler-times "bext\t" 1 } } */
+/* { dg-final { scan-assembler-not "slr\t"} } */
+/* { dg-final { scan-assembler-not "andi\t"} } */
+
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
new file mode 100644
index 0000000..cb28baf
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908.c
@@ -0,0 +1,48 @@
+/* { dg-do compile } */
+/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+/* { dg-options "-mcpu=xt-c908" { target { rv64 } } } */
+/* XuanTie C908 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
+zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_sstc_svinval_svnapot_svpbmt_xtheadba_
+xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_
+xtheadmemidx_xtheadmempair_xtheadsync */
+
+#if !((__riscv_xlen == 64) \
+ && !defined(__riscv_32e) \
+ && defined(__riscv_mul) \
+ && defined(__riscv_atomic) \
+ && (__riscv_flen == 64) \
+ && defined(__riscv_compressed) \
+ && defined(__riscv_zicbom) \
+ && defined(__riscv_zicbop) \
+ && defined(__riscv_zicboz) \
+ && defined(__riscv_zicntr) \
+ && defined(__riscv_zicsr) \
+ && defined(__riscv_zifencei) \
+ && defined(__riscv_zihintpause) \
+ && defined(__riscv_zihpm) \
+ && defined(__riscv_zfh) \
+ && defined(__riscv_zba) \
+ && defined(__riscv_zbb) \
+ && defined(__riscv_zbc) \
+ && defined(__riscv_zbs) \
+ && defined(__riscv_sstc) \
+ && defined(__riscv_svinval) \
+ && defined(__riscv_svnapot) \
+ && defined(__riscv_svpbmt) \
+ && defined(__riscv_xtheadba) \
+ && defined(__riscv_xtheadbb) \
+ && defined(__riscv_xtheadbs) \
+ && defined(__riscv_xtheadcmo) \
+ && defined(__riscv_xtheadcondmov) \
+ && defined(__riscv_xtheadfmemidx) \
+ && defined(__riscv_xtheadmac) \
+ && defined(__riscv_xtheadmemidx) \
+ && defined(__riscv_xtheadmempair) \
+ && defined(__riscv_xtheadsync))
+#error "unexpected arch"
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
new file mode 100644
index 0000000..1b1ee18
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c908v.c
@@ -0,0 +1,50 @@
+/* { dg-do compile } */
+/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+/* { dg-options "-mcpu=xt-c908v" { target { rv64 } } } */
+/* XuanTie C908v => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicsr_zifencei_
+zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_sstc_svinval_svnapot_svpbmt_xtheadba_
+xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_
+xtheadmemidx_xtheadmempair_xtheadsync_xtheadvdot */
+
+#if !((__riscv_xlen == 64) \
+ && !defined(__riscv_32e) \
+ && defined(__riscv_mul) \
+ && defined(__riscv_atomic) \
+ && (__riscv_flen == 64) \
+ && defined(__riscv_compressed) \
+ && defined(__riscv_v) \
+ && defined(__riscv_zicbom) \
+ && defined(__riscv_zicbop) \
+ && defined(__riscv_zicboz) \
+ && defined(__riscv_zicntr) \
+ && defined(__riscv_zicsr) \
+ && defined(__riscv_zifencei) \
+ && defined(__riscv_zihintpause) \
+ && defined(__riscv_zihpm) \
+ && defined(__riscv_zfh) \
+ && defined(__riscv_zba) \
+ && defined(__riscv_zbb) \
+ && defined(__riscv_zbc) \
+ && defined(__riscv_zbs) \
+ && defined(__riscv_sstc) \
+ && defined(__riscv_svinval) \
+ && defined(__riscv_svnapot) \
+ && defined(__riscv_svpbmt) \
+ && defined(__riscv_xtheadba) \
+ && defined(__riscv_xtheadbb) \
+ && defined(__riscv_xtheadbs) \
+ && defined(__riscv_xtheadcmo) \
+ && defined(__riscv_xtheadcondmov) \
+ && defined(__riscv_xtheadfmemidx) \
+ && defined(__riscv_xtheadmac) \
+ && defined(__riscv_xtheadmemidx) \
+ && defined(__riscv_xtheadmempair) \
+ && defined(__riscv_xtheadsync) \
+ && defined (__riscv__xtheadvdot))
+#error "unexpected arch"
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
new file mode 100644
index 0000000..1e27665
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+/* { dg-options "-mcpu=xt-c910" { target { rv64 } } } */
+/* XuanTie C910 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_xtheadba_
+xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_
+xtheadmemidx_xtheadmempair_xtheadsync */
+
+#if !((__riscv_xlen == 64) \
+ && !defined(__riscv_32e) \
+ && defined(__riscv_mul) \
+ && defined(__riscv_atomic) \
+ && (__riscv_flen == 64) \
+ && defined(__riscv_compressed) \
+ && defined(__riscv_zicntr) \
+ && defined(__riscv_zicsr) \
+ && defined(__riscv_zifencei) \
+ && defined(__riscv_zihpm) \
+ && defined(__riscv_zfh) \
+ && defined(__riscv_xtheadba) \
+ && defined(__riscv_xtheadbb) \
+ && defined(__riscv_xtheadbs) \
+ && defined(__riscv_xtheadcmo) \
+ && defined(__riscv_xtheadcondmov) \
+ && defined(__riscv_xtheadfmemidx) \
+ && defined(__riscv_xtheadmac) \
+ && defined(__riscv_xtheadmemidx) \
+ && defined(__riscv_xtheadmempair) \
+ && defined(__riscv_xtheadsync))
+#error "unexpected arch"
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
new file mode 100644
index 0000000..6a54f09
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c910v2.c
@@ -0,0 +1,51 @@
+/* { dg-do compile } */
+/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+/* { dg-options "-mcpu=xt-c910v2" { target { rv64 } } } */
+/* XuanTie C910v2 => rv64imafdc_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_
+zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_
+zbb_zbc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_
+xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync */
+
+#if !((__riscv_xlen == 64) \
+ && !defined(__riscv_32e) \
+ && defined(__riscv_mul) \
+ && defined(__riscv_atomic) \
+ && (__riscv_flen == 64) \
+ && defined(__riscv_compressed) \
+ && defined(__riscv_zicbom) \
+ && defined(__riscv_zicbop) \
+ && defined(__riscv_zicboz) \
+ && defined(__riscv_zicntr) \
+ && defined(__riscv_zicond) \
+ && defined(__riscv_zicsr) \
+ && defined(__riscv_zifencei ) \
+ && defined(__riscv_zihintntl) \
+ && defined(__riscv_zihintpause) \
+ && defined(__riscv_zihpm) \
+ && defined(__riscv_zawrs) \
+ && defined(__riscv_zfa) \
+ && defined(__riscv_zfbfmin) \
+ && defined(__riscv_zfh) \
+ && defined(__riscv_zca) \
+ && defined(__riscv_zcb) \
+ && defined(__riscv_zcd) \
+ && defined(__riscv_zba) \
+ && defined(__riscv_zbb) \
+ && defined(__riscv_zbc) \
+ && defined(__riscv_xtheadba) \
+ && defined(__riscv_xtheadbb) \
+ && defined(__riscv_xtheadbs) \
+ && defined(__riscv_xtheadcmo) \
+ && defined(__riscv_xtheadcondmov) \
+ && defined(__riscv_xtheadfmemidx) \
+ && defined(__riscv_xtheadmac) \
+ && defined(__riscv_xtheadmemidx) \
+ && defined(__riscv_xtheadmempair) \
+ && defined(__riscv_xtheadsync))
+#error "unexpected arch"
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
new file mode 100644
index 0000000..6bcd687
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920.c
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+/* { dg-options "-mcpu=xt-c920" { target { rv64 } } } */
+/* XuanTie c920 => rv64imafdc_zicntr_zicsr_zifencei_zihpm_zfh_"xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadmac_xtheadmemidx_xtheadmempair_xtheadsync_xtheadvector */
+
+#if !((__riscv_xlen == 64) \
+ && !defined(__riscv_32e) \
+ && defined(__riscv_mul) \
+ && defined(__riscv_atomic) \
+ && (__riscv_flen == 64) \
+ && defined(__riscv_compressed) \
+ && defined(__riscv_zicntr) \
+ && defined(__riscv_zicsr) \
+ && defined(__riscv_zifencei) \
+ && defined(__riscv_zihpm) \
+ && defined(__riscv_zfh) \
+ && defined(__riscv_xtheadba) \
+ && defined(__riscv_xtheadbb) \
+ && defined(__riscv_xtheadbs) \
+ && defined(__riscv_xtheadcmo) \
+ && defined(__riscv_xtheadcondmov) \
+ && defined(__riscv_xtheadfmemidx) \
+ && defined(__riscv_xtheadmac) \
+ && defined(__riscv_xtheadmemidx) \
+ && defined(__riscv_xtheadmempair) \
+ && defined(__riscv_xtheadsync) \
+ && defined(__riscv_xtheadvector))
+#error "unexpected arch"
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
new file mode 100644
index 0000000..36a6267
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/mcpu-xt-c920v2.c
@@ -0,0 +1,56 @@
+/* { dg-do compile } */
+/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */
+/* { dg-options "-mcpu=xt-c920v2" { target { rv64 } } } */
+/* XuanTie C920v2 => rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei _zihintntl_zihintpause_zihpm_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zba_zbb_zbc_zbs_zvfbfmin_zvfbfwma_zvfh_sscofpmf_sstc_svinval_svnapot_svpbmt_xtheadba_xtheadbb_xtheadbs_xtheadcmo_xtheadcondmov_xtheadfmemidx_xtheadsync_xtheadvdot */
+
+#if !((__riscv_xlen == 64) \
+ && !defined(__riscv_32e) \
+ && defined(__riscv_mul) \
+ && defined(__riscv_atomic) \
+ && (__riscv_flen == 64) \
+ && defined(__riscv_compressed) \
+ && defined(__riscv_v) \
+ && defined(__riscv_zicbom) \
+ && defined(__riscv_zicbop) \
+ && defined(__riscv_zicboz) \
+ && defined(__riscv_zicntr) \
+ && defined(__riscv_zicond) \
+ && defined(__riscv_zicsr) \
+ && defined(__riscv_zifencei ) \
+ && defined(__riscv_zihintntl) \
+ && defined(__riscv_zihintpause) \
+ && defined(__riscv_zihpm) \
+ && defined(__riscv_zawrs) \
+ && defined(__riscv_zfa) \
+ && defined(__riscv_zfbfmin) \
+ && defined(__riscv_zfh) \
+ && defined(__riscv_zca) \
+ && defined(__riscv_zcb) \
+ && defined(__riscv_zcd) \
+ && defined(__riscv_zba) \
+ && defined(__riscv_zbb) \
+ && defined(__riscv_zbc) \
+ && defined(__riscv_zbs) \
+ && defined(__riscv_zvfbfmin) \
+ && defined(__riscv_zvfbfwma) \
+ && defined(__riscv_zvfh) \
+ && defined(__riscv_sscofpmf) \
+ && defined(__riscv_sstc) \
+ && defined(__riscv_svinval) \
+ && defined(__riscv_svnapot) \
+ && defined(__riscv_svpbmt) \
+ && defined(__riscv_xtheadba) \
+ && defined(__riscv_xtheadbb) \
+ && defined(__riscv_xtheadbs) \
+ && defined(__riscv_xtheadcmo) \
+ && defined(__riscv_xtheadcondmov) \
+ && defined(__riscv_xtheadfmemidx) \
+ && defined(__riscv_xtheadsync) \
+ && defined(__riscv_xtheadvdot))
+#error "unexpected arch"
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/riscv/pr108016.c b/gcc/testsuite/gcc.target/riscv/pr108016.c
new file mode 100644
index 0000000..b60df42
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr108016.c
@@ -0,0 +1,33 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gc -mabi=lp64" } */
+/* { dg-skip-if "" { *-*-* } { "-O0" } } */
+
+unsigned int addu (unsigned int a, unsigned int b)
+{
+ unsigned int out;
+ unsigned int overflow = __builtin_add_overflow (a, b, &out);
+ return overflow & out;
+}
+
+int addi (int a, int b)
+{
+ int out;
+ int overflow = __builtin_add_overflow (a, b, &out);
+ return overflow & out;
+}
+
+unsigned int subu (unsigned int a, unsigned int b)
+{
+ unsigned int out;
+ unsigned int overflow = __builtin_sub_overflow (a, b, &out);
+ return overflow & out;
+}
+
+int subi (int a, int b)
+{
+ int out;
+ int overflow = __builtin_sub_overflow (a, b, &out);
+ return overflow & out;
+}
+
+/* { dg-final { scan-assembler-not "sext\.w\t" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr118410-1.c b/gcc/testsuite/gcc.target/riscv/pr118410-1.c
new file mode 100644
index 0000000..4a8b847
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr118410-1.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
+/* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64} } } */
+/* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32} } } */
+
+long orlow(long x) { return x | ((1L << 24) - 1); }
+
+/* { dg-final { scan-assembler-times "orn\t" 1 } } */
+/* { dg-final { scan-assembler-not "addi\t" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/pr118410-2.c b/gcc/testsuite/gcc.target/riscv/pr118410-2.c
new file mode 100644
index 0000000..b63a1d9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr118410-2.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" } } */
+/* { dg-options "-march=rv64gcb -mabi=lp64d" { target { rv64} } } */
+/* { dg-options "-march=rv32gcb -mabi=ilp32" { target { rv32} } } */
+
+long xorlow(long x) { return x ^ ((1L << 24) - 1); }
+
+/* { dg-final { scan-assembler-times "xnor\t" 1 } } */
+/* { dg-final { scan-assembler-not "addi\t" } } */
diff --git a/gcc/testsuite/gcc.target/s390/pr119873-1.c b/gcc/testsuite/gcc.target/s390/pr119873-1.c
new file mode 100644
index 0000000..7a9a988
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr119873-1.c
@@ -0,0 +1,11 @@
+/* PR target/119873 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+const char *foo (void *, void *, void *, void *, unsigned long, unsigned long);
+
+const char *
+bar (void *a, void *b, void *c, void *d, unsigned long e, unsigned long f)
+{
+ [[gnu::musttail]] return foo (a, b, c, d, e, f);
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr119873-2.c b/gcc/testsuite/gcc.target/s390/pr119873-2.c
new file mode 100644
index 0000000..f275253
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr119873-2.c
@@ -0,0 +1,17 @@
+/* PR target/119873 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+const char *foo (void *, void *, void *, void *, unsigned long, unsigned long);
+
+const char *
+bar (void *a, void *b, void *c, void *d, unsigned long e, unsigned long f)
+{
+ [[gnu::musttail]] return foo (a, b, c, d, e + 1, f); /* { dg-error "cannot tail-call: target is not able to optimize the call into a sibling call" } */
+}
+
+const char *
+baz (void *a, void *b, void *c, void *d, unsigned long e, unsigned long f)
+{
+ [[gnu::musttail]] return foo (a, b, c, d, f, e); /* { dg-error "cannot tail-call: target is not able to optimize the call into a sibling call" } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr119873-3.c b/gcc/testsuite/gcc.target/s390/pr119873-3.c
new file mode 100644
index 0000000..048fcaa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr119873-3.c
@@ -0,0 +1,27 @@
+/* PR target/119873 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int foo (int, int, int, long long, int);
+
+int
+bar (int u, int v, int w, long long x, int y)
+{
+ [[gnu::musttail]] return foo (u, v, w, x, y);
+}
+
+extern int baz (int, int, int, int, int);
+
+int
+qux (int u, int v, int w, int x, int y)
+{
+ [[gnu::musttail]] return baz (u, v, w, x, y);
+}
+
+extern int corge (int, int, int, int, unsigned short);
+
+int
+garply (int u, int v, int w, int x, unsigned short y)
+{
+ [[gnu::musttail]] return corge (u, v, w, x, y);
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr119873-4.c b/gcc/testsuite/gcc.target/s390/pr119873-4.c
new file mode 100644
index 0000000..384170c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr119873-4.c
@@ -0,0 +1,27 @@
+/* PR target/119873 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int foo (int, int, int, long long, int);
+
+int
+bar (int u, int v, int w, long long x, int y)
+{
+ [[gnu::musttail]] return foo (u, v, w, x + 1, y - 1); /* { dg-error "cannot tail-call: target is not able to optimize the call into a sibling call" } */
+}
+
+extern int baz (int, int, int, int, int);
+
+int
+qux (int u, int v, int w, int x, int y)
+{
+ [[gnu::musttail]] return baz (u, v, w, x, y + 1); /* { dg-error "cannot tail-call: target is not able to optimize the call into a sibling call" } */
+}
+
+extern int corge (int, int, int, int, unsigned short);
+
+int
+garply (int u, int v, int w, int x, unsigned short y)
+{
+ [[gnu::musttail]] return corge (u, v, w, x, y + 1); /* { dg-error "cannot tail-call: target is not able to optimize the call into a sibling call" } */
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr119873-5.c b/gcc/testsuite/gcc.target/s390/pr119873-5.c
new file mode 100644
index 0000000..b5a7950
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr119873-5.c
@@ -0,0 +1,11 @@
+/* PR target/119873 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -m31 -mzarch" } */
+
+extern void foo (int x, int y, int z, long long w, int v);
+
+void
+bar (int x, int y, int z, long long w, int v)
+{
+ [[gnu::musttail]] return foo (x, y, z, w, v);
+}
diff --git a/gcc/testsuite/gcc.target/sh/pr111814.c b/gcc/testsuite/gcc.target/sh/pr111814.c
new file mode 100644
index 0000000..a88e5d7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/pr111814.c
@@ -0,0 +1,7 @@
+/* Verify that __builtin_nan("") produces a constant matches
+ architecture specification. */
+/* { dg-do compile } */
+
+double d = __builtin_nan ("");
+
+/* { dg-final { scan-assembler "\t.long\t-1\n\t.long\t2146959359\n" } } */
diff --git a/gcc/testsuite/gdc.dg/gcov.exp b/gcc/testsuite/gdc.dg/gcov.exp
index a65d000..3f0234e 100644
--- a/gcc/testsuite/gdc.dg/gcov.exp
+++ b/gcc/testsuite/gdc.dg/gcov.exp
@@ -21,12 +21,19 @@ load_lib gdc-dg.exp
load_lib gcov.exp
global GDC_UNDER_TEST
+global GCOV_UNDER_TEST
-# For now find gcov in the same directory as $GDC_UNDER_TEST.
-if { ![is_remote host] && [string match "*/*" [lindex $GDC_UNDER_TEST 0]] } {
- set GCOV [file dirname [lindex $GDC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov]
+# For now find gcov in the same directory as $GDC_UNDER_TEST, unless
+# GCOV_UNDER_TEST is defined.
+
+if ![info exists GCOV_UNDER_TEST] {
+ if { ![is_remote host] && [string match "*/*" [lindex $GDC_UNDER_TEST 0]] } {
+ set GCOV [file dirname [lindex $GDC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov]
+ } else {
+ set GCOV [gcc-transform-out-of-tree gcov]
+ }
} else {
- set GCOV [gcc-transform-out-of-tree gcov]
+ set GCOV $GCOV_UNDER_TEST
}
# Initialize harness.
diff --git a/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08 b/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08
index 29c2b3a..7fd2085 100644
--- a/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08
+++ b/gcc/testsuite/gfortran.dg/coarray/coindexed_3.f08
@@ -9,6 +9,7 @@ program pr98903
integer :: a[*]
type(team_type) :: team
+ team = get_team()
me = this_image()
n = num_images()
a = 42
diff --git a/gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90 b/gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90
new file mode 100644
index 0000000..c35ec10
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/coindexed_5.f90
@@ -0,0 +1,80 @@
+!{ dg-do run }
+
+! Check coindexes with team= or team_number= are working.
+
+program coindexed_5
+ use, intrinsic :: iso_fortran_env
+
+ type(team_type) :: parentteam, team, formed_team
+ integer :: t_num= 42, stat = 42, lhs
+ integer(kind=2) :: st_num=42
+ integer :: caf(2)[*]
+
+ parentteam = get_team()
+
+ caf = [23, 32]
+ form team(t_num, team, new_index=1)
+ form team(t_num, formed_team)
+
+ change team(team, cell[*] => caf(2))
+ ! for get_from_remote
+ ! Checking against caf_single is very limitted.
+ if (cell[1, team_number=t_num] /= 32) stop 1
+ if (cell[1, team_number=st_num] /= 32) stop 2
+ if (cell[1, team=parentteam] /= 32) stop 3
+
+ ! Check that team_number is validated
+ lhs = cell[1, team_number=5, stat=stat]
+ if (stat /= 1) stop 4
+
+ ! Check that only access to active teams is valid
+ stat = 42
+ lhs = cell[1, team=formed_team, stat=stat]
+ if (stat /= 1) stop 5
+
+ ! for send_to_remote
+ ! Checking against caf_single is very limitted.
+ cell[1, team_number=t_num] = 45
+ if (cell /= 45) stop 11
+ cell[1, team_number=st_num] = 46
+ if (cell /= 46) stop 12
+ cell[1, team=parentteam] = 47
+ if (cell /= 47) stop 13
+
+ ! Check that team_number is validated
+ stat = -1
+ cell[1, team_number=5, stat=stat] = 0
+ if (stat /= 1) stop 14
+
+ ! Check that only access to active teams is valid
+ stat = 42
+ cell[1, team=formed_team, stat=stat] = -1
+ if (stat /= 1) stop 15
+
+ ! for transfer_between_remotes
+ ! Checking against caf_single is very limitted.
+ cell[1, team_number=t_num] = caf(1)[1, team_number=-1]
+ if (cell /= 23) stop 21
+ cell[1, team_number=st_num] = caf(2)[1, team_number=-1]
+ ! cell is an alias for caf(2) and has been overwritten by caf(1)!
+ if (cell /= 23) stop 22
+ cell[1, team=parentteam] = caf(1)[1, team= team]
+ if (cell /= 23) stop 23
+
+ ! Check that team_number is validated
+ stat = -1
+ cell[1, team_number=5, stat=stat] = caf(1)[1, team_number= -1]
+ if (stat /= 1) stop 24
+ stat = -1
+ cell[1, team_number=t_num] = caf(1)[1, team_number= -2, stat=stat]
+ if (stat /= 1) stop 25
+
+ ! Check that only access to active teams is valid
+ stat = 42
+ cell[1, team=formed_team, stat=stat] = caf(1)[1]
+ if (stat /= 1) stop 26
+ stat = 42
+ cell[1] = caf(1)[1, team=formed_team, stat=stat]
+ if (stat /= 1) stop 27
+ end team
+end program coindexed_5
diff --git a/gcc/testsuite/gfortran.dg/coarray/get_team_1.f90 b/gcc/testsuite/gfortran.dg/coarray/get_team_1.f90
new file mode 100644
index 0000000..f37d1c7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray/get_team_1.f90
@@ -0,0 +1,29 @@
+!{ dg-do compile }
+
+! PR 97210
+! Tests get_team syntax
+
+ use iso_fortran_env
+ implicit none
+ type(team_type) :: team, ret
+ integer :: level
+
+ ret = get_team()
+ ret = get_team('abc') !{ dg-error "must be INTEGER" }
+ ret = get_team(level, 'abc') !{ dg-error "Too many arguments" }
+ ret = get_team([1,2]) !{ dg-error "must be a scalar" }
+ ret = get_team(team) !{ dg-error "must be INTEGER" }
+
+ ret = get_team(INITIAL_TEAM)
+ ret = get_team(CURRENT_TEAM)
+ ret = get_team(PARENT_TEAM)
+ ret = get_team(INITIAL_TEAM, CURRENT_TEAM) !{ dg-error "Too many arguments" }
+
+ level = INITIAL_TEAM
+ ret = get_team(level)
+ ret = get_team(99) !{ dg-error "specify one of the INITIAL_TEAM, PARENT_TEAM" }
+ level = 99
+ ret = get_team(level)
+ level = get_team() !{ dg-error "Cannot convert TYPE\\(team_type\\)" }
+end
+
diff --git a/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08 b/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08
index 098a2bb..b7ec5a6 100644
--- a/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08
+++ b/gcc/testsuite/gfortran.dg/coarray/image_status_1.f08
@@ -18,7 +18,7 @@ program test_image_status_1
isv = image_status(k2) ! Ok
isv = image_status(k4) ! Ok
isv = image_status(k8) ! Ok
- isv = image_status(1, team=1) ! { dg-error "'team' argument of 'image_status' intrinsic at \\(1\\) not yet supported" }
+ isv = image_status(1, team=1) ! { dg-error "shall be of type 'team_type'" }
isv = image_status() ! { dg-error "Missing actual argument 'image' in call to 'image_status' at \\(1\\)" }
isv = image_status(team=1) ! { dg-error "Missing actual argument 'image' in call to 'image_status' at \\(1\\)" }
diff --git a/gcc/testsuite/gfortran.dg/coarray_10.f90 b/gcc/testsuite/gfortran.dg/coarray_10.f90
index 53917b5..6f453d5 100644
--- a/gcc/testsuite/gfortran.dg/coarray_10.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_10.f90
@@ -21,7 +21,7 @@ subroutine this_image_check()
integer,save :: z(4)[*], i
j = this_image(a,dim=3) ! { dg-error "not a valid codimension index" }
- j = this_image(dim=3) ! { dg-error "DIM argument without COARRAY argument" }
+ j = this_image(dim=3) ! { dg-error "'dim' argument without 'coarray' argument" }
i = image_index(i, [ 1 ]) ! { dg-error "Expected coarray variable" }
i = image_index(z, 2) ! { dg-error "must be a rank one array" }
end subroutine this_image_check
diff --git a/gcc/testsuite/gfortran.dg/coarray_49.f90 b/gcc/testsuite/gfortran.dg/coarray_49.f90
index 370e3fd..fd8549b 100644
--- a/gcc/testsuite/gfortran.dg/coarray_49.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_49.f90
@@ -5,5 +5,5 @@
program p
integer :: x[*]
- print *, image_index (x, [1.0]) ! { dg-error "shall be INTEGER" }
+ print *, image_index (x, [1.0]) ! { dg-error "must be INTEGER" }
end
diff --git a/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90 b/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90
index 299ea62..2d8a39a 100644
--- a/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_collectives_12.f90
@@ -20,6 +20,6 @@ program test
call co_broadcast(val3, source_image=res,stat=stat3, errmsg=errmesg3)
end program test
-! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&desc.., _gfortran_caf_num_images \\(0, -1\\), &stat1, errmesg1, 6\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&desc.., _gfortran_caf_num_images \\(0B, 0B\\), &stat1, errmesg1, 6\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&val2, 4, &stat2, errmesg2, 7\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_co_broadcast \\(&desc.., res, &stat3, errmesg3, 8\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90 b/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90
index 8419cf9..05a1350 100644
--- a/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_collectives_16.f90
@@ -33,6 +33,6 @@ contains
end function hc
end program test
-! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&desc.., fr, 4, _gfortran_caf_num_images \\(0, -1\\), &stat1, errmesg1, 0, 6\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&desc.., fr, 4, _gfortran_caf_num_images \\(0B, 0B\\), &stat1, errmesg1, 0, 6\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&val2, gz, 0, 4, &stat2, errmesg2, 0, 7\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_co_reduce \\(&desc.., hc, 1, res, &stat3, errmesg3, 99, 8\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_critical_2.f90 b/gcc/testsuite/gfortran.dg/coarray_critical_2.f90
new file mode 100644
index 0000000..702611c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_critical_2.f90
@@ -0,0 +1,30 @@
+!{ dg-do compile }
+!{ dg-additional-options "-fcoarray=lib" }
+
+! Test critical syntax errors with stat= and errmsg= specifiers
+
+ implicit none
+ integer :: istat
+ character(len=30) :: err
+ integer(kind=1) :: too_small_stat
+
+ critical (stat=err) !{ dg-error "must be a scalar INTEGER" }
+ continue
+ end critical
+
+ critical (stat=istat, stat=istat) !{ dg-error "Duplicate STAT" }
+ continue
+ end critical !{ dg-error "Expecting END PROGRAM" }
+
+ critical (stat=istat, errmsg=istat) !{ dg-error "must be a scalar CHARACTER variable" }
+ continue
+ end critical
+
+ critical (stat=istat, errmsg=err, errmsg=err) !{ dg-error "Duplicate ERRMSG" }
+ continue
+ end critical !{ dg-error "Expecting END PROGRAM" }
+
+ critical (stat=too_small_stat) !{ dg-error "scalar INTEGER variable of at least kind 2" }
+ continue
+ end critical
+end
diff --git a/gcc/testsuite/gfortran.dg/coarray_critical_3.f90 b/gcc/testsuite/gfortran.dg/coarray_critical_3.f90
new file mode 100644
index 0000000..cd609bd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_critical_3.f90
@@ -0,0 +1,32 @@
+! { dg-do run }
+! { dg-options "-fcoarray=lib -fdump-tree-original -lcaf_single" }
+! { dg-additional-options "-latomic" { target libatomic_available } }
+
+! PR 87939
+! Test critical construct with stat= and errmsg= specifiers
+!
+ use, intrinsic :: iso_fortran_env, only: int16
+ implicit none
+ integer :: istat = 42
+ integer(kind=int16) :: istat16 = 42
+ character(len=30) :: err = 'unchanged'
+ integer :: fail = 0
+
+ critical (stat=istat, errmsg=err)
+ if (istat /= 0) fail = 1
+ if (trim(err) /= 'unchanged') fail = 2
+ end critical
+
+ if (fail /= 0) stop fail
+
+ critical (stat=istat16, errmsg=err)
+ if (istat16 /= 0) fail = 3
+ if (trim(err) /= 'unchanged') fail = 4
+ end critical
+
+ if (fail /= 0) stop fail
+end
+
+! { dg-final { scan-tree-dump "_gfortran_caf_lock \\(caf_token\\.\[0-9\]+, 0, 1, 0B, &istat, &err, 30\\);" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_lock \\(caf_token\\.\[0-9\]+, 0, 1, 0B, &stat\\.\[0-9\]+, &err, 30\\);" "original" } }
+! { dg-final { scan-tree-dump-times "_gfortran_caf_unlock \\(caf_token\\.\[0-9\]+, 0, 1, &stat\\.\[0-9\]+, 0B, 0\\);" 2 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90
index 63cca3e..7939a79 100644
--- a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_1.f90
@@ -19,8 +19,8 @@ end
! { dg-final { scan-tree-dump-times "bar \\(real\\(kind=4\\)\\\[2\\\] \\* restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "mylcobound = 5;" 1 "original" } }
! { dg-final { scan-tree-dump-times "parm...dim\\\[1\\\].lbound = 5;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r]*_gfortran_caf_num_images \\(0, -1\\).? \\+ -?\[0-9\]+\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r]*_gfortran_caf_num_images \\(0B, 0B\\).? \\+ -?\[0-9\]+\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "mylbound = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0B\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "bar \\(x, caf_token.., 0\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_init \\(&argc, &argv\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90 b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90
index a27d740..31a7677 100644
--- a/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_lib_this_image_2.f90
@@ -19,8 +19,8 @@ end
! { dg-final { scan-tree-dump-times "bar \\(struct array02_real\\(kind=4\\) & restrict x, void \\* restrict caf_token.., integer\\(kind=\[48\]\\) caf_offset..\\)" 1 "original" } }
! { dg-final { scan-tree-dump-times "mylcobound = 5;" 1 "original" } }
! { dg-final { scan-tree-dump-times "parm...dim\\\[1\\\].lbound = 5;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r\]*_gfortran_caf_num_images \\(0, -1\\).? \\+ -?\[0-9\]+\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "myucobound =\[^\n\r\]* parm...dim\\\[1\\\].lbound \\+ \[^\n\r\]*_gfortran_caf_num_images \\(0B, 0B\\).? \\+ -?\[0-9\]+\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "mylbound = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times "mythis_image = _gfortran_caf_this_image \\(0B\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "bar \\(&parm.\[0-9\]+, caf_token.\[0-9\]+, \\(integer\\(kind=\[48\]\\)\\) parm.\[0-9\]+.data - \\(integer\\(kind=\[48\]\\)\\) x\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_caf_init \\(&argc, &argv\\);" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90 b/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90
index 1fe2318..5a609d8 100644
--- a/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_this_image_1.f90
@@ -1,19 +1,52 @@
-! { dg-do compile }
-! { dg-options "-fdump-tree-original -fcoarray=single" }
+!{ dg-do run }
+!{ dg-options "-fdump-tree-original -fcoarray=single" }
!
-j1 = this_image(distance=4)
-j2 = this_image(5)
+
+use, intrinsic :: iso_fortran_env, only: team_type
+integer :: caf[2,*]
+integer, allocatable :: res(:)
+type(team_type) :: team
+
+form team(1, team, new_index=MOD(this_image() + 43, num_images()) + 1)
+j1 = this_image()
+if (j1 /= 1) then
+ print *, me, ":", j1
+ stop 1
+endif
+res = this_image(caf)
+if (any (res /= [1, 1])) then
+ print *, me, ":", res
+ stop 2
+endif
+j2 = this_image(caf, 1)
+if (j2 /= 1) then
+ print *, me, ":", j2
+ stop 3
+endif
+j3 = this_image(team)
+if (j3 /= MOD(this_image() + 43, num_images()) +1) then
+ print *, me, ":", j3
+ stop 4
+endif
+res = this_image(caf, team)
+if (any(res /= [1, 1])) then
+ print *, me, ":", res
+ stop 5
+endif
+j4 = this_image(caf, 1, team)
+if (j4 /= 1) then
+ print *, me, ":", j4
+ stop 6
+endif
+associate(me => this_image())
+end associate
k1 = num_images()
-k2 = num_images(6)
-k3 = num_images(distance=7)
-k4 = num_images(distance=8, failed=.true.)
-k5 = num_images(failed=.false.)
+k2 = num_images(team)
+k3 = num_images(-1)
end
-! { dg-final { scan-tree-dump-times "j1 = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "j2 = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k1 = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k2 = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k3 = 1;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k4 = 0;" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k5 = 1;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "j\[1-4\] = 1;" 4 "original" } }
+! { dg-final { scan-tree-dump-times "A\\.\[0-9\]+\\\[2\\\] = \\\{1, 1\\\};" 4 "original" } }
+! { dg-final { scan-tree-dump "k1 = 1;" "original" } }
+! { dg-final { scan-tree-dump "k2 = 1;" "original" } }
+! { dg-final { scan-tree-dump "k3 = 1;" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90 b/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90
index 002c897..9713e3d 100644
--- a/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_this_image_2.f90
@@ -1,19 +1,57 @@
-! { dg-do compile }
-! { dg-options "-fdump-tree-original -fcoarray=lib" }
+!{ dg-do run }
+!{ dg-additional-options "-fdump-tree-original -fcoarray=lib -lcaf_single" }
!
-j1 = this_image(distance=4)
-j2 = this_image(5)
+
+use, intrinsic :: iso_fortran_env, only: team_type
+integer :: caf[2,*]
+integer, allocatable :: res(:)
+type(team_type) :: team
+
+form team(1, team, new_index=MOD(this_image() + 43, num_images()) + 1)
+
+associate(me => this_image())
+j1 = this_image()
+if (j1 /= 1) then
+ print *, me, ":", j1
+ stop 1
+endif
+res = this_image(caf)
+if (any (res /= [1, 1])) then
+ print *, me, ":", res
+ stop 2
+endif
+j2 = this_image(caf, 1)
+if (j2 /= 1) then
+ print *, me, ":", j2
+ stop 3
+endif
+j3 = this_image(team)
+if (j3 /= MOD(this_image() + 43, num_images()) +1) then
+ print *, me, ":", j3
+ stop 4
+endif
+res = this_image(caf, team)
+if (any(res /= [1, 1])) then
+ print *, me, ":", res
+ stop 5
+endif
+j4 = this_image(caf, 1, team)
+if (j4 /= 1) then
+ print *, me, ":", j4
+ stop 6
+endif
+end associate
k1 = num_images()
-k2 = num_images(6)
-k3 = num_images(distance=7)
-k4 = num_images(distance=8, failed=.true.)
-k5 = num_images(failed=.false.)
+k2 = num_images(team)
+k3 = num_images(-1)
+k4 = num_images(1)
end
-! { dg-final { scan-tree-dump-times "j1 = _gfortran_caf_this_image \\(4\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "j2 = _gfortran_caf_this_image \\(5\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k1 = _gfortran_caf_num_images \\(0, -1\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k2 = _gfortran_caf_num_images \\(6, -1\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k3 = _gfortran_caf_num_images \\(7, -1\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k4 = _gfortran_caf_num_images \\(8, 1\\);" 1 "original" } }
-! { dg-final { scan-tree-dump-times "k5 = _gfortran_caf_num_images \\(0, 0\\);" 1 "original" } }
+! { dg-final { scan-tree-dump "j1 = _gfortran_caf_this_image \\(0B\\);" "original" } }
+! { dg-final { scan-tree-dump "j3 = _gfortran_caf_this_image \\(team\\);" "original" } }
+! { dg-final { scan-tree-dump-times "D\\.\[0-9\]+ = _gfortran_caf_this_image \\(team\\) \\+ -1;" 2 "original" } }
+! { dg-final { scan-tree-dump-times "D\\.\[0-9\]+ = _gfortran_caf_this_image \\(0B\\) \\+ -1;" 2 "original" } }
+! { dg-final { scan-tree-dump "k1 = _gfortran_caf_num_images \\(0B, 0B\\);" "original" } }
+! { dg-final { scan-tree-dump "k2 = _gfortran_caf_num_images \\(team, 0B\\);" "original" } }
+! { dg-final { scan-tree-dump "k3 = _gfortran_caf_num_images \\(0B, &D\\.\[0-9\]+\\);" "original" } }
+! { dg-final { scan-tree-dump "k4 = _gfortran_caf_num_images \\(0B, &D\\.\[0-9\]+\\);" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/coarray_this_image_3.f90 b/gcc/testsuite/gfortran.dg/coarray_this_image_3.f90
new file mode 100644
index 0000000..b8433b2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_this_image_3.f90
@@ -0,0 +1,31 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+
+
+use, intrinsic :: iso_fortran_env, only: team_type
+integer :: caf[*]
+integer, allocatable :: res(:)
+type(team_type) :: team
+
+j1 = this_image() ! ok
+j1 = this_image('bar') !{ dg-error "First argument of 'this_image'" }
+res = this_image(caf) ! ok
+res = this_image(caf, caf) !{ dg-error "Second argument of 'this_image'" }
+j2 = this_image(caf, 1) ! ok
+j3 = this_image(caf, 'foo') !{ dg-error "Second argument of 'this_image'" }
+j4 = this_image(caf, [1, 2]) !{ dg-error "Second argument of 'this_image'" }
+j5 = this_image(team) ! ok
+j6 = this_image(team, caf) !{ dg-error "Second argument of 'this_image'" }
+res = this_image(caf, team) ! ok
+res = this_image(caf, team, 'foo') !{ dg-error "shall be of type 'team_type'" }
+j4 = this_image(caf, 1, team) ! ok
+j5 = this_image(caf, 1, team, 'baz') !{ dg-error "Too many arguments in call" }
+j6 = this_image(dim=1, team=team, coarray=caf)
+
+k1 = num_images() ! ok
+k2 = num_images(team) ! ok
+k3 = num_images(team, 2) !{ dg-error "Too many arguments in call to" }
+k4 = num_images(1) ! ok
+k5 = num_images('abc') !{ dg-error "'team/team_number' argument of 'num_images' intrinsic" }
+k6 = num_images(1, team) !{ dg-error "Too many arguments in call to" }
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
index 0c8a6ad..a7fa7c3 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
@@ -18,7 +18,7 @@ program do_concurrent_all_clauses
squared = i * i
arr(i) = temp2 + squared
sum = sum + arr(i)
- max_val = max(max_val, arr(i)) ! { dg-error "Reference to impure function" }
+ max_val = max(max_val, arr(i))
end block
end do
print *, arr, sum, max_val
diff --git a/gcc/testsuite/gfortran.dg/move_alloc_11.f90 b/gcc/testsuite/gfortran.dg/move_alloc_11.f90
new file mode 100644
index 0000000..d33e0ce
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/move_alloc_11.f90
@@ -0,0 +1,23 @@
+!{ dg-do compile }
+
+! General error checking for move_alloc parameter list.
+
+integer, allocatable :: i, o
+integer :: st, s2
+character(30) :: e, e2
+
+ call move_alloc(i, o, STAT=st)
+ call move_alloc(i, o, STAT=st, STAT=s2) !{ dg-error "Keyword 'stat' at \\(1\\) has already appeared in the current argument list" }
+ call move_alloc(i, o, STAT=e) !{ dg-error "STAT= argument at \\(1\\) must be a scalar INTEGER variable of at least kind 2" }
+ call move_alloc(i, o, STAT=[st, s2]) !{ dg-error "STAT= argument at \\(1\\) must be a scalar INTEGER variable of at least kind 2" }
+ call move_alloc(i, o, STAT=.TRUE.) !{ dg-error "STAT= argument at \\(1\\) must be a scalar INTEGER variable of at least kind 2" }
+
+ call move_alloc(i, o, STAT=st, ERRMSG=e)
+ call move_alloc(i, o, ERRMSG=e)
+ call move_alloc(i, o, ERRMSG=e, ERRMSG=e2) !{ dg-error "Keyword 'errmsg' at \\(1\\) has already appeared in the current argument list" }
+ call move_alloc(i, o, ERRMSG=st) !{ dg-error "ERRMSG= argument at \\(1\\) must be a scalar CHARACTER variable of at least kind 1" }
+ call move_alloc(i, o, ERRMSG=.TRUE.) !{ dg-error "ERRMSG= argument at \\(1\\) must be a scalar CHARACTER variable of at least kind 1" }
+
+
+end
+
diff --git a/gcc/testsuite/gfortran.dg/num_images_1.f90 b/gcc/testsuite/gfortran.dg/num_images_1.f90
index dac34ba..e03857c 100644
--- a/gcc/testsuite/gfortran.dg/num_images_1.f90
+++ b/gcc/testsuite/gfortran.dg/num_images_1.f90
@@ -5,5 +5,5 @@
program foo
implicit none
integer k5
- k5 = num_images(failed=.false.) ! { dg-error "argument to NUM_IMAGES" }
+ k5 = num_images(failed=.false.) ! { dg-error "Cannot find keyword named 'failed' in call to 'num_images'" }
end program foo
diff --git a/gcc/testsuite/gfortran.dg/pr102458.f90 b/gcc/testsuite/gfortran.dg/pr102458.f90
index 555e497..7c13084 100644
--- a/gcc/testsuite/gfortran.dg/pr102458.f90
+++ b/gcc/testsuite/gfortran.dg/pr102458.f90
@@ -9,7 +9,7 @@ end
program p
block
- integer :: a(get_team()) = 1 ! { dg-error "Automatic array" }
+ integer :: a(get_team()) = 1 ! { dg-error "Automatic array | ISO_FORTRAN_ENV | must be of INTEGER" }
print *, a
end block
end
diff --git a/gcc/testsuite/gfortran.dg/pr119836_1.f90 b/gcc/testsuite/gfortran.dg/pr119836_1.f90
new file mode 100644
index 0000000..984e2d0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr119836_1.f90
@@ -0,0 +1,18 @@
+!
+! { dg-do run }
+!
+! PR fortran/119836
+!
+program p
+ implicit none
+ integer, parameter :: n = 4
+ integer :: i
+ integer :: y(n), x(n)
+ do concurrent (i=1:n)
+ x(i) = shiftl (i,1) ! accepted
+ block
+ y(i) = shiftl (i,1) ! wrongly rejected
+ end block
+ end do
+ if (any(x /= y)) stop 1
+end program p
diff --git a/gcc/testsuite/gfortran.dg/pr119836_2.f90 b/gcc/testsuite/gfortran.dg/pr119836_2.f90
new file mode 100644
index 0000000..5e2d0c9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr119836_2.f90
@@ -0,0 +1,21 @@
+!
+! { dg-do compile }
+!
+! PR fortran/119836
+!
+! Although intrinsic functions contained within the Fortran standard
+! are pure procedures, many of the additional intrinsic functions
+! supplied in libgfortran are impure. RAND() is one such function.
+!
+program foo
+ implicit none
+ integer i
+ real x(4)
+ do concurrent (i=1:4)
+ x = rand() ! { dg-error "Reference to impure function" }
+ block
+ x = rand() ! { dg-error "Reference to impure function" }
+ end block
+ end do
+ print *, x
+end program foo
diff --git a/gcc/testsuite/gfortran.dg/pr119836_3.f90 b/gcc/testsuite/gfortran.dg/pr119836_3.f90
new file mode 100644
index 0000000..69a5fcf
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr119836_3.f90
@@ -0,0 +1,30 @@
+!
+! { dg-do run }
+!
+! PR fortran/119836
+!
+program p
+ implicit none
+ integer, parameter :: n = 4
+ integer :: i
+ integer :: y(n), x(n)
+ x = [(i,i=1,n)]
+ do concurrent (i=1:n)
+ call bar(x, y)
+ end do
+ if (any(x /= y)) stop 1
+ x = 2 * x
+ do concurrent (i=1:n)
+ block
+ call bar(x, y)
+ end block
+ end do
+ if (any(x /= y)) stop 1
+
+ contains
+ elemental subroutine bar(x, y)
+ integer, intent(in) :: x
+ integer, intent(out) :: y
+ y = x
+ end subroutine
+end program p
diff --git a/gcc/testsuite/gfortran.dg/pr119836_4.f90 b/gcc/testsuite/gfortran.dg/pr119836_4.f90
new file mode 100644
index 0000000..dc6f72b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr119836_4.f90
@@ -0,0 +1,30 @@
+!
+! { dg-do compile }
+!
+! PR fortran/119836
+!
+program p
+ implicit none
+ integer, parameter :: n = 4
+ integer :: i
+ integer :: y(n), x(n)
+ x = [(i,i=1,n)]
+ do concurrent (i=1:n)
+ call bar(x, y) ! { dg-error "Subroutine call" }
+ end do
+ if (any(x /= y)) stop 1
+ x = 2 * x
+ do concurrent (i=1:n)
+ block
+ call bar(x, y) ! { dg-error "Subroutine call" }
+ end block
+ end do
+ if (any(x /= y)) stop 1
+
+ contains
+ subroutine bar(x, y)
+ integer, intent(in) :: x(:)
+ integer, intent(out) :: y(:)
+ y = x
+ end subroutine
+end program p
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_52.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_52.f90
index cb7cf70..421d247 100644
--- a/gcc/testsuite/gfortran.dg/proc_ptr_52.f90
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_52.f90
@@ -1,4 +1,5 @@
! { dg-do run }
+! { dg-additional-options "-fcheck=pointer" }
!
! Test the fix for PRs93924 & 93925.
!
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_57.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_57.f90
new file mode 100644
index 0000000..7ecb88f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_57.f90
@@ -0,0 +1,36 @@
+! { dg-do compile }
+! { dg-additional-options "-fcheck=pointer" }
+!
+! PR fortran/102900
+
+module cs
+ implicit none
+ interface
+ function classStar_map_ifc() result(y)
+ import
+ class(*), pointer :: y
+ end function classStar_map_ifc
+ end interface
+
+contains
+
+ function selector()
+ procedure(classStar_map_ifc), pointer :: selector
+ selector => NULL()
+ end function selector
+
+ function selector_result() result(f)
+ procedure(classStar_map_ifc), pointer :: f
+ f => NULL()
+ end function selector_result
+
+ function fun(x) result(y)
+ class(*), pointer :: y
+ class(*), target, intent(in) :: x
+ select type (x)
+ class default
+ y => null()
+ end select
+ end function fun
+
+end module cs
diff --git a/gcc/testsuite/gfortran.dg/team_change_2.f90 b/gcc/testsuite/gfortran.dg/team_change_2.f90
new file mode 100644
index 0000000..66fe63c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_change_2.f90
@@ -0,0 +1,93 @@
+!{ dg-do compile }
+!{ dg-additional-options "-fcoarray=lib" }
+
+! PR 87939
+! Tests change team syntax
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ type(team_type) :: team
+ integer :: new_team, istat
+ character(len=30) :: err
+ integer :: caf[*], caf2[*]
+
+ new_team = mod(this_image(),2)+1
+
+ form team (new_team,team)
+
+ change team !{ dg-error "Syntax error in CHANGE TEAM statement" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ change team (err) !{ dg-error "must be a scalar expression of type TEAM_TYPE" }
+ continue
+ end team
+
+ change team (team, stat=err) !{ dg-error "must be a scalar INTEGER" }
+ continue
+ end team
+
+ change team (team, stat=istat, stat=istat) !{ dg-error "Duplicate STAT" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ change team (team, stat=istat, errmsg=istat) !{ dg-error "must be a scalar CHARACTER variable" }
+ continue
+ end team
+
+ change team (team, stat=istat, errmsg=str, errmsg=str) !{ dg-error "Duplicate ERRMSG" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+1234 if (istat /= 0) stop 1 !{ dg-error "leaves CHANGE TEAM" }
+
+ change team (team)
+ go to 1234 !{ dg-error "leaves CHANGE TEAM" }
+ end team
+
+ call foo(team)
+
+ ! F2018, C1113
+ change team (team, caf[3,*] => caf) !{ dg-error "Codimension decl name" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ change team (team, c[3,*] => caf, c => caf2) !{ dg-error "Duplicate name" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ change team (team, c[3,*] => caf, caf => caf2) !{ dg-error "Codimension decl name" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ change team (team, caf2[3,*] => caf, c => caf2) !{ dg-error "Codimension decl name" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ ! F2018, C1114
+ change team (team, c => [caf, caf2]) !{ dg-error "a named coarray" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ ! F2018, C1115
+ change team (team, c => caf, c2 => caf) !{ dg-error "duplicates selector at" }
+ continue
+ end team !{ dg-error "Expecting END PROGRAM statement" }
+
+ t: change team(team)
+ exit t
+ end team t
+
+ change team(team)
+ exit t !{ dg-error "EXIT statement at \\(1\\) is not within construct 't'" }
+ end team
+contains
+ subroutine foo(team)
+ type(team_type) :: team
+
+ change team (team)
+ return !{ dg-error "Image control statement" }
+ end team
+ end subroutine
+end
+
diff --git a/gcc/testsuite/gfortran.dg/team_change_3.f90 b/gcc/testsuite/gfortran.dg/team_change_3.f90
new file mode 100644
index 0000000..bc30c40
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_change_3.f90
@@ -0,0 +1,29 @@
+!{ dg-do run }
+!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" }
+!{ dg-additional-options "-latomic" { target libatomic_available } }
+
+! PR 87939
+! Tests change team stat= and errmsg= specifiers
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ type(team_type) :: team
+ integer :: new_team, istat = 42
+ character(len=30) :: err = 'unchanged'
+
+ new_team = mod(this_image(),2)+1
+
+ form team (new_team,team)
+
+ change team (team, stat=istat)
+ if (istat /= 0) stop 1
+ end team
+
+ change team (team, stat=istat, errmsg=err)
+ if (trim(err) /= 'unchanged') stop 2
+ end team
+
+end
+
+! { dg-final { scan-tree-dump "_gfortran_caf_change_team \\(team, &istat, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_change_team \\(team, &istat, &err, 30\\)" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/team_end_2.f90 b/gcc/testsuite/gfortran.dg/team_end_2.f90
new file mode 100644
index 0000000..c27b59d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_end_2.f90
@@ -0,0 +1,42 @@
+!{ dg-do compile }
+!{ dg-additional-options "-fcoarray=lib" }
+
+! PR 87939
+! Tests change team syntax
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ type(team_type) :: team
+ integer :: new_team, istat
+ character(len=30) :: err
+
+ new_team = mod(this_image(),2)+1
+
+ form team (new_team,team)
+
+ change team (team)
+ continue
+ end team (stat=err) ! { dg-error "must be a scalar INTEGER" }
+
+ change team (team)
+ continue
+ end team (stat=istat, stat=istat) ! { dg-error "Duplicate STAT" }
+
+ change team (team)
+ continue
+ end team (stat=istat, errmsg=istat) ! { dg-error "must be a scalar CHARACTER variable" }
+
+ change team (team)
+ continue
+ end team (stat=istat, errmsg=err, errmsg=err) ! { dg-error "Duplicate ERRMSG" }
+
+ t: change team (team)
+ continue
+ end team (stat=istat) t ! ok
+
+ t2: change team (team)
+ continue
+ end team ! { dg-error "Expected block name of 't2' in END TEAM" }
+ end team t2 ! close the team correctly to catch other errors
+end
+
diff --git a/gcc/testsuite/gfortran.dg/team_end_3.f90 b/gcc/testsuite/gfortran.dg/team_end_3.f90
new file mode 100644
index 0000000..9cd7d4c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_end_3.f90
@@ -0,0 +1,41 @@
+!{ dg-do run }
+!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" }
+!{ dg-additional-options "-latomic" { target libatomic_available } }
+
+! PR 87939
+! Tests end team stat= and errmsg= specifiers
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ type(team_type) :: team
+ integer :: new_team, istat = 42
+ character(len=30) :: err = 'unchanged'
+ integer, allocatable :: sample(:)[:]
+ integer, allocatable :: scal_caf[:]
+
+ new_team = mod(this_image(),2)+1
+
+ form team (new_team,team)
+
+ change team (team)
+ allocate(sample(5)[*], scal_caf[*])
+ if (.NOT. allocated(sample)) stop 1
+ if (.NOT. allocated(scal_caf)) stop 2
+ end team (stat=istat)
+ if (istat /= 0) stop 3
+ if (allocated(sample)) stop 4
+ if (allocated(scal_caf)) stop 5
+
+ deallocate(sample, stat=istat)
+ if (istat == 0) stop 6
+
+ istat = 42
+ t: change team (team)
+ continue
+ end team (stat=istat, errmsg=err) t
+ if (istat /= 0) stop 7
+ if (trim(err) /= 'unchanged') stop 8
+end
+
+! { dg-final { scan-tree-dump "_gfortran_caf_end_team \\(&istat, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_end_team \\(&istat, &err, 30\\)" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/team_form_2.f90 b/gcc/testsuite/gfortran.dg/team_form_2.f90
new file mode 100644
index 0000000..5c6d81f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_form_2.f90
@@ -0,0 +1,27 @@
+!{ dg-do compile }
+!{ dg-additional-options "-fcoarray=lib" }
+
+! PR 87939
+! Tests form team syntax errors
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ integer :: istat, new_team
+ character(len=30) :: err
+ type(team_type) :: team
+
+ new_team = mod(this_image(),2)+1
+
+ form team ! { dg-error "Syntax error in FORM TEAM statement" }
+ form team (new_team) ! { dg-error "Syntax error in FORM TEAM statement" }
+ form team (new_team,err) ! { dg-error "must be a scalar expression of type TEAM_TYPE" }
+ form team (new_team,team,istat) ! { dg-error "Syntax error in FORM TEAM statement" }
+ form team (new_team,team,stat=istat,stat=istat) ! { dg-error "Duplicate STAT" }
+ form team (new_team,team,stat=istat,errmsg=istat) ! { dg-error "must be a scalar CHARACTER variable" }
+ form team (new_team,team,stat=istat,errmsg=err,errmsg=err) ! { dg-error "Duplicate ERRMSG" }
+ form team (new_team,team,new_index=1,new_index=1) ! { dg-error "Duplicate NEW_INDEX" }
+ form team (new_team,team,new_index=err) ! { dg-error "must be a scalar INTEGER" }
+ form team (new_team,team,new_index=1,new_index=1,stat=istat,errmsg=err) ! { dg-error "Duplicate NEW_INDEX" }
+ form team (new_team,team,new_index=1,stat=istat,errmsg=err,new_index=9) ! { dg-error "Duplicate NEW_INDEX" }
+
+end
diff --git a/gcc/testsuite/gfortran.dg/team_form_3.f90 b/gcc/testsuite/gfortran.dg/team_form_3.f90
new file mode 100644
index 0000000..d9aae33
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_form_3.f90
@@ -0,0 +1,34 @@
+!{ dg-do run }
+!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" }
+!{ dg-additional-options "-latomic" { target libatomic_available } }
+
+! PR 87939
+! Tests form team with stat= and errmsg=
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ integer :: istat = 42, new_team
+ character(len=30) :: err = "unchanged"
+ type(team_type) :: team
+
+ new_team = mod(this_image(),2)+1
+
+ form team (new_team,team)
+ form team (new_team,team,stat=istat)
+ if (istat /= 0) stop 1
+ form team (new_team,team,stat=istat, errmsg=err)
+ if (trim(err) /= 'unchanged') stop 2
+ form team (new_team,team,new_index=1)
+ istat = 42
+ form team (new_team,team,new_index=1,stat=istat)
+ if (istat /= 0) stop 3
+ form team (new_team,team,new_index=1,stat=istat,errmsg=err)
+ if (trim(err) /= 'unchanged') stop 4
+end
+
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B, 0B, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B, &istat, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, 0B, &istat, &err, 30\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, &C\\.\[0-9\]+, 0B, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, &C\\.\[0-9\]+, &istat, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_form_team \\(new_team, &team, &C\\.\[0-9\]+, &istat, &err, 30\\)" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/team_get_1.f90 b/gcc/testsuite/gfortran.dg/team_get_1.f90
new file mode 100644
index 0000000..fe00ce8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_get_1.f90
@@ -0,0 +1,27 @@
+!{ dg-do compile }
+!{ dg-additional-options "-fcoarray=lib -fdump-tree-original" }
+
+! PR 87939
+! Tests get_team
+
+ use iso_fortran_env
+ implicit none
+ type(team_type) :: team, ret
+ integer :: new_team, level
+
+ new_team = mod(this_image(),2)+1
+
+ form team (new_team,team)
+
+ ret = get_team()
+ ret = get_team(INITIAL_TEAM)
+ ret = get_team(PARENT_TEAM)
+ ret = get_team(CURRENT_TEAM)
+ level = INITIAL_TEAM
+ ret = get_team(level)
+
+end
+
+! { dg-final { scan-tree-dump "_gfortran_caf_get_team \\(0B\\)" "original" } }
+! { dg-final { scan-tree-dump-times "_gfortran_caf_get_team \\(&C\.\[0-9\]+\\)" 3 "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_get_team \\(&level\\)" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/team_number_1.f90 b/gcc/testsuite/gfortran.dg/team_number_1.f90
index e44e17b..f0ee7d1 100644
--- a/gcc/testsuite/gfortran.dg/team_number_1.f90
+++ b/gcc/testsuite/gfortran.dg/team_number_1.f90
@@ -1,13 +1,13 @@
! { dg-do run }
! { dg-options "-fcoarray=single" }
!
-! Tests if team_number intrinsic fucntion works
+! Tests if team_number intrinsic function works
!
use iso_fortran_env, only : team_type
implicit none
- type(team_type) team
+ type(team_type) :: team
integer, parameter :: standard_initial_value=-1
- integer new_team
+ integer :: new_team
if (team_number()/=standard_initial_value) STOP 1
diff --git a/gcc/testsuite/gfortran.dg/team_sync_1.f90 b/gcc/testsuite/gfortran.dg/team_sync_1.f90
new file mode 100644
index 0000000..5b28651
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_sync_1.f90
@@ -0,0 +1,24 @@
+!{ dg-do compile }
+!{ dg-additional-options "-fcoarray=lib" }
+
+! PR 87939
+! Test sync team syntax errors
+
+ use iso_fortran_env, only : team_type
+ implicit none
+ integer :: istat
+ character(len=30) :: err
+ type(team_type) :: team
+
+ form team (mod(this_image(),2)+1, team)
+
+ change team (team)
+ sync team ! { dg-error "Syntax error in SYNC TEAM statement" }
+ sync team (err) ! { dg-error "must be a scalar expression of type TEAM_TYPE" }
+ sync team (team, istat) ! { dg-error "Syntax error in SYNC TEAM statement" }
+ sync team (team, stat=err) ! { dg-error "must be a scalar INTEGER" }
+ sync team (team, stat=istat, stat=istat) ! { dg-error "Duplicate STAT" }
+ sync team (team, stat=istat, errmsg=istat) ! { dg-error "must be a scalar CHARACTER variable" }
+ sync team (team, stat=istat, errmsg=err, errmsg=err) ! { dg-error "Duplicate ERRMSG" }
+ end team
+end
diff --git a/gcc/testsuite/gfortran.dg/team_sync_2.f90 b/gcc/testsuite/gfortran.dg/team_sync_2.f90
new file mode 100644
index 0000000..947f65d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/team_sync_2.f90
@@ -0,0 +1,27 @@
+!{ dg-do run }
+!{ dg-additional-options "-fcoarray=lib -fdump-tree-original -lcaf_single" }
+!{ dg-additional-options "-latomic" { target libatomic_available } }
+
+! PR 87939
+! Test sync team statement
+!
+ use iso_fortran_env, only : team_type
+ implicit none
+ integer :: istat = 42
+ type(team_type) :: team
+ character(len=30) :: err = "unchanged"
+
+ form team (mod(this_image(),2)+1, team)
+
+ change team (team)
+ sync team (team)
+ sync team (team, stat=istat)
+ if (istat /= 0) stop 1
+ sync team (team, stat=istat, errmsg=err)
+ if (trim(err) /= 'unchanged') stop 2
+ end team
+end
+
+! { dg-final { scan-tree-dump "_gfortran_caf_sync_team \\(team, 0B, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_sync_team \\(team, &istat, 0B, 0\\)" "original" } }
+! { dg-final { scan-tree-dump "_gfortran_caf_sync_team \\(team, &istat, &err, 30\\)" "original" } }
diff --git a/gcc/testsuite/gm2/pim/fail/constintarraybyte.mod b/gcc/testsuite/gm2/pim/fail/constintarraybyte.mod
new file mode 100644
index 0000000..cbcc804
--- /dev/null
+++ b/gcc/testsuite/gm2/pim/fail/constintarraybyte.mod
@@ -0,0 +1,10 @@
+MODULE constintarraybyte ;
+
+FROM FormatStrings IMPORT Sprintf1 ;
+FROM DynamicStrings IMPORT String, InitString ;
+
+VAR
+ s: String ;
+BEGIN
+ s := Sprintf1 (InitString("abc%x\n"), 42)
+END constintarraybyte.
diff --git a/gcc/testsuite/gm2/pimlib/run/pass/format2.mod b/gcc/testsuite/gm2/pimlib/run/pass/format2.mod
new file mode 100644
index 0000000..2ad6a8c
--- /dev/null
+++ b/gcc/testsuite/gm2/pimlib/run/pass/format2.mod
@@ -0,0 +1,63 @@
+MODULE format2;
+
+FROM libc IMPORT exit, printf ;
+FROM Terminal IMPORT Write, WriteLn;
+FROM NumberIO IMPORT WriteCard;
+FROM DynamicStrings IMPORT String, Length, char, InitString;
+FROM FormatStrings IMPORT Sprintf1;
+
+PROCEDURE WriteString (s: String);
+VAR
+ l, i: CARDINAL;
+BEGIN
+ l := Length (s) ;
+ i := 0 ;
+ WHILE i < l DO
+ Write (char (s, i)) ;
+ INC (i)
+ END
+END WriteString;
+
+
+(*
+ assert -
+*)
+
+PROCEDURE assert (cond: BOOLEAN; line: CARDINAL; file: ARRAY OF CHAR) ;
+BEGIN
+ IF NOT cond
+ THEN
+ printf ("%s:%d assertion failed\n", file, line);
+ exit (1)
+ END
+END assert ;
+
+
+VAR
+ n: CARDINAL;
+ r, s: String;
+BEGIN
+ n := 2;
+ r := InitString("%u pieces of cake") ;
+ WriteString (r) ; WriteLn ;
+ assert (Length (r) = 17, __LINE__, __FILE__) ;
+ s := Sprintf1 (r, n) ;
+ WriteCard (Length (s), 4) ; WriteLn ;
+ assert (Length (s) = 16, __LINE__, __FILE__) ;
+
+ r := InitString("%d pieces of cake") ;
+ WriteString (r) ; WriteLn ;
+ assert (Length (r) = 17, __LINE__, __FILE__) ;
+ s := Sprintf1 (r, n) ;
+ WriteCard (Length (s), 4) ; WriteLn ;
+ assert (Length (s) = 16, __LINE__, __FILE__) ;
+
+ r := InitString("%x pieces of cake") ;
+ WriteString (r) ; WriteLn ;
+ assert (Length (r) = 17, __LINE__, __FILE__) ;
+ s := Sprintf1 (r, n) ;
+ WriteCard (Length (s), 4) ; WriteLn ;
+ assert (Length (s) = 16, __LINE__, __FILE__) ;
+
+ WriteString (InitString ('all tests pass')) ; WriteLn ;
+END format2.
diff --git a/gcc/testsuite/gnat.dg/gcov/gcov.exp b/gcc/testsuite/gnat.dg/gcov/gcov.exp
index 4fa887d..031914a 100644
--- a/gcc/testsuite/gnat.dg/gcov/gcov.exp
+++ b/gcc/testsuite/gnat.dg/gcov/gcov.exp
@@ -21,12 +21,19 @@ load_lib gnat-dg.exp
load_lib gcov.exp
global GCC_UNDER_TEST
+global GCOV_UNDER_TEST
-# For now find gcov in the same directory as $GCC_UNDER_TEST.
-if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } {
- set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/gcov
+# For now find gcov in the same directory as $GCC_UNDER_TEST, unless
+# GCOV_UNDER_TEST is defined.
+
+if ![info exists GCOV_UNDER_TEST] {
+ if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } {
+ set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/gcov
+ } else {
+ set GCOV gcov
+ }
} else {
- set GCOV gcov
+ set GCOV $GCOV_UNDER_TEST
}
# Initialize harness.
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index a62f459..869d150 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -562,6 +562,16 @@ proc check_effective_target_elf { } {
}
}
+# Returns 1 if the target uses the PE/COFF object format, 0 otherwise.
+
+proc check_effective_target_pe { } {
+ if { [gcc_target_object_format] == "pe" } {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
# Returns 1 if the target toolchain supports ifunc, 0 otherwise.
proc check_ifunc_available { } {
diff --git a/gcc/testsuite/rust/compile/nr2/compile.exp b/gcc/testsuite/rust/compile/nr2/compile.exp
index 4d91dd0..9e15cdd 100644
--- a/gcc/testsuite/rust/compile/nr2/compile.exp
+++ b/gcc/testsuite/rust/compile/nr2/compile.exp
@@ -19,6 +19,15 @@
# Load support procs.
load_lib rust-dg.exp
+# These tests don't run runtest_file_p consistently if it
+# doesn't return the same values, so disable parallelization
+# of this *.exp file. The first parallel runtest to reach
+# this will run all the tests serially.
+if ![gcc_parallel_test_run_p compile] {
+ return
+}
+gcc_parallel_test_enable 0
+
# Initialize `dg'.
dg-init
@@ -136,3 +145,5 @@ namespace eval rust-nr2-ns {
# All done.
dg-finish
+
+gcc_parallel_test_enable 1