diff options
Diffstat (limited to 'gcc/testsuite')
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 |