aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog816
-rw-r--r--gcc/testsuite/c-c++-common/analyzer/realloc-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/gomp/append-args-interop.c4
-rw-r--r--gcc/testsuite/c-c++-common/pr119614-1.c28
-rw-r--r--gcc/testsuite/c-c++-common/pr119614-2.c28
-rw-r--r--gcc/testsuite/c-c++-common/pr119614-3.c28
-rw-r--r--gcc/testsuite/c-c++-common/pr119616.c23
-rw-r--r--gcc/testsuite/c-c++-common/pr119618.c21
-rw-r--r--gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ACOS.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ANNUITY.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ASIN.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ATAN.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.cob40
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.out4
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.cob20
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_CHAR.cob29
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_COMBINED-DATETIME.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT___CONCATENATE.cob36
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT_with_reference_modding.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_COS.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob62
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob334
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.cob26
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXP.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_EXP10.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FACTORIAL.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE.cob54
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME.cob48
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME_with_ref_modding.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.cob69
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.out62
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_with_ref_modding.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_DP.COMMA.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_with_ref_modding.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_FRACTION-PART.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.cob13
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_HIGHEST-ALGEBRAIC.cob76
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DATE.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DAY.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-FORMATTED-DATE.cob41
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-PART.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__1_.cob38
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.cob139
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.out22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-COMPARE.cob21
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOG.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOG10.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE_with_reference_modding.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_LOWEST-ALGEBRAIC.cob55
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.cob12
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.cob12
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.cob12
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.cob110
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.out37
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__invalid_.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__valid_.cob21
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C_DP.COMMA.cob21
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.cob30
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.out8
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_PI.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_RANDOM.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_RANGE.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_REM__invalid_.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_REM__valid_.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE_with_reference_modding.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-FROM-FORMATTED-TIME.cob58
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-PAST-MIDNIGHT.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SIGN.cob30
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SIN.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob20
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.out6
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE_with_reference_modding.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_SUM.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TAN.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__2_.cob170
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_DP.COMMA.cob32
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_additional.cob173
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_dates.cob118
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_datetimes.cob44
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_times.cob72
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-C.cob89
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-F.cob89
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob89
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.cob18
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.out3
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE_with_reference_modding.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_VARIANCE.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob45
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob27
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob17
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_overflow.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_overflow.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_underflow.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_underflow.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob237
-rw-r--r--gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.out27
-rw-r--r--gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob38
-rw-r--r--gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out12
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob20
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out9
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob29
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out9
-rw-r--r--gcc/testsuite/cobol.dg/group2/Repository_functions_clause.cob14
-rw-r--r--gcc/testsuite/cobol.dg/group2/Repository_functions_clause.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/Static_reference_modification.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.cob51
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.cob39
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.out17
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.cob33
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.out2
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_with_recursion.cob49
-rw-r--r--gcc/testsuite/cobol.dg/group2/UDF_with_recursion.out6
-rw-r--r--gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.cob36
-rw-r--r--gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out5
-rw-r--r--gcc/testsuite/g++.dg/cpp/pr119391.C15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ref14.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__3.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp23/constexpr-nonlit12.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25a.C19
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-requires41.C25
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constinit20.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-requires2.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-requires3.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-requires4.C6
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-requires5.C10
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C10
-rw-r--r--gcc/testsuite/g++.dg/gomp/append-args-8.C8
-rw-r--r--gcc/testsuite/g++.dg/modules/gc-3_a.C7
-rw-r--r--gcc/testsuite/g++.dg/modules/gc-3_b.C4
-rw-r--r--gcc/testsuite/g++.dg/modules/noexcept-3_a.C14
-rw-r--r--gcc/testsuite/g++.dg/modules/noexcept-3_b.C12
-rw-r--r--gcc/testsuite/g++.dg/modules/noexcept-3_c.C11
-rw-r--r--gcc/testsuite/g++.dg/modules/pr119608_a.C16
-rw-r--r--gcc/testsuite/g++.dg/modules/pr119608_b.C8
-rw-r--r--gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C20
-rw-r--r--gcc/testsuite/g++.dg/opt/pr119613.C22
-rw-r--r--gcc/testsuite/g++.dg/opt/pr119614.C30
-rw-r--r--gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C17
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr118924.C29
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr116595.C7
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr119706.C178
-rw-r--r--gcc/testsuite/g++.target/i386/pr119689.C44
-rw-r--r--gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C10
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c9
-rw-r--r--gcc/testsuite/gcc.dg/bf-ms-attrib.c2
-rw-r--r--gcc/testsuite/gcc.dg/builtin-apply5.c23
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr118674.c5
-rw-r--r--gcc/testsuite/gcc.dg/gnu23-tag-6.c27
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr36728-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr41353-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr54693-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr68860-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr68860-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/sra-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/vla-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr119594.c32
-rw-r--r--gcc/testsuite/gcc.dg/pr119612.c9
-rw-r--r--gcc/testsuite/gcc.dg/pr119664.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/bitint-76.c19
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr119599-1.c27
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr119399.c10
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr119640.c17
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr99102.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr100056.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp46
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c201
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c57
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c2049
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c3
-rw-r--r--gcc/testsuite/gcc.target/arm/ivopts.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/lob1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/lob6.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/mve/mve.exp3
-rw-r--r--gcc/testsuite/gcc.target/arm/short-vfp-1.c46
-rw-r--r--gcc/testsuite/gcc.target/arm/unsigned-extend-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr115910.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr67215-1.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/pr67215-2.c10
-rw-r--r--gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c36
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h21
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c3
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c24
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c24
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c2
-rw-r--r--gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d36
-rw-r--r--gcc/testsuite/gdc.test/compilable/test21153.d8
-rw-r--r--gcc/testsuite/gdc.test/compilable/test21179.d11
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d18
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_11.f9053
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_12.f90175
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_13.f90211
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_14.f90176
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_15.f9020
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f904
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_9.f902
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f901
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_local_init.f904
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f903
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/append-args-interop.f904
-rw-r--r--gcc/testsuite/gfortran.dg/optional_absent_13.f9048
-rw-r--r--gcc/testsuite/gfortran.dg/reduce_2.f908
-rw-r--r--gcc/testsuite/gfortran.dg/reduce_3.f9056
-rw-r--r--gcc/testsuite/gfortran.dg/reduce_4.f9048
-rw-r--r--gcc/testsuite/gnat.dg/renaming17.adb17
-rw-r--r--gcc/testsuite/lib/cobol.exp29
-rw-r--r--gcc/testsuite/lib/target-supports.exp12
-rw-r--r--gcc/testsuite/rust/compile/enum_discriminant1.rs7
-rw-r--r--gcc/testsuite/rust/compile/feature.rs2
-rw-r--r--gcc/testsuite/rust/compile/invalid_label_name.rs4
-rw-r--r--gcc/testsuite/rust/compile/issue-2812.rs4
-rw-r--r--gcc/testsuite/rust/compile/issue-3625.rs2
-rw-r--r--gcc/testsuite/rust/compile/issue-3643.rs4
-rw-r--r--gcc/testsuite/rust/compile/issue-3646.rs7
-rw-r--r--gcc/testsuite/rust/compile/issue-3647.rs7
-rw-r--r--gcc/testsuite/rust/compile/issue-3648.rs8
-rw-r--r--gcc/testsuite/rust/compile/issue-3654.rs3
-rw-r--r--gcc/testsuite/rust/compile/issue-3656.rs10
-rw-r--r--gcc/testsuite/rust/compile/issue-3657.rs8
-rw-r--r--gcc/testsuite/rust/compile/issue-3663.rs6
-rw-r--r--gcc/testsuite/rust/compile/issue-3665.rs6
-rw-r--r--gcc/testsuite/rust/compile/issue-3667.rs24
-rw-r--r--gcc/testsuite/rust/compile/issue-3671.rs2
-rw-r--r--gcc/testsuite/rust/compile/macros/mbe/macro6.rs2
-rw-r--r--gcc/testsuite/rust/compile/min_specialization1.rs15
-rw-r--r--gcc/testsuite/rust/compile/nr2/compile.exp32
-rw-r--r--gcc/testsuite/rust/compile/nr2/exclude12
-rw-r--r--gcc/testsuite/rust/compile/undeclared_label.rs4
362 files changed, 10033 insertions, 265 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 422b365..330a283 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,819 @@
+2025-04-11 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * lib/target-supports.exp: Rename arm_v8_1_lob_ok into
+ arm_v8_1m_lob_hw.
+ Rename arm_thumb2_no_arm_v8_1_lob into
+ arm_thumb2_no_arm_v8_1m_lob.
+ Rename arm_thumb2_ok_no_arm_v8_1_lob into
+ arm_thumb2_ok_no_arm_v8_1m_lob.
+ * gcc.target/arm/lob1.c: Likewise.
+ * gcc.target/arm/lob6.c: Likewise.
+ * gcc.target/arm/ivopts.c: Likewise.
+ * gcc.target/arm/unsigned-extend-2.c: Likewise.
+
+2025-04-11 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR rtl-optimization/118502
+ * g++.dg/opt/shrink-wrapping-vector-1.C: New test.
+
+2025-04-11 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/rvv/base/pr115068-run.c: Turn off pedantic diagnostics.
+ * gcc.target/riscv/rvv/base/pr115068.c: Likewise.
+ * gcc.target/riscv/rvv/base/vwaddsub-1.c: Likewise.
+
+2025-04-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/114970
+ * g++.dg/opt/is_constant_evaluated4.C: New test.
+
+2025-04-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/119707
+ * gcc.dg/torture/bitint-76.c: New test.
+
+2025-04-11 Jennifer Schmitz <jschmitz@nvidia.com>
+
+ PR tree-optimization/119706
+ * g++.target/aarch64/sve/pr119706.C: New test.
+
+2025-04-11 Jonathan Yong <10walls@gmail.com>
+
+ PR target/113633
+ * gcc.dg/bf-ms-attrib.c: Fix expected __ms_struct__ layout
+ size.
+
+2025-04-11 Jonathan Yong <10walls@gmail.com>
+
+ * c-c++-common/analyzer/realloc-1.c: Make diagnostic accept
+ long long for __builtin_realloc warning.
+
+2025-04-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/119345
+ * g++.dg/cpp2a/lambda-targ14.C: New test.
+
+2025-04-10 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/119687
+ * g++.dg/cpp23/class-deduction-inherited8.C: New test.
+
+2025-04-10 Bob Dubner <rdubner@symas.com>
+
+ * cobol.dg/group2/Dynamic_reference_modification.cob: New testcase.
+ * cobol.dg/group2/Length_overflow__1_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow__2_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__1_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__2_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__3_.cob: Likewise.
+ * cobol.dg/group2/Offset_overflow.cob: Likewise.
+ * cobol.dg/group2/Offset_underflow.cob: Likewise.
+ * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob: Likewise.
+ * cobol.dg/group2/Refmod_sources_are_figurative_constants.cob: Likewise.
+ * cobol.dg/group2/Static_reference_modification.cob: Likewise.
+ * cobol.dg/group2/Dynamic_reference_modification.out: New known-good result.
+ * cobol.dg/group2/Length_overflow__1_.out: Likewise.
+ * cobol.dg/group2/Length_overflow__2_.out: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__1_.out: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__2_.out: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__3_.out: Likewise.
+ * cobol.dg/group2/Offset_overflow.out: Likewise.
+ * cobol.dg/group2/Offset_underflow.out: Likewise.
+ * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out: Likewise.
+ * cobol.dg/group2/Refmod_sources_are_figurative_constants.out: Likewise.
+ * cobol.dg/group2/Static_reference_modification.out: Likewise.
+
+2025-04-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/119175
+ * g++.dg/cpp2a/concepts-lambda23.C: New test.
+
+2025-04-10 Iain Sandoe <iain@sandoe.co.uk>
+
+ * lib/cobol.exp: Add libquadmath paths.
+
+2025-04-10 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/119399
+ * gcc.dg/vect/pr119399.c: New test.
+
+2025-04-10 Kito Cheng <kito.cheng@sifive.com>
+
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c: Include local
+ riscv_vector.h.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-10-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-10.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-7.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-8.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-9.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr110943.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr112431-21.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr114639-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr115068.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr117286.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr117544.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr117955.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr118872.c: Ditto.
+ * gcc.target/riscv/rvv/base/vlmul_ext-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/vssubu-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/vssubu-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/vwaddsub-1.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/pr111234.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/pr115214.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/vsetvl-24.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/pr116591.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/pr116592.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/pr118357.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/vsext.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/vzext.c: Ditto.
+
+2025-04-09 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/119574
+ * g++.dg/cpp2a/lambda-targ13.C: New test.
+ * g++.dg/cpp2a/lambda-targ13a.C: New test.
+ * g++.dg/cpp2a/lambda-targ13b.C: New test.
+
+2025-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/119664
+ * gcc.dg/pr119664.c: New test.
+
+2025-04-09 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/116595
+ * g++.target/aarch64/sve/pr116595.C: New test.
+
+2025-04-09 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/118309
+ * gdc.dg/debug/dwarf2/pr118309.d: New test.
+
+2025-04-09 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/119656
+ * gfortran.dg/optional_absent_13.f90: New test.
+
+2025-04-09 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/sat/sat_s_sub-1-i64.c: Update expected output.
+ * gcc.target/riscv/sat/sat_s_sub-2-i64.c: Likewise.
+ * gcc.target/riscv/sat/sat_s_sub-3-i64.c: Likewise.
+ * gcc.target/riscv/sat/sat_s_sub-4-i64.c: Likewise.
+
+2025-04-09 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/pr67215-1.c: Correctly escape
+ asterisk in scan-assembler dirctive.
+ * gcc.target/i386/pr67215-2.c: Ditto.
+
+2025-04-09 Jonathan Yong <10walls@gmail.com>
+
+ PR analyzer/113253
+ * gcc.dg/analyzer/deref-before-check-pr113253.c:
+ (ptrdiff_t): use stddef.h type.
+ (uintptr_t): ditto.
+ (EMACS_INT): ditto.
+ (set_marker_internal): Add dummy 0 to suppress -Wreturn-type.
+
+2025-04-09 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/rvv/autovec/pr117722.c: Adjust expected output.
+
+2025-04-09 Richard Biener <rguenther@suse.de>
+
+ PR rtl-optimization/119689
+ PR rtl-optimization/115568
+ * g++.target/i386/pr119689.C: New testcase.
+
+2025-04-09 Pan Li <pan2.li@intel.com>
+
+ Revert:
+ 2025-03-15 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c: Removed.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h: New test.
+
+2025-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/118674
+ * gcc.dg/cpp/pr118674.c: New test.
+
+2025-04-09 Robin Dapp <rdapp@ventanamicro.com>
+
+ * g++.target/riscv/rvv/autovec/pr116595.C: Add -mabi.
+
+2025-04-09 Robin Dapp <rdapp@ventanamicro.com>
+
+ PR middle-end/116595
+ * g++.target/riscv/rvv/autovec/pr116595.C: New test.
+
+2025-04-09 Paul Thomas <pault@gcc.gnu.org>
+ and Harald Anlauf <anlauf@gcc.gnu.org>
+
+ PR fortran/119460
+ * gfortran.dg/reduce_2.f90: Add test to check that deferred len
+ characters cannot slip through.
+ * gfortran.dg/reduce_3.f90: New test
+ * gfortran.dg/reduce_4.f90: New test
+
+2025-04-09 Tobias Burnus <tburnus@baylibre.com>
+
+ PR fortran/101602
+ * gfortran.dg/do_concurrent_8_f2023.f90: Update for removed 'sorry,
+ unimplemented'.
+ * gfortran.dg/do_concurrent_9.f90: Likewise.
+ * gfortran.dg/do_concurrent_all_clauses.f90: Likewise.
+ * gfortran.dg/do_concurrent_local_init.f90: Likewise.
+ * gfortran.dg/do_concurrent_locality_specs.f90: Likewise.
+ * gfortran.dg/do_concurrent_11.f90: New test.
+ * gfortran.dg/do_concurrent_12.f90: New test.
+ * gfortran.dg/do_concurrent_13.f90: New test.
+ * gfortran.dg/do_concurrent_14.f90: New test.
+ * gfortran.dg/do_concurrent_15.f90: New test.
+
+2025-04-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/118698
+ * g++.dg/cpp2a/concepts-lambda22.C: New test.
+
+2025-04-08 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.dg/guality/pr36728-3.c: Update XFAILs for aarch64.
+ * gcc.dg/guality/pr41353-1.c: Likewise.
+ * gcc.dg/guality/pr54693-2.c: Likewise.
+ * gcc.dg/guality/pr68860-1.c: Likewise.
+ * gcc.dg/guality/pr68860-2.c: Likewise.
+ * gcc.dg/guality/sra-1.c: Likewise.
+ * gcc.dg/guality/vla-1.c: Likewise.
+
+2025-04-08 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.dg/vect/pr99102.c: Force SVE when forcing the vector length.
+
+2025-04-08 Martin Uecker <uecker@tugraz.at>
+
+ PR c/119612
+ * gcc.dg/gnu23-tag-6.c: New test.
+ * gcc.dg/pr119612.c: New test.
+
+2025-04-08 Tobias Burnus <tburnus@baylibre.com>
+
+ PR middle-end/119662
+ * c-c++-common/gomp/append-args-interop.c: Update for fixed
+ GOMP_interop call.
+ * g++.dg/gomp/append-args-8.C: Likewise.
+ * gfortran.dg/gomp/append-args-interop.f90: Likewise.
+
+2025-04-08 Jason Merrill <jason@redhat.com>
+
+ PR c++/117530
+ * g++.dg/cpp2a/lambda-uneval27.C: New test.
+
+2025-04-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/119594
+ * gcc.dg/pr119594.c: New test.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/macros/mbe/macro6.rs: Remove call of undefined
+ function.
+ * rust/compile/nr2/exclude: Remove macros/mbe/macro6.rs.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/issue-2812.rs: Avoid multiple definition error.
+ * rust/compile/nr2/exclude: Remove issue-2812.rs.
+
+2025-04-08 Matty Kuhn <matty.kuhn.1@gmail.com>
+
+ * rust/compile/feature.rs: add an invalid empty feature to produce an error
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/invalid_label_name.rs: Adapt test to nr2.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/nr2/exclude: Remove test.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/undeclared_label.rs: Change test
+ expected string.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/nr2/exclude: Remove test from exclusion list.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/nr2/exclude: Remove passing test.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/nr2/compile.exp: Avoid absolute paths in output,
+ adjust phrasing of output, and avoid false XPASS output when
+ tests are run in parallel.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/nr2/exclude: Remove entry.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3647.rs: New test.
+
+2025-04-08 Arthur Cohen <arthur.cohen@embecosm.com>
+
+ * rust/compile/min_specialization1.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/nr2/exclude: nr2 is missing type path error
+ * rust/compile/issue-3643.rs: New test.
+ * rust/compile/issue-3646.rs: New test.
+ * rust/compile/issue-3654.rs: New test.
+ * rust/compile/issue-3663.rs: New test.
+ * rust/compile/issue-3671.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3667.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3656.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3625.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3648.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3657.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3665.rs: New test.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/nr2/exclude: Remove entries.
+
+2025-04-08 Ryutaro Okada <1015ryu88@gmail.com>
+
+ * rust/compile/enum_discriminant1.rs: New test.
+
+2025-04-08 Tejas Belagod <tejas.belagod@arm.com>
+
+ * gcc.target/aarch64/sve/gomp/gomp.exp: Test driver.
+ * gcc.target/aarch64/sve/gomp/target-device.c: New test.
+ * gcc.target/aarch64/sve/gomp/target-link.c: Likewise.
+ * gcc.target/aarch64/sve/gomp/target.c: Likewise.
+
+2025-04-08 Jin Ma <jinma@linux.alibaba.com>
+
+ * gcc.target/riscv/rvv/xtheadvector/vsext.c: New test.
+ * gcc.target/riscv/rvv/xtheadvector/vzext.c: New test.
+
+2025-04-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/119652
+ * g++.dg/cpp2a/constinit20.C: New test.
+
+2025-04-07 Thomas Schwinge <tschwinge@baylibre.com>
+
+ * gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c: Adjust.
+
+2025-04-07 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/118924
+ * g++.dg/tree-ssa/pr118924.C: New test.
+
+2025-04-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/119640
+ * gcc.dg/vect/pr119640.c: New testcase.
+
+2025-04-07 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/119556
+ * gcc.target/arm/short-vfp-1.c: Improve dg directives.
+
+2025-04-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/119614
+ * g++.dg/opt/pr119613.C: Change { c || c++11 } in obviously C++ only
+ test to just c++11.
+ * g++.dg/opt/pr119614.C: New test.
+
+2025-04-07 Richard Sandiford <richard.sandiford@arm.com>
+ Richard Biener <rguenther@suse.de>
+
+ * gcc.target/aarch64/popcnt-le-1.c: Account for commutativity of TST.
+ * gcc.target/aarch64/popcnt-le-3.c: Likewise AND.
+ * gcc.target/aarch64/pr100056.c: Revert previous patch.
+ * gcc.target/aarch64/sve/pred-not-gen-1.c: Likewise.
+ * gcc.target/aarch64/sve/pred-not-gen-4.c: Likewise.
+ * gcc.target/aarch64/sve/var_stride_2.c: Likewise.
+ * gcc.target/aarch64/sve/var_stride_4.c: Likewise.
+
+2025-04-06 Iain Sandoe <iain@sandoe.co.uk>
+
+ * lib/cobol.exp: Simplify the setting of COBOL_UNDER_TEST.
+
+2025-04-06 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/118626
+ * g++.dg/cpp2a/class-deduction-alias25a.C: New test.
+
+2025-04-06 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/118626
+ * g++.dg/cpp2a/class-deduction-alias25.C: New test.
+
+2025-04-05 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/118249
+ * g++.dg/cpp0x/constexpr-reinterpret2.C: Expect error at
+ call site of the non-constexpr functions.
+ * g++.dg/cpp23/constexpr-nonlit12.C: Likewise.
+ * g++.dg/cpp0x/constexpr-ref14.C: New test.
+
+2025-04-05 Iain Sandoe <iain@sandoe.co.uk>
+
+ * lib/cobol.exp: Conditionally add a path for libgcobol.spec.
+
+2025-04-05 Jason Merrill <jason@redhat.com>
+
+ PR c++/118629
+ * g++.dg/cpp0x/lambda/lambda-__func__3.C: New test.
+
+2025-04-04 Nathaniel Shead <nathanieloshead@gmail.com>
+
+ PR c++/119564
+ * g++.dg/modules/gc-3_a.C: New test.
+ * g++.dg/modules/gc-3_b.C: New test.
+
+2025-04-04 Nathaniel Shead <nathanieloshead@gmail.com>
+
+ PR c++/119608
+ * g++.dg/modules/pr119608_a.C: New test.
+ * g++.dg/modules/pr119608_b.C: New test.
+
+2025-04-04 Nathaniel Shead <nathanieloshead@gmail.com>
+
+ PR c++/119462
+ * g++.dg/modules/noexcept-3_a.C: New test.
+ * g++.dg/modules/noexcept-3_b.C: New test.
+ * g++.dg/modules/noexcept-3_c.C: New test.
+
+2025-04-04 Bob Dubner <rdubner@symas.com>
+
+ * cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.cob: New testcase.
+ * cobol.dg/group2/FUNCTION_ABS.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ACOS.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ANNUITY.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ASIN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ATAN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_BIGGER-POINTER.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_BYTE-LENGTH.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_CHAR.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_COMBINED-DATETIME.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_CONCAT___CONCATENATE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_CONCAT_with_reference_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_COS.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_CURRENT-DATE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_E.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_EXCEPTION-FILE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_EXP10.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_EXP.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FACTORIAL.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-DATE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-DATETIME.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-DATETIME_with_ref_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-DATE_with_ref_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-TIME_DP.COMMA.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-TIME_with_ref_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_FRACTION-PART.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_HEX-OF.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_HIGHEST-ALGEBRAIC.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_INTEGER.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_INTEGER-OF-DATE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_INTEGER-OF-DAY.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_INTEGER-OF-FORMATTED-DATE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_INTEGER-PART.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LENGTH__1_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LENGTH__2_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-COMPARE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-DATE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-TIME.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOG10.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOG.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOWER-CASE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOWER-CASE_with_reference_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_LOWEST-ALGEBRAIC.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MAX.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MEAN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MEDIAN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MIDRANGE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MIN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MOD__invalid_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MODULE-NAME.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_MOD__valid_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_NUMVAL-C.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_NUMVAL-C_DP.COMMA.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_NUMVAL.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_NUMVAL-F.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ORD.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ORD-MAX.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_ORD-MIN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_PI.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_PRESENT-VALUE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_RANDOM.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_RANGE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_REM__invalid_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_REM__valid_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_REVERSE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_REVERSE_with_reference_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SECONDS-FROM-FORMATTED-TIME.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SECONDS-PAST-MIDNIGHT.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SIGN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SIN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SQRT.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SUBSTITUTE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SUBSTITUTE_with_reference_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_SUM.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TAN.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__2_.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_additional.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_DP.COMMA.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_dates.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_datetimes.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_times.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-NUMVAL-C.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-NUMVAL-F.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TRIM.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_TRIM_zero_length.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_UPPER-CASE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_UPPER-CASE_with_reference_modding.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_VARIANCE.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob: Likewise.
+ * cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob: Likewise.
+ * cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob: Likewise.
+ * cobol.dg/group2/Program-to-program_parameters_and_retvals.cob: Likewise.
+ * cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob: Likewise.
+ * cobol.dg/group2/Repository_functions_clause.cob: Likewise.
+ * cobol.dg/group2/UDF_fibonacci_recursion.cob: Likewise.
+ * cobol.dg/group2/UDF_in_COMPUTE.cob: Likewise.
+ * cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.cob: Likewise.
+ * cobol.dg/group2/UDF_with_recursion.cob: Likewise.
+ * cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out: New known-good file.
+ * cobol.dg/group2/FUNCTION_ABS.out: Likewise.
+ * cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.out: Likewise.
+ * cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out: Likewise.
+ * cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.out: Likewise.
+ * cobol.dg/group2/FUNCTION_BIGGER-POINTER.out: Likewise.
+ * cobol.dg/group2/FUNCTION_BYTE-LENGTH.out: Likewise.
+ * cobol.dg/group2/FUNCTION_EXCEPTION-FILE.out: Likewise.
+ * cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.out: Likewise.
+ * cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.out: Likewise.
+ * cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.out: Likewise.
+ * cobol.dg/group2/FUNCTION_HEX-OF.out: Likewise.
+ * cobol.dg/group2/FUNCTION_LENGTH__2_.out: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-DATE.out: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.out: Likewise.
+ * cobol.dg/group2/FUNCTION_LOCALE-TIME.out: Likewise.
+ * cobol.dg/group2/FUNCTION_MAX.out: Likewise.
+ * cobol.dg/group2/FUNCTION_MEAN.out: Likewise.
+ * cobol.dg/group2/FUNCTION_MEDIAN.out: Likewise.
+ * cobol.dg/group2/FUNCTION_MIDRANGE.out: Likewise.
+ * cobol.dg/group2/FUNCTION_MIN.out: Likewise.
+ * cobol.dg/group2/FUNCTION_MODULE-NAME.out: Likewise.
+ * cobol.dg/group2/FUNCTION_NUMVAL-F.out: Likewise.
+ * cobol.dg/group2/FUNCTION_ORD-MAX.out: Likewise.
+ * cobol.dg/group2/FUNCTION_ORD-MIN.out: Likewise.
+ * cobol.dg/group2/FUNCTION_ORD.out: Likewise.
+ * cobol.dg/group2/FUNCTION_PRESENT-VALUE.out: Likewise.
+ * cobol.dg/group2/FUNCTION_SUBSTITUTE.out: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.out: Likewise.
+ * cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.out: Likewise.
+ * cobol.dg/group2/FUNCTION_TRIM.out: Likewise.
+ * cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.out: Likewise.
+ * cobol.dg/group2/FUNCTION_TRIM_zero_length.out: Likewise.
+ * cobol.dg/group2/Program-to-program_parameters_and_retvals.out: Likewise.
+ * cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out: Likewise.
+ * cobol.dg/group2/Repository_functions_clause.out: Likewise.
+ * cobol.dg/group2/UDF_fibonacci_recursion.out: Likewise.
+ * cobol.dg/group2/UDF_in_COMPUTE.out: Likewise.
+ * cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.out: Likewise.
+ * cobol.dg/group2/UDF_with_recursion.out: Likewise.
+
+2025-04-04 Jason Merrill <jason@redhat.com>
+
+ PR c++/99546
+ PR c++/113925
+ PR c++/106976
+ PR c++/109961
+ PR c++/117336
+ * g++.dg/cpp2a/lambda-requires2.C: New test.
+ * g++.dg/cpp2a/lambda-requires3.C: New test.
+ * g++.dg/cpp2a/lambda-requires4.C: New test.
+ * g++.dg/cpp2a/lambda-requires5.C: New test.
+
+2025-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR gcov-profile/119618
+ * c-c++-common/pr119618.c: New test.
+
+2025-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/119616
+ * c-c++-common/pr119616.c: New test.
+
+2025-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR middle-end/119613
+ * g++.dg/opt/pr119613.C: New test.
+
+2025-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/115910
+ * gcc.target/i386/pr115910.c: New test.
+
+2025-04-04 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/117849
+ * g++.dg/cpp2a/concepts-requires41.C: New test.
+
+2025-04-04 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR ipa/119599
+ * gcc.dg/torture/pr119599-1.c: New test.
+ * gcc.dg/builtin-apply5.c: New test.
+
+2025-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/119391
+ * g++.dg/cpp/pr119391.C: New test.
+
+2025-04-04 Richard Earnshaw <rearnsha@arm.com>
+
+ * gcc.target/arm/mve/mve.exp: Save dg-do-what-default before
+ changing it. Restore it once done.
+
+2025-04-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/119614
+ * c-c++-common/pr119614-1.c: New test.
+ * c-c++-common/pr119614-2.c: New test.
+ * c-c++-common/pr119614-3.c: New test.
+
+2025-04-03 Thomas Schwinge <tschwinge@baylibre.com>
+
+ PR target/119573
+ * gcc.c-torture/compile/pr46534.c: Don't 'dg-skip-if' nvptx.
+ * gcc.target/nvptx/decl.c: Adjust.
+
+2025-04-03 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/cpp2a/spaceship-rewrite6.C: New test.
+
+2025-04-03 Victor Do Nascimento <victor.donascimento@arm.com>
+
+ PR testsuite/118597
+ * gcc.dg/vect/vect-fncall-mask.c: Update test directives.
+
+2025-04-03 Bob Dubner <rdubner@symas.com>
+
+ * cobol.dg/group2/INSPECT_BACKWARD_REPLACING_LEADING.cob: New testcase.
+ * cobol.dg/group2/INSPECT_BACKWARD_REPLACING_TRAILING.cob: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_simple_CONVERTING.cob: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_simple_REPLACING.cob: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_simple_TALLYING.cob: Likewise.
+ * cobol.dg/group2/INSPECT_CONVERTING_NULL.cob: Likewise.
+ * cobol.dg/group2/INSPECT_CONVERTING_TO_figurative_constant.cob: Likewise.
+ * cobol.dg/group2/INSPECT_CONVERTING_TO_figurative_constants.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_1.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_2.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_3.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_4.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_5.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_5-f.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_5-r.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_6.cob: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_7.cob: Likewise.
+ * cobol.dg/group2/INSPECT_No_repeat_conversion_check.cob: Likewise.
+ * cobol.dg/group2/INSPECT_REPLACING_figurative_constant.cob: Likewise.
+ * cobol.dg/group2/INSPECT_REPLACING_LEADING_ZEROS_BY_SPACES.cob: Likewise.
+ * cobol.dg/group2/INSPECT_TALLYING_AFTER.cob: Likewise.
+ * cobol.dg/group2/INSPECT_TALLYING_BEFORE.cob: Likewise.
+ * cobol.dg/group2/INSPECT_TALLYING_REPLACING_ISO_Example.cob: Likewise.
+ * cobol.dg/group2/INSPECT_TRAILING.cob: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_REPLACING_LEADING.out: New known-good result.
+ * cobol.dg/group2/INSPECT_BACKWARD_REPLACING_TRAILING.out: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_simple_CONVERTING.out: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_simple_REPLACING.out: Likewise.
+ * cobol.dg/group2/INSPECT_BACKWARD_simple_TALLYING.out: Likewise.
+ * cobol.dg/group2/INSPECT_CONVERTING_TO_figurative_constants.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_1.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_2.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_3.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_4.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_5-f.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_5.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_5-r.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_6.out: Likewise.
+ * cobol.dg/group2/INSPECT_ISO_Example_7.out: Likewise.
+ * cobol.dg/group2/INSPECT_TALLYING_REPLACING_ISO_Example.out: Likewise.
+ * cobol.dg/group2/INSPECT_TRAILING.out: Likewise.
+
+2025-04-03 Andrew Pinski <quic_apinski@quicinc.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/119563
+ * g++.dg/cpp0x/pr119563.C: New test.
+ * g++.dg/cpp/embed-26.C: New test.
+
+2025-04-03 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * gcc.dg/guality/pr90074.c: Remove xfail for aarch64.
+ * gcc.dg/guality/pr90716.c: Likewise.
+
+2025-04-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.target/i386/pr111673.c (dg-options): Add
+ -fasynchronous-unwind-tables -fdwarf2-cfi-asm.
+ * gcc.target/i386/pr82142a.c: Likewise.
+ * gcc.target/i386/pr82142b.c (dg-options): Add -mno-stackrealign
+ -fasynchronous-unwind-tables -fdwarf2-cfi-asm.
+
+2025-04-03 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.target/riscv/rvv/base/vwaddsub-1.c: Require rv64.
+
+2025-04-03 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.target/riscv/mcpu-xiangshan-nanhu.c: Skip on non-rv64.
+
+2025-04-03 Alexandre Oliva <oliva@adacore.com>
+
+ PR tree-optimization/113281
+ * gcc.dg/vect/costmodel/riscv/rvv/pr113281-1.c: XFAIL.
+ * gcc.dg/vect/costmodel/riscv/rvv/pr113281-2.c: Likewise.
+ * gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c: Likewise.
+
+2025-04-03 Alexandre Oliva <oliva@adacore.com>
+
+ * gcc.dg/tree-ssa/ssa-dom-cse-2.c: XFAIL on riscv lp64.
+
+2025-04-03 Hongyu Wang <hongyu.wang@intel.com>
+
+ PR target/119539
+ * gcc.target/i386/apx-nf-pr119539.c: New test.
+
2025-04-02 Jin Ma <jinma@linux.alibaba.com>
* gcc.target/riscv/zba-shNadd-09.c: New test.
diff --git a/gcc/testsuite/c-c++-common/analyzer/realloc-1.c b/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
index 04925cf..0bb846c 100644
--- a/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
+++ b/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
@@ -92,5 +92,5 @@ void test_9 (void *p)
void test_10 (char *s, int n)
{
__builtin_realloc(s, n); /* { dg-warning "ignoring return value of '__builtin_realloc' declared with attribute 'warn_unused_result'" "" { target c } } */
- /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )?unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */
+ /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )*unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */
} /* { dg-warning "leak" } */
diff --git a/gcc/testsuite/c-c++-common/gomp/append-args-interop.c b/gcc/testsuite/c-c++-common/gomp/append-args-interop.c
index 1211450..e9b1ed4 100644
--- a/gcc/testsuite/c-c++-common/gomp/append-args-interop.c
+++ b/gcc/testsuite/c-c++-common/gomp/append-args-interop.c
@@ -39,6 +39,6 @@ test (int *a, int *b)
return x;
}
-/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 2, interopobjs\.\[0-9\]+, tgt_tgtsync\.\[0-9\]+," "gimple" } } */
-/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 2, interopobjs\.\[0-9\]+," "gimple" } } */
+/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 2, &interopobjs\.\[0-9\]+, &tgt_tgtsync\.\[0-9\]+," "gimple" } } */
+/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 2, &interopobjs\.\[0-9\]+," "gimple" } } */
/* { dg-final { scan-tree-dump "repl1 \\(obj1, interop\.\[0-9\]+, interop\.\[0-9\]+\\)" "gimple" } } */
diff --git a/gcc/testsuite/c-c++-common/pr119614-1.c b/gcc/testsuite/c-c++-common/pr119614-1.c
new file mode 100644
index 0000000..89105a3
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr119614-1.c
@@ -0,0 +1,28 @@
+/* PR tree-optimization/119614 */
+/* { dg-do compile { target musttail } } */
+/* { dg-options "-O2" } */
+
+volatile int v;
+
+[[gnu::noinline]] const char *
+foo (int x)
+{
+ v += x;
+ return 0;
+}
+
+const char *
+bar (int x)
+{
+ if (x == 42)
+ [[gnu::musttail]] return foo (42);
+ [[gnu::musttail]] return foo (32);
+}
+
+const char *
+baz (int x)
+{
+ if (x == 5)
+ return foo (42);
+ return foo (32);
+}
diff --git a/gcc/testsuite/c-c++-common/pr119614-2.c b/gcc/testsuite/c-c++-common/pr119614-2.c
new file mode 100644
index 0000000..8833eee
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr119614-2.c
@@ -0,0 +1,28 @@
+/* PR tree-optimization/119614 */
+/* { dg-do compile { target musttail } } */
+/* { dg-options "-O2" } */
+
+volatile int v;
+
+[[gnu::noinline]] const char *
+foo (int x)
+{
+ v += x;
+ return (const char *) -42;
+}
+
+const char *
+bar (int x)
+{
+ if (x == 42)
+ [[gnu::musttail]] return foo (42);
+ [[gnu::musttail]] return foo (32);
+}
+
+const char *
+baz (int x)
+{
+ if (x == 5)
+ return foo (42);
+ return foo (32);
+}
diff --git a/gcc/testsuite/c-c++-common/pr119614-3.c b/gcc/testsuite/c-c++-common/pr119614-3.c
new file mode 100644
index 0000000..59ed36b
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr119614-3.c
@@ -0,0 +1,28 @@
+/* PR tree-optimization/119614 */
+/* { dg-do compile { target musttail } } */
+/* { dg-options "-O2" } */
+
+volatile int v;
+
+[[gnu::noinline]] double
+foo (int x)
+{
+ v += x;
+ return 0.5;
+}
+
+double
+bar (int x)
+{
+ if (x == 42)
+ [[gnu::musttail]] return foo (42);
+ [[gnu::musttail]] return foo (32);
+}
+
+double
+baz (int x)
+{
+ if (x == 5)
+ return foo (42);
+ return foo (32);
+}
diff --git a/gcc/testsuite/c-c++-common/pr119616.c b/gcc/testsuite/c-c++-common/pr119616.c
new file mode 100644
index 0000000..5ffdb8c
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr119616.c
@@ -0,0 +1,23 @@
+/* PR tree-optimization/119616 */
+/* { dg-do compile { target external_musttail } } */
+/* { dg-options "-O2" } */
+
+int foo (int *);
+int bar (int);
+
+int
+baz (int x)
+{
+ if (!x)
+ [[gnu::musttail]] return bar (x);
+ return foo (&x);
+}
+
+int
+qux (int x)
+{
+ if (!x)
+ [[gnu::musttail]] return bar (x);
+ foo (&x);
+ return 1;
+}
diff --git a/gcc/testsuite/c-c++-common/pr119618.c b/gcc/testsuite/c-c++-common/pr119618.c
new file mode 100644
index 0000000..a56e669
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr119618.c
@@ -0,0 +1,21 @@
+/* PR gcov-profile/119618 */
+/* { dg-do compile { target musttail } } */
+/* { dg-options "-fcompare-debug -fprofile-generate -O1" } */
+/* { dg-require-profiling "-fprofile-generate" } */
+
+struct S { char s; };
+int foo (void);
+int *(*fn) (void);
+
+int *
+bar (void)
+{
+ if (foo ())
+ return 0;
+ {
+ struct S s;
+ do
+ [[gnu::musttail]] return fn ();
+ while (0);
+ }
+}
diff --git a/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob b/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob
index 7a404fd..be58878 100644
--- a/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob
+++ b/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob
@@ -1,5 +1,5 @@
*> { dg-do run }
- *> { dg-set-target-env-var COB_CURRENT_DATE "2020/06/12 18:45:22" }
+ *> { dg-set-target-env-var GCOBOL_CURRENT_DATE "2020/06/12 18:45:22" }
IDENTIFICATION DIVISION.
PROGRAM-ID. prog.
diff --git a/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob b/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob
index 6014220..665787d 100644
--- a/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob
+++ b/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob
@@ -1,5 +1,5 @@
*> { dg-do run }
- *> { dg-set-target-env-var COB_CURRENT_DATE "2015/04/05 18:45:22" }
+ *> { dg-set-target-env-var GCOBOL_CURRENT_DATE "2015/04/05 18:45:22" }
*> { dg-output-file "group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.out" }
IDENTIFICATION DIVISION.
diff --git a/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob
new file mode 100644
index 0000000..99690da
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Dynamic_reference_modification.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9.
+ PROCEDURE DIVISION.
+ MOVE 1 TO I.
+ DISPLAY X(I:1)
+ END-DISPLAY.
+ MOVE 4 TO I.
+ DISPLAY X(I:1)
+ END-DISPLAY.
+ MOVE 1 TO I.
+ DISPLAY X(1:I)
+ END-DISPLAY.
+ MOVE 4 TO I.
+ DISPLAY X(1:I)
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out
new file mode 100644
index 0000000..42a4b69
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out
@@ -0,0 +1,5 @@
+a
+d
+a
+abcd
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.cob
new file mode 100644
index 0000000..3f4049b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_ABS.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9(4)V9(4) VALUE -1.2345.
+ PROCEDURE DIVISION.
+ COMPUTE X = FUNCTION ABS( X )
+ DISPLAY X
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.out
new file mode 100644
index 0000000..ab39cfe
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ABS.out
@@ -0,0 +1,2 @@
++0001.2345
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ACOS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ACOS.cob
new file mode 100644
index 0000000..73e192f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ACOS.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ACOS ( -0.2345 ) TO Z.
+ IF Z NOT = 1.807500521108243435101500438523210
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.cob
new file mode 100644
index 0000000..276c33f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_ALL_INTRINSIC_simple_test.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. phase0.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION ALL INTRINSIC.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 work-string pic X(80) VALUE " ABC ".
+ PROCEDURE DIVISION.
+ DISPLAY """" TRIM(work-string) """"
+ goback.
+ end program phase0.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.out
new file mode 100644
index 0000000..7b9bc93
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ALL_INTRINSIC_simple_test.out
@@ -0,0 +1,2 @@
+"ABC"
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ANNUITY.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ANNUITY.cob
new file mode 100644
index 0000000..29049dd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ANNUITY.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ANNUITY ( 3, 5 ) TO Z.
+ IF Z NOT = 3.002932551319648093841642228739003
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ASIN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ASIN.cob
new file mode 100644
index 0000000..b364a40
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ASIN.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ASIN ( -0.2345 ) TO Y.
+ IF Y NOT = -0.236704194313346815870178746883458
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ATAN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ATAN.cob
new file mode 100644
index 0000000..1f884ce
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ATAN.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ATAN ( 1 ) TO Y.
+ IF Y NOT = 0.785398163397448309615660845819875
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.cob
new file mode 100644
index 0000000..70b40ba
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.cob
@@ -0,0 +1,40 @@
+ *> { dg-do run }
+ *> { dg-options "-dialect ibm" }
+ *> { dg-output-file "group2/FUNCTION_BIGGER-POINTER.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 N PIC S9(8) COMP-5 value 0.
+ 01 P REDEFINES N POINTER.
+ 01 FILLER.
+ 05 X PIC A(4) VALUE "ABC".
+ 05 E REDEFINES X PIC A(1) OCCURS 4.
+ LINKAGE SECTION.
+ 77 B PIC A.
+
+ PROCEDURE DIVISION.
+ set P to address of E(1).
+
+ display FUNCTION trim(x) '.'
+
+ set address of B to p.
+ perform until B = SPACE
+ display B no advancing
+ set p up by 1
+ set address of B to p
+ end-perform
+ display '.'
+
+ set P to address of E(1)
+ set address of B to p
+ perform until B = SPACES
+ display B no advancing
+ add 1 to N
+ set address of B to p
+ end-perform
+ display '.'
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.out
new file mode 100644
index 0000000..d31e83b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER.out
@@ -0,0 +1,4 @@
+ABC.
+ABC.
+ABC.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.cob
new file mode 100644
index 0000000..d6d04d1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+ *> { dg-options "-dialect ibm" }
+ *> { dg-output-file "group2/FUNCTION_BIGGER-POINTER__2_.out" }
+
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 n4 pic s9(8) comp-5 value 0.
+ 01 p4 redefines n4 pointer.
+ 01 n8 pic s9(16) comp-5 value 0.
+ 01 p8 redefines n8 pointer.
+ procedure division.
+ move -1 to n8
+ set p4 to p8
+ display "P4 and P8 before: " p4 space p8
+ display "Increment N4 and N8"
+ add 1 to n4 n8
+ display "P4 and P8 after: " p4 space p8
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.out
new file mode 100644
index 0000000..b15a754
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_BIGGER-POINTER__2_.out
@@ -0,0 +1,4 @@
+P4 and P8 before: 0xffffffffffffffff 0xffffffffffffffff
+Increment N4 and N8
+P4 and P8 after: 0x0000000000000000 0x0000000000000000
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.cob
new file mode 100644
index 0000000..9a5f384
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.cob
@@ -0,0 +1,20 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_BYTE-LENGTH.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4).
+ 01 TEST-FLD PIC S9(04)V9(08).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION BYTE-LENGTH ( TEST-FLD ) TO TEST-FLD.
+ DISPLAY "BYTE-LENGTH of PIC S9(04)V9(08) is " TEST-FLD
+ MOVE FUNCTION BYTE-LENGTH ( X ) TO TEST-FLD.
+ DISPLAY "BYTE-LENGTH of PIC X(4) is " TEST-FLD
+ MOVE FUNCTION BYTE-LENGTH ( '00128' ) TO TEST-FLD
+ DISPLAY "BYTE-LENGTH of PIC '00128' is " TEST-FLD
+ MOVE FUNCTION BYTE-LENGTH ( x'a0' ) TO TEST-FLD
+ DISPLAY "BYTE-LENGTH of PIC x'a0' is " TEST-FLD
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.out
new file mode 100644
index 0000000..64ad515
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_BYTE-LENGTH.out
@@ -0,0 +1,5 @@
+BYTE-LENGTH of PIC S9(04)V9(08) is +0012.00000000
+BYTE-LENGTH of PIC X(4) is +0004.00000000
+BYTE-LENGTH of PIC '00128' is +0005.00000000
+BYTE-LENGTH of PIC x'a0' is +0001.00000000
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_CHAR.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_CHAR.cob
new file mode 100644
index 0000000..955cc51
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_CHAR.cob
@@ -0,0 +1,29 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9(4)V9(4) VALUE 108.
+ 01 TEST-FLD.
+ 05 TEST-DATA PIC X(01).
+ 88 VALID-DATA VALUE 'k'.
+ 05 TEST-UNSET PIC X VALUE '_'.
+ 88 VALID-UNSET VALUE '_'.
+ PROCEDURE DIVISION.
+ STRING FUNCTION CHAR ( X )
+ DELIMITED BY SIZE
+ INTO TEST-FLD
+ END-STRING.
+ EVALUATE TRUE
+ WHEN NOT VALID-UNSET
+ DISPLAY "FUNCTION result too long"
+ END-DISPLAY
+ WHEN VALID-DATA
+ CONTINUE
+ WHEN OTHER
+ DISPLAY TEST-DATA
+ END-DISPLAY
+ END-EVALUATE.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_COMBINED-DATETIME.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_COMBINED-DATETIME.cob
new file mode 100644
index 0000000..3f9c6e1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_COMBINED-DATETIME.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(04)V9(08).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION COMBINED-DATETIME ( 987, 345.6 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 987.003456
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT___CONCATENATE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT___CONCATENATE.cob
new file mode 100644
index 0000000..d982432
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT___CONCATENATE.cob
@@ -0,0 +1,36 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC X(4).
+ 01 TEST-FLD.
+ 05 TEST-DATA PIC X(14).
+ 88 VALID-DATA VALUE 'defxabczz55666'.
+ 05 TEST-UNSET PIC X VALUE '_'.
+ 88 VALID-UNSET VALUE '_'.
+ PROCEDURE DIVISION.
+ MOVE "defx" TO Y.
+ STRING FUNCTION CONCAT ( Y "abc" "zz" "55" "666" )
+ DELIMITED BY SIZE
+ INTO TEST-FLD
+ END-STRING.
+ EVALUATE TRUE
+ WHEN NOT VALID-UNSET
+ DISPLAY "FUNCTION result too long"
+ END-DISPLAY
+ WHEN TEST-DATA
+ <> FUNCTION CONCAT ( Y "abc" "zz" "55" "666" )
+ DISPLAY "CONCAT issue, '" TEST-DATA
+ "' vs. '"
+ FUNCTION CONCAT ( Y "abc" "zz" "55" "666" ) "'"
+ END-DISPLAY
+ WHEN VALID-DATA
+ CONTINUE
+ WHEN OTHER
+ DISPLAY TEST-DATA
+ END-DISPLAY
+ END-EVALUATE.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT_with_reference_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT_with_reference_modding.cob
new file mode 100644
index 0000000..98f21c3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_CONCAT_with_reference_modding.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC X(4).
+ 01 TEST-FLD PIC X(9) VALUE SPACES.
+ PROCEDURE DIVISION.
+ MOVE 'defx' TO Y.
+ MOVE FUNCTION CONCAT
+ ( Y "abc" "zz" "55" "666" ) (2 : 9)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 'efxabczz5'
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_COS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_COS.cob
new file mode 100644
index 0000000..6651b9d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_COS.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION COS ( -0.2345 ) TO Y.
+ IF Y NOT = 0.972630641256258184713416962414561
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob
new file mode 100644
index 0000000..429f247
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_CURRENT-DATE.cob
@@ -0,0 +1,62 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD.
+ 02 WS-YEAR PIC 9(04).
+ 88 VALID-YEAR VALUE 1980 THRU 9999.
+ 02 WS-MONTH PIC 9(02).
+ 88 VALID-MONTH VALUE 01 THRU 12.
+ 02 WS-DAY PIC 9(02).
+ 88 VALID-DAY VALUE 01 THRU 31.
+ 02 WS-HOUR PIC 9(02).
+ 88 VALID-HOUR VALUE 00 THRU 23.
+ 02 WS-MIN PIC 9(02).
+ 88 VALID-MIN VALUE 00 THRU 59.
+ 02 WS-SEVALIDD PIC 9(02).
+ 88 VALID-SEC VALUE 00 THRU 59.
+ 02 WS-HUNDSEC PIC 9(02).
+ 88 VALID-HUNDSEC VALUE 00 THRU 99.
+ 02 WS-GREENW PIC X.
+ 88 VALID-GREENW VALUE "-", "+", "0".
+ 88 ZERO-GREENW VALUE "0".
+ 02 WS-OFFSET PIC 9(02).
+ 88 VALID-OFFSET VALUE 00 THRU 13.
+ 88 ZERO-OFFSET VALUE 00.
+ 02 WS-OFFSET2 PIC 9(02).
+ 88 VALID-OFFSET2 VALUE 00 THRU 59.
+ 88 ZERO-OFFSET2 VALUE 00.
+ 02 WS-UNSET PIC X VALUE '_'.
+ 88 VALID-UNSET VALUE '_'.
+ PROCEDURE DIVISION.
+ STRING FUNCTION CURRENT-DATE
+ DELIMITED BY SIZE
+ INTO TEST-FLD
+ END-STRING.
+ EVALUATE TRUE
+ WHEN NOT VALID-UNSET
+ DISPLAY "FUNCTION result too long"
+ END-DISPLAY
+ WHEN VALID-YEAR AND
+ VALID-MONTH AND
+ VALID-DAY AND
+ VALID-HOUR AND
+ VALID-MIN AND
+ VALID-SEC AND
+ VALID-HUNDSEC AND
+ VALID-GREENW AND
+ VALID-OFFSET AND
+ VALID-OFFSET2 AND
+ VALID-UNSET AND
+ ((NOT ZERO-GREENW) OR (ZERO-OFFSET AND ZERO-OFFSET2))
+ CONTINUE
+ WHEN OTHER
+ DISPLAY "CURRENT-DATE with wrong format: "
+ TEST-FLD (01:21)
+ END-DISPLAY
+ END-EVALUATE.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob
new file mode 100644
index 0000000..708aa96
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-OF-INTEGER.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION DATE-OF-INTEGER ( 146000 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 20000925
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob
new file mode 100644
index 0000000..5b2bd43
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE-TO-YYYYMMDD.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION DATE-TO-YYYYMMDD ( 981002, -10, 1994 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 018981002
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
new file mode 100644
index 0000000..cc2a4e1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
@@ -0,0 +1,334 @@
+ *> { dg-do run }
+
+ identification division.
+ program-id. test.
+ *> Tests all the DATE and TIME functions
+ *>
+ *> The various functions are used to test each other.
+ *>
+ *> COMBINED-DATETIME OK
+ *> CURRENT_DATE OK
+ *> DATE-OF-INTEGER OK
+ *> DATE-TO-YYYYMMDD OK
+ *> DAY-OF-INTEGER OK
+ *> DAY-TO-YYYYDDD OK
+ *> FORMATTED-CURRENT-DATE OK
+ *> FORMATTED-DATE OK
+ *> FORMATTED-DATETIME OK
+ *> FORMATTED-TIME OK
+ *> INTEGER-OF-DATE OK
+ *> INTEGER-OF-DAY OK
+ *> INTEGER-OF-FORMATTED-DATE OK
+ *> SECONDS-FROM-FORMATTED-TIME OK
+ *> SECONDS-PAST-MIDNIGHT OK
+ *> TEST-DATE-YYYYMMDD OK
+ *> TEST-DAY-YYYYDDD OK
+ *> TEST-FORMATTED-DATETIME OK
+ *>
+ data division.
+ working-storage section.
+
+ 01 checking pic x(80).
+ 01 should-be pic x(32).
+ 01 but-is pic x(32).
+ 01 but-is-n redefines but-is pic 99999999.999999.
+ 01 but-is-integer_part pic 99999.
+
+ 01 jd1601 pic 9(7).
+ 01 jd9999 pic 9(7).
+ 01 jd pic s9(7).
+
+ 01 integer-date pic s9(7).
+ 01 integer-result pic 99.
+ 01 standard-date-form pic 9(8).
+ 01 julian-date-form PIC 9(8).
+
+ 01 date1.
+ 02 YYYY pic 9999.
+ 02 MM pic 99.
+ 02 DD pic 99.
+ 01 date2.
+ 02 YYYY pic 9999.
+ 02 filler pic x value "-".
+ 02 MM pic 99.
+ 02 filler pic x value "-".
+ 02 DD pic 99.
+ 01 date3.
+ 02 YYYY pic 9999.
+ 02 DDD pic 999.
+ 01 date4.
+ 02 YYYY pic 9999.
+ 02 filler pic x value "-".
+ 02 DDD pic 999.
+ 01 date5.
+ 02 YYYY pic 9999.
+ 02 filler pic x value "W".
+ 02 ww pic 99.
+ 02 d pic 9.
+ 01 date6.
+ 02 YYYY pic 9999.
+ 02 filler pic xx value "-W".
+ 02 ww pic 99.
+ 02 filler pic x value "-".
+ 02 d pic 9.
+
+ 01 yymmdd.
+ 02 YY pic 99.
+ 02 MM pic 99.
+ 02 DD pic 99.
+
+ 01 minus10 pic s99 value -10.
+
+ 01 forced_date_n pic X(64) VALUE Z"GCOBOL_CURRENT_DATE".
+ 01 forced_date_v pic X(64) VALUE Z"1945/06/01 12:34:56".
+
+ procedure division.
+ CALL "setenv" using forced_date_n, forced_date_v
+
+ move "SECONDS-PAST-MIDNIGHT" to checking
+ move "45296" to should-be
+ MOVE FUNCTION SECONDS-PAST-MIDNIGHT to but-is-integer_part
+ move but-is-integer_part to but-is
+ perform checkit
+
+ *> Establish the initial date integer
+ move "integer-of-date" to checking
+ move function integer-of-date(19000101) to jd1601
+ move "integer-of-date(19000101)" to checking
+ move 0109208 to should-be
+ move jd1601 to but-is
+ perform checkit
+
+ *> Establish the final date integer
+ move "integer-of-date" to checking
+ move function integer-of-date(21011231) to jd9999
+ move "integer-of-date(21001231)" to checking
+ move 0182986 to should-be
+ move jd9999 to but-is
+ perform checkit
+
+ *> We are going to do the following tests over all valid dates:
+ perform varying jd from jd1601 by 1 until jd > jd9999
+
+ *> Convert JD to all six DATE types:
+ move FUNCTION FORMATTED-DATE("YYYYMMDD" jd) TO date1
+ move FUNCTION FORMATTED-DATE("YYYY-MM-DD" jd) TO date2
+ move FUNCTION FORMATTED-DATE("YYYYDDD" jd) TO date3
+ move FUNCTION FORMATTED-DATE("YYYY-DDD" jd) TO date4
+ move FUNCTION FORMATTED-DATE("YYYYWwwD" jd) TO date5
+ move FUNCTION FORMATTED-DATE("YYYY-Www-D" jd) TO date6
+
+ *> Test the routines that check DATE types
+ move zero to should-be
+ move FUNCTION TEST-FORMATTED-DATETIME("YYYYMMDD" date1) TO but-is
+ move "TEST-FORMATTED-DATETIME(""YYYYMMDD"" date1)" to checking
+ perform checkit
+ move FUNCTION TEST-FORMATTED-DATETIME("YYYY-MM-DD" date2) TO but-is
+ move "TEST-FORMATTED-DATETIME(""YYYY-MM-DD"" date2)" to checking
+ perform checkit
+ move FUNCTION TEST-FORMATTED-DATETIME("YYYYDDD" date3) TO but-is
+ move "TEST-FORMATTED-DATETIME(""YYYYDDD"" date3)" to checking
+ perform checkit
+ move FUNCTION TEST-FORMATTED-DATETIME("YYYY-DDD" date4) TO but-is
+ move "TEST-FORMATTED-DATETIME(""YYYY-DDD"" date4)" to checking
+ perform checkit
+ move FUNCTION TEST-FORMATTED-DATETIME("YYYYWwwD" date5) TO but-is
+ move "TEST-FORMATTED-DATETIME(""YYYYWwwD"" date5)" to checking
+ perform checkit
+ move FUNCTION TEST-FORMATTED-DATETIME("YYYY-Www-D" date6) TO but-is
+ move "TEST-FORMATTED-DATETIME(""YYYY-Www-D"" date6)" to checking
+ perform checkit
+
+ *> Test the routines that extract the integer date
+
+ move function INTEGER-OF-FORMATTED-DATE("YYYYMMDD" date1) TO integer-date
+ move "INTEGER-OF-FORMATTED-DATE(""YYYYMMDD"" date1)" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function INTEGER-OF-FORMATTED-DATE("YYYY-MM-DD" date2) TO integer-date
+ move "INTEGER-OF-FORMATTED-DATE(""YYYY-MM-DD"" date2)" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function INTEGER-OF-FORMATTED-DATE("YYYYDDD" date3) TO integer-date
+ move "INTEGER-OF-FORMATTED-DATE(""YYYYDDD"" date3)" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function INTEGER-OF-FORMATTED-DATE("YYYY-DDD" date4) TO integer-date
+ move "INTEGER-OF-FORMATTED-DATE(""YYYY-DDD"" date4)" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function INTEGER-OF-FORMATTED-DATE("YYYYWwwD" date5) TO integer-date
+ move "INTEGER-OF-FORMATTED-DATE(""YYYYWwwD"" date5)" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function INTEGER-OF-FORMATTED-DATE("YYYY-Www-D" date6) TO integer-date
+ move "INTEGER-OF-FORMATTED-DATE(""YYYY-Www-D"" date6)" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function DATE-OF-INTEGER(jd) to standard-date-form
+ move function INTEGER-OF-DATE(standard-date-form) to integer-date
+ move "DATE-OF-INTEGER and INTEGER-OF-DATE" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function TEST-DATE-YYYYMMDD(standard-date-form) to integer-result
+ move "TEST-DATE-YYYYMMDD" to checking
+ move zero to should-be
+ move integer-result to but-is
+ perform checkit
+
+ move function DAY-OF-INTEGER(jd) to julian-date-form
+ move function INTEGER-OF-DAY(julian-date-form) to integer-date
+ move "DAY-OF-INTEGER and INTEGER-OF-DAY" to checking
+ move jd to should-be
+ move integer-date to but-is
+ perform checkit
+
+ move function TEST-DAY-YYYYDDD(julian-date-form) to integer-result
+ move "TEST-DAY-YYYYDDD" to checking
+ move zero to should-be
+ move integer-result to but-is
+ perform checkit
+ end-perform.
+
+ move function integer-of-date(19980101) to jd1601
+ move function integer-of-date(19981231) to jd9999
+ perform varying jd from jd1601 by 1 until jd > jd9999
+ move FUNCTION FORMATTED-DATE("YYYYMMDD" jd) TO date1
+ move FUNCTION FORMATTED-DATE("YYYYDDD" jd) TO date3
+
+ move FUNCTION MOD( YYYY of date1 100) to yy of yymmdd
+ move MM of date1 to MM of yymmdd
+ move DD of date1 to DD of yymmdd
+
+ move FUNCTION DATE-TO-YYYYMMDD(yymmdd, minus10, 1994)
+ to standard-date-form
+ move "DATE-TO-YYYYMMDD" to checking
+ move "18" to date1(1:2)
+ move date1 to should-be
+ move standard-date-form to but-is
+ perform checkit
+ end-perform.
+
+ move "DAY-TO-YYYYDDD" to checking
+ MOVE 1910004 to should-be
+ MOVE FUNCTION DAY-TO-YYYYDDD(10004 -20 2002) TO but-is
+ perform checkit
+ MOVE 1810004 to should-be
+ MOVE FUNCTION DAY-TO-YYYYDDD(10004 -120 2002) TO but-is
+ perform checkit
+ MOVE 2010004 to should-be
+ MOVE FUNCTION DAY-TO-YYYYDDD(10004 20 2002) TO but-is
+ perform checkit
+ MOVE 1995005 to should-be
+ MOVE FUNCTION DAY-TO-YYYYDDD(95005 -10 2013) TO but-is
+ perform checkit
+
+ move "COMBINED-DATETIME" to checking
+ MOVE "19450601.123456" TO should-be
+ MOVE FUNCTION COMBINED-DATETIME(19450601 123456) TO but-is-n
+ perform checkit
+
+ move "CURRENT_DATE" to checking
+ MOVE "1945060112345600+0000" TO should-be
+ MOVE FUNCTION CURRENT-DATE TO but-is
+ move "+0000" to but-is(17:5)
+ perform checkit
+
+ move "FORMATTED-CURRENT-DATE (1)" to checking
+ MOVE "1945-06-01T12:34:56" TO should-be
+ MOVE FUNCTION FORMATTED-CURRENT-DATE("YYYY-MM-DDThh:mm:ss") TO but-is
+ perform blot-zulu
+ perform checkit
+
+ move "FORMATTED-CURRENT-DATE (2)" to checking
+ MOVE "1945-06-01T12:34:56Z" TO should-be
+ MOVE FUNCTION FORMATTED-CURRENT-DATE("YYYY-MM-DDThh:mm:ssZ") TO but-is
+ perform blot-zulu
+ perform checkit
+
+ move "FORMATTED-CURRENT-DATE (3)" to checking
+ MOVE "1945-06-01T12:34:56-05:00" TO should-be
+ MOVE FUNCTION FORMATTED-CURRENT-DATE("YYYY-MM-DDThh:mm:ss+hh:mm") TO but-is
+ perform blot-zulu
+ perform checkit
+
+ move "formatted-time" to checking
+ move "01:12:34Z" to should-be
+ MOVE FUNCTION formatted-time("hh:mm:ssZ" 754 -60 ) to but-is
+ perform checkit.
+
+ move "00:12:34Z" to should-be
+ MOVE FUNCTION formatted-time("hh:mm:ssZ" 754 0 ) to but-is
+ perform checkit.
+
+ move "23:12:34Z" to should-be
+ MOVE FUNCTION formatted-time("hh:mm:ssZ" 754 60 ) to but-is
+ perform checkit.
+
+ move "formatted-datetime" to checking
+ MOVE "1900-01-01T00:00:00-01:00" TO SHOULD-BE
+ MOVE FUNCTION formatted-datetime("YYYY-MM-DDThh:mm:ss+hh:mm" 0109208 0 -60 ) TO but-is
+ perform checkit.
+
+ MOVE "1900-01-01T00:00:00+00:00" TO SHOULD-BE
+ MOVE FUNCTION formatted-datetime("YYYY-MM-DDThh:mm:ss+hh:mm" 0109208 0 -0 ) TO but-is
+ perform checkit.
+
+ MOVE "1900-01-01T00:00:00+01:00" TO SHOULD-BE
+ MOVE FUNCTION formatted-datetime("YYYY-MM-DDThh:mm:ss+hh:mm" 0109208 0 +60 ) TO but-is
+ perform checkit.
+
+ move "SECONDS-FROM-FORMATTED-TIME" to checking
+ MOVE "00043200.000000" TO SHOULD-BE
+ MOVE SPACE TO but-is
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME("hh:mm:ss" "12:00:00") TO but-is-n
+ perform checkit.
+
+ stop run.
+
+ checkit.
+ *> display "checkit " """" should-be """" space """" but-is """"
+ if FUNCTION TRIM(should-be) IS NUMERIC AND FUNCTION TRIM(but-is) IS NUMERIC
+ if FUNCTION NUMVAL(should-be)
+ not equal to FUNCTION NUMVAL(but-is)
+ and should-be not equal to but-is
+ then
+ display function trim (checking) ":"
+ " should be " """" function trim (should-be) """"
+ " but is " """" function trim (but-is) """"
+ move 1 to return-code
+ end-if
+ else
+ if should-be not equal to but-is
+ and should-be not equal to but-is
+ then
+ display function trim (checking) ":"
+ " should be " """" function trim (should-be) """"
+ " but is " """" function trim (but-is) """"
+ move 1 to return-code
+ end-if
+ .
+ blot-zulu.
+ move "hh:mm" TO but-is(12:5)
+ move "hh:mm" TO should-be(12:5)
+ if but-is(21:1) not equal to space
+ move "+hh:mm" TO but-is(20:6)
+ move "+hh:mm" TO should-be(20:6)
+ end-if
+ .
+ end program test.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob
new file mode 100644
index 0000000..df70a82
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-OF-INTEGER.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION DAY-OF-INTEGER ( 146000 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 2000269
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob
new file mode 100644
index 0000000..5316a70
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DAY-TO-YYYYDDD.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION DAY-TO-YYYYDDD ( 95005, -10, 2013 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 001995005
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob
new file mode 100644
index 0000000..e07edf0
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_E.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC 9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION E TO Y.
+ IF Y NOT = 2.718281828459045235360287471352662
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.cob
new file mode 100644
index 0000000..e822708
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.cob
@@ -0,0 +1,26 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_EXCEPTION-FILE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE ASSIGN "NOTEXIST"
+ FILE STATUS IS TEST-STATUS.
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE.
+ 01 TEST-REC PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 TEST-STATUS PIC XX.
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION EXCEPTION-FILE '|'
+ NO ADVANCING
+ END-DISPLAY.
+ OPEN INPUT TEST-FILE.
+ DISPLAY FUNCTION EXCEPTION-FILE
+ NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.out
new file mode 100644
index 0000000..ece5467
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-FILE.out
@@ -0,0 +1 @@
+00|35TEST-FILE
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.cob
new file mode 100644
index 0000000..d68261d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_EXCEPTION-STATEMENT.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE ASSIGN "NOTEXIST"
+ FILE STATUS IS TEST-STATUS.
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE.
+ 01 TEST-REC PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 TEST-STATUS PIC XX.
+ PROCEDURE DIVISION.
+ DISPLAY "EXCEPTION-STATEMENT before bad OPEN: "
+ """" FUNCTION EXCEPTION-STATEMENT """"
+ OPEN INPUT TEST-FILE.
+ DISPLAY "EXCEPTION-STATEMENT after bad OPEN: "
+ """" FUNCTION EXCEPTION-STATEMENT """"
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.out
new file mode 100644
index 0000000..5656102
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATEMENT.out
@@ -0,0 +1,3 @@
+EXCEPTION-STATEMENT before bad OPEN: " "
+EXCEPTION-STATEMENT after bad OPEN: "OPEN"
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.cob
new file mode 100644
index 0000000..1ffa366
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_EXCEPTION-STATUS.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ INPUT-OUTPUT SECTION.
+ FILE-CONTROL.
+ SELECT TEST-FILE ASSIGN "NOTEXIST"
+ FILE STATUS IS TEST-STATUS.
+ DATA DIVISION.
+ FILE SECTION.
+ FD TEST-FILE.
+ 01 TEST-REC PIC X(4).
+ WORKING-STORAGE SECTION.
+ 01 TEST-STATUS PIC XX.
+ PROCEDURE DIVISION.
+ DISPLAY "EXCEPTION STATUS before bad open: "
+ """" FUNCTION EXCEPTION-STATUS """"
+ OPEN INPUT TEST-FILE.
+ DISPLAY "EXCEPTION STATUS after bad open: "
+ """" FUNCTION EXCEPTION-STATUS """"
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.out
new file mode 100644
index 0000000..02b4f84
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXCEPTION-STATUS.out
@@ -0,0 +1,3 @@
+EXCEPTION STATUS before bad open: " "
+EXCEPTION STATUS after bad open: "EC-I-O-PERMANENT-ERROR"
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXP.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXP.cob
new file mode 100644
index 0000000..756612c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXP.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S99V9(31).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION EXP ( 3 ) TO Y.
+ IF Y NOT = 20.0855369231876677409285296545817
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_EXP10.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXP10.cob
new file mode 100644
index 0000000..a76fcfb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_EXP10.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION EXP10 ( 4 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 000010000
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FACTORIAL.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FACTORIAL.cob
new file mode 100644
index 0000000..969663c
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FACTORIAL.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION FACTORIAL ( 6 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 000000720
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE.cob
new file mode 100644
index 0000000..cde5644
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE.cob
@@ -0,0 +1,54 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(10).
+ PROCEDURE DIVISION.
+ *> Test normal inputs.
+ MOVE FUNCTION FORMATTED-DATE ( "YYYYMMDD", 1 ) TO str
+ IF str <> "16010101"
+ DISPLAY "Test 1 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATE ( "YYYY-MM-DD", 1 ) TO str
+ IF str <> "1601-01-01"
+ DISPLAY "Test 2 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATE ( "YYYYDDD", 1 ) TO str
+ IF str <> "1601001"
+ DISPLAY "Test 3 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATE ( "YYYY-DDD", 1 ) TO str
+ IF str <> "1601-001"
+ DISPLAY "Test 4 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 1 ) TO str
+ IF str <> "1601W011"
+ DISPLAY "Test 5 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATE ( "YYYY-Www-D", 1 ) TO str
+ IF str <> "1601-W01-1"
+ DISPLAY "Test 6 failed: " str END-DISPLAY
+ END-IF
+
+ *> Test week number edge cases.
+ *> For 2012-01-01.
+ MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 150115 ) TO str
+ IF str <> "2011W527"
+ DISPLAY "Test 7 failed: " str END-DISPLAY
+ END-IF
+
+ *> and for 2013-12-30.
+ MOVE FUNCTION FORMATTED-DATE ( "YYYYWwwD", 150844 ) TO str
+ IF str <> "2014W011"
+ DISPLAY "Test 8 failed: " str END-DISPLAY
+ END-IF
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME.cob
new file mode 100644
index 0000000..47654cb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME.cob
@@ -0,0 +1,48 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(40).
+ PROCEDURE DIVISION.
+ *> Test normal inputs.
+ MOVE FUNCTION FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss", 1, 45296)
+ TO str
+ IF str <> "16010101T123456"
+ DISPLAY "Test 1 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATETIME
+ ("YYYY-MM-DDThh:mm:ss", 1, 45296)
+ TO str
+ IF str <> "1601-01-01T12:34:56"
+ DISPLAY "Test 2 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATETIME
+ ("YYYYDDDThhmmss+hhmm", 1, 45296, -754)
+ TO str
+ IF str <> "1601001T123456-1234"
+ DISPLAY "Test 3 failed: " str END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION FORMATTED-DATETIME
+ ("YYYYDDDThhmmss+hhmm", 1, 45296)
+ TO str
+ IF str <> "1601001T123456+0000"
+ DISPLAY "Test 4 failed: " str END-DISPLAY
+ END-IF
+
+ *> Test underflow to next day due to offset
+ MOVE FUNCTION FORMATTED-DATETIME
+ ("YYYYDDDThhmmss.sssssssssZ", 150846, 0,
+ 1)
+ TO str
+ IF str <> "2013365T235900.000000000Z"
+ DISPLAY "Test 5 failed: " str END-DISPLAY
+ END-IF
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME_with_ref_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME_with_ref_modding.cob
new file mode 100644
index 0000000..c440755
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATETIME_with_ref_modding.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(04).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss", 1, 1) (3:4)
+ TO STR
+ IF STR NOT = '0101'
+ DISPLAY STR
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.cob
new file mode 100644
index 0000000..c495e0d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.cob
@@ -0,0 +1,69 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. datetime.
+ PROCEDURE DIVISION.
+ DISPLAY "FUNCTION FORMATTED-DATETIME - valid format strings"
+ DISPLAY " FORMATTED-DATE Basic"
+ DISPLAY FUNCTION FORMATTED-DATE("YYYYMMDD" 128623).
+ DISPLAY FUNCTION FORMATTED-DATE("YYYYDDD" 128623).
+ DISPLAY FUNCTION FORMATTED-DATE("YYYYWwwD" 128623).
+ DISPLAY " FORMATTED-DATE Extended"
+ DISPLAY FUNCTION FORMATTED-DATE("YYYY-MM-DD" 128623).
+ DISPLAY FUNCTION FORMATTED-DATE("YYYY-DDD" 128623).
+ DISPLAY FUNCTION FORMATTED-DATE("YYYY-Www-D" 128623).
+ DISPLAY " FORMATTED-TIME Basic"
+ DISPLAY FUNCTION FORMATTED-TIME("hhmmss" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hhmmss+hhmm" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hhmmss.ssss" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hhmmss.ssss+hhmm" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hhmmss.ssssZ" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hhmmssZ" 45296.987654321 -300).
+ DISPLAY " FORMATTED-TIME Extended"
+ DISPLAY FUNCTION FORMATTED-TIME("hh:mm:ss" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hh:mm:ss+hh:mm" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hh:mm:ss.ssss" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hh:mm:ss.ssss+hh:mm" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hh:mm:ss.ssssZ" 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-TIME("hh:mm:ssZ" 45296.987654321 -300).
+ DISPLAY " FORMATTED-DATETIME Basic"
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYMMDDThhmmss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYMMDDThhmmss+hhmm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYMMDDThhmmss.ssss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYMMDDThhmmss.ssss+hhmm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYMMDDThhmmss.ssssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYMMDDThhmmssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYDDDThhmmss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYDDDThhmmss+hhmm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYDDDThhmmss.ssss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYDDDThhmmss.ssss+hhmm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYDDDThhmmss.ssssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYDDDThhmmssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYWwwDThhmmss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYWwwDThhmmss+hhmm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYWwwDThhmmss.ssss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYWwwDThhmmss.ssss+hhmm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYWwwDThhmmss.ssssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYYWwwDThhmmssZ" 128623 45296.987654321 -300).
+ DISPLAY " FORMATTED-DATETIME Extended"
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-MM-DDThh:mm:ss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-MM-DDThh:mm:ss+hh:mm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-MM-DDThh:mm:ss.ssss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-MM-DDThh:mm:ss.ssss+hh:mm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-MM-DDThh:mm:ss.ssssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-MM-DDThh:mm:ssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-DDDThh:mm:ss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-DDDThh:mm:ss+hh:mm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-DDDThh:mm:ss.ssss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-DDDThh:mm:ss.ssss+hh:mm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-DDDThh:mm:ss.ssssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-DDDThh:mm:ssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-Www-DThh:mm:ss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-Www-DThh:mm:ss+hh:mm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-Www-DThh:mm:ss.ssss" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-Www-DThh:mm:ss.ssss+hh:mm" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-Www-DThh:mm:ss.ssssZ" 128623 45296.987654321 -300).
+ DISPLAY FUNCTION FORMATTED-DATETIME("YYYY-Www-DThh:mm:ssZ" 128623 45296.987654321 -300).
+ END PROGRAM datetime.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.out
new file mode 100644
index 0000000..5395f4e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_TIME_DATETIME.out
@@ -0,0 +1,62 @@
+FUNCTION FORMATTED-DATETIME - valid format strings
+ FORMATTED-DATE Basic
+19530227
+1953058
+1953W095
+ FORMATTED-DATE Extended
+1953-02-27
+1953-058
+1953-W09-5
+ FORMATTED-TIME Basic
+123456
+123456-0500
+123456.9876
+123456.9876-0500
+173456.0000Z
+173456Z
+ FORMATTED-TIME Extended
+12:34:56
+12:34:56-05:00
+12:34:56.9876
+12:34:56.9876-05:00
+17:34:56.0000Z
+17:34:56Z
+ FORMATTED-DATETIME Basic
+19530227T123456
+19530227T123456-0500
+19530227T123456.9876
+19530227T123456.9876-0500
+19530227T173456.0000Z
+19530227T173456Z
+1953058T123456
+1953058T123456-0500
+1953058T123456.9876
+1953058T123456.9876-0500
+1953058T173456.0000Z
+1953058T173456Z
+1953W095T123456
+1953W095T123456-0500
+1953W095T123456.9876
+1953W095T123456.9876-0500
+1953W095T173456.0000Z
+1953W095T173456Z
+ FORMATTED-DATETIME Extended
+1953-02-27T12:34:56
+1953-02-27T12:34:56-05:00
+1953-02-27T12:34:56.9876
+1953-02-27T12:34:56.9876-05:00
+1953-02-27T17:34:56.0000Z
+1953-02-27T17:34:56Z
+1953-058T12:34:56
+1953-058T12:34:56-05:00
+1953-058T12:34:56.9876
+1953-058T12:34:56.9876-05:00
+1953-058T17:34:56.0000Z
+1953-058T17:34:56Z
+1953-W09-5T12:34:56
+1953-W09-5T12:34:56-05:00
+1953-W09-5T12:34:56.9876
+1953-W09-5T12:34:56.9876-05:00
+1953-W09-5T17:34:56.0000Z
+1953-W09-5T17:34:56Z
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_with_ref_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_with_ref_modding.cob
new file mode 100644
index 0000000..ac5c828
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-DATE_with_ref_modding.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(04).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION FORMATTED-DATE ("YYYYMMDD", 1) (3:4)
+ TO STR
+ IF STR NOT = '0101'
+ DISPLAY STR
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_DP.COMMA.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_DP.COMMA.cob
new file mode 100644
index 0000000..1abd625
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_DP.COMMA.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(11).
+
+ PROCEDURE DIVISION.
+ MOVE FUNCTION FORMATTED-TIME ("hh:mm:ss,ss", 45296) TO str
+ IF str <> "12:34:56,00"
+ DISPLAY "Test 1 failed: " str END-DISPLAY
+ END-IF
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_with_ref_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_with_ref_modding.cob
new file mode 100644
index 0000000..cfcf0c7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FORMATTED-TIME_with_ref_modding.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 str PIC X(04).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION FORMATTED-TIME ("hhmmss", 45296) (3:4)
+ TO STR
+ IF STR NOT = '3456'
+ DISPLAY STR
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_FRACTION-PART.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_FRACTION-PART.cob
new file mode 100644
index 0000000..65f341b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_FRACTION-PART.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(04)V9(04).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION FRACTION-PART ( 3.12345 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = +0000.1234
+ DISPLAY 'FRACTION-PART ( +3.12345 ) wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION FRACTION-PART ( -3.12345 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = -0000.1234
+ DISPLAY 'FRACTION-PART ( -3.12345 ) wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.cob
new file mode 100644
index 0000000..ed31eb6
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.cob
@@ -0,0 +1,13 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_HEX-OF.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 PAC PIC 9(5) COMP-3 VALUE 12345.
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION HEX-OF('Hello, world!')
+ DISPLAY FUNCTION HEX-OF(PAC).
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.out
new file mode 100644
index 0000000..40892ac
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_HEX-OF.out
@@ -0,0 +1,3 @@
+48656C6C6F2C20776F726C6421
+12345F
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_HIGHEST-ALGEBRAIC.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_HIGHEST-ALGEBRAIC.cob
new file mode 100644
index 0000000..2e59df3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_HIGHEST-ALGEBRAIC.cob
@@ -0,0 +1,76 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 F1 PIC S999.
+ 01 F2 PIC S9(4) BINARY.
+ 01 F3 PIC 99V9(3).
+ 01 F4 PIC $**,**9.99BCR.
+ 01 F5 PIC $**,**9.99.
+ 01 F6 USAGE BINARY-CHAR SIGNED.
+ 01 F7 USAGE BINARY-CHAR UNSIGNED.
+ 01 F8 PIC 999PPP.
+ 01 F9 PIC P99.
+ 01 TEST-FLD PIC S9(08)V9(04).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F1)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 999
+ DISPLAY "Test 1 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F2)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 9999
+ DISPLAY "Test 2 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F3)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 99.999
+ DISPLAY "Test 3 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F4)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 99999.99
+ DISPLAY "Test 4 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F5)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 99999.99
+ DISPLAY "Test 5 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F6)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 127
+ DISPLAY "Test 6 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F7)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 255
+ DISPLAY "Test 7 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F8)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 999000
+ DISPLAY "Test 7 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION HIGHEST-ALGEBRAIC (F9)
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 0.099
+ DISPLAY "Test 7 fail: " TEST-FLD
+ END-DISPLAY
+ END-IF.
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DATE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DATE.cob
new file mode 100644
index 0000000..4632864
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DATE.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION INTEGER-OF-DATE ( 20000925 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 000146000
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DAY.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DAY.cob
new file mode 100644
index 0000000..38162bf
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-DAY.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 TEST-FLD PIC S9(09)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION INTEGER-OF-DAY ( 2000269 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 000146000
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-FORMATTED-DATE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-FORMATTED-DATE.cob
new file mode 100644
index 0000000..d580ea8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-OF-FORMATTED-DATE.cob
@@ -0,0 +1,41 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 day-int PIC 9(9).
+
+ PROCEDURE DIVISION.
+ *> The date 2013-12-30 is used as it can also be used to
+ *> check the conversion of dates in week form.
+ MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+ ("YYYY-MM-DD", "2013-12-30")
+ TO day-int
+ IF day-int <> 150844
+ DISPLAY "Test 1 failed: " day-int END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+ ("YYYY-DDD", "2013-364")
+ TO day-int
+ IF day-int <> 150844
+ DISPLAY "Test 2 failed: " day-int END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+ ("YYYY-Www-D", "2014-W01-1")
+ TO day-int
+ IF day-int <> 150844
+ DISPLAY "Test 3 failed: " day-int END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION INTEGER-OF-FORMATTED-DATE
+ ("YYYY-MM-DDThh:mm:ss", "2013-12-30T12:34:56")
+ TO day-int
+ IF day-int <> 150844
+ DISPLAY "Test 4 failed: " day-int END-DISPLAY
+ END-IF
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-PART.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-PART.cob
new file mode 100644
index 0000000..cc97765
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER-PART.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9(4)V9(4) VALUE -1.5.
+ 01 TEST-FLD PIC S9(04)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION INTEGER-PART ( X )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = -1
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER.cob
new file mode 100644
index 0000000..d43dd08
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_INTEGER.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9(4)V9(4) VALUE -1.5.
+ 01 Y PIC 9(12) VALUE 600851475143.
+ 01 TEST-FLD PIC S9(14)V9(08).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION INTEGER ( X )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = -2
+ DISPLAY 'INTEGER ( X ) wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION INTEGER ( Y / 71 )
+ TO TEST-FLD.
+ IF TEST-FLD NOT = 8462696833
+ DISPLAY 'INTEGER ( Y / 71 ) wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__1_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__1_.cob
new file mode 100644
index 0000000..8bbf689
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__1_.cob
@@ -0,0 +1,38 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC S9(4)V9(4) VALUE -1.5.
+ 01 TEST-FLD PIC S9(04)V9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LENGTH ( X ) TO TEST-FLD
+ IF TEST-FLD NOT = 8
+ DISPLAY 'LENGTH "00128" wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION LENGTH ( '00128' )
+ TO TEST-FLD
+ IF TEST-FLD NOT = 5
+ DISPLAY 'LENGTH "00128" wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION LENGTH ( x'a0' )
+ TO TEST-FLD
+ IF TEST-FLD NOT = 1
+ DISPLAY 'LENGTH x"a0" wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION LENGTH ( z'a0' )
+ TO TEST-FLD
+ IF TEST-FLD NOT = 3
+ DISPLAY 'LENGTH z"a0" wrong: ' TEST-FLD
+ END-DISPLAY
+ END-IF
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.cob
new file mode 100644
index 0000000..9416ca0
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.cob
@@ -0,0 +1,139 @@
+ *> { dg-do run }
+ *> { dg-options "-dialect ibm" }
+ *> { dg-output-file "group2/FUNCTION_LENGTH__2_.out" }
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 desc1.
+ 05 desc1-entry pic x(5) occurs 10.
+
+ 01 desc2.
+ 05 desc2-table occurs 10 times.
+ 10 desc2-entry pic x(5).
+
+ 01 desc3.
+ 05 desc3-outer occurs 1 to 5 times depending on desc3-lim.
+ 10 desc3-outer-txt pic x(7).
+ 10 desc3-inner occurs 11 times.
+ 15 desc3-inner-text pic x(13).
+ 77 desc3-lim binary-long.
+
+ 77 msg pic x(64).
+ 77 should-be pic zzzz9.
+ 77 but-is pic zzzz9.
+
+ procedure division.
+
+ display "using FUNCTION LENGTH"
+
+ move "function length(desc1)" to msg
+ move 50 to should-be
+ move function length(desc1) to but-is
+ perform result-is
+
+ move "function length(desc1-entry)" to msg
+ move 50 to should-be
+ move function length(desc1-entry) to but-is
+ perform result-is
+
+ move "function length(desc1-entry(1))" to msg
+ move 5 to should-be
+ move function length(desc1-entry(1)) to but-is
+ perform result-is
+
+ move "function length(desc2)" to msg
+ move 50 to should-be
+ move function length(desc2) to but-is
+ perform result-is
+
+ move "function length(desc2-table)" to msg
+ move 50 to should-be
+ move function length(desc2-table) to but-is
+ perform result-is
+
+ move "function length(desc2-entry)" to msg
+ move 5 to should-be
+ move function length(desc2-entry) to but-is
+ perform result-is
+
+ move "function length(desc2-entry(1))" to msg
+ move 5 to should-be
+ move function length(desc2-entry(1)) to but-is
+ perform result-is
+
+ move 5 to desc3-lim
+
+ move "function length(desc3)" to msg
+ move 750 to should-be
+ move function length(desc3) to but-is
+ perform result-is
+
+ move "function length(desc3-outer)" to msg
+ move 750 to should-be
+ move function length(desc3-outer) to but-is
+ perform result-is
+
+ move "function length(desc3-outer(1))" to msg
+ move 150 to should-be
+ move function length(desc3-outer(1)) to but-is
+ perform result-is
+
+ move "function length(desc3-outer-txt)" to msg
+ move 7 to should-be
+ move function length(desc3-outer-txt) to but-is
+ perform result-is
+
+ move "function length(desc3-inner)" to msg
+ move 143 to should-be
+ move function length(desc3-inner) to but-is
+ perform result-is
+
+ move "function length(desc3-inner(1))" to msg
+ move 13 to should-be
+ move function length(desc3-inner(1)) to but-is
+ perform result-is
+
+ display "After changing desc3-lim from 5 to 3..."
+ move 3 to desc3-lim
+
+ move "function length(desc3)" to msg
+ move 450 to should-be
+ move function length(desc3) to but-is
+ perform result-is
+
+ move "function length(desc3-outer)" to msg
+ move 450 to should-be
+ move function length(desc3-outer) to but-is
+ perform result-is
+
+ move "function length(desc3-outer(1))" to msg
+ move 150 to should-be
+ move function length(desc3-outer(1)) to but-is
+ perform result-is
+
+ move "function length(desc3-outer-txt)" to msg
+ move 7 to should-be
+ move function length(desc3-outer-txt) to but-is
+ perform result-is
+
+ move "function length(desc3-inner)" to msg
+ move 143 to should-be
+ move function length(desc3-inner) to but-is
+ perform result-is
+
+ move "function length(desc3-inner(1))" to msg
+ move 13 to should-be
+ move function length(desc3-inner(1)) to but-is
+ perform result-is
+
+ goback.
+ result-is.
+ display function trim(msg) ": " with no advancing
+ if but-is equal to should-be
+ display function trim(but-is)
+ else
+ display "should be " function trim(should-be)
+ " but is " function trim(but-is)
+ end-if.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.out
new file mode 100644
index 0000000..9d90261
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LENGTH__2_.out
@@ -0,0 +1,22 @@
+using FUNCTION LENGTH
+function length(desc1): 50
+function length(desc1-entry): 50
+function length(desc1-entry(1)): 5
+function length(desc2): 50
+function length(desc2-table): 50
+function length(desc2-entry): 5
+function length(desc2-entry(1)): 5
+function length(desc3): 750
+function length(desc3-outer): 750
+function length(desc3-outer(1)): 150
+function length(desc3-outer-txt): 7
+function length(desc3-inner): 143
+function length(desc3-inner(1)): 13
+After changing desc3-lim from 5 to 3...
+function length(desc3): 450
+function length(desc3-outer): 450
+function length(desc3-outer(1)): 150
+function length(desc3-outer-txt): 7
+function length(desc3-inner): 143
+function length(desc3-inner(1)): 13
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-COMPARE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-COMPARE.cob
new file mode 100644
index 0000000..cb6d783
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-COMPARE.cob
@@ -0,0 +1,21 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION LOCALE-COMPARE ("A", "B") NOT = "<"
+ DISPLAY "Test 1 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOCALE-COMPARE ("B", "A") NOT = ">"
+ DISPLAY "Test 2 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOCALE-COMPARE ("A", "A") NOT = "="
+ DISPLAY "Test 3 fail"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.cob
new file mode 100644
index 0000000..35e0729
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_LOCALE-DATE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(32) VALUE SPACES.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LOCALE-DATE ( "19630302" ) TO X.
+ IF X NOT = SPACES
+ DISPLAY "OK"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.out
new file mode 100644
index 0000000..885fd66
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-DATE.out
@@ -0,0 +1,2 @@
+OK
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.cob
new file mode 100644
index 0000000..d04e7a9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(32) VALUE SPACES.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LOCALE-TIME-FROM-SECONDS ( 33012 ) TO X.
+ IF X NOT = SPACES
+ DISPLAY "OK"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.out
new file mode 100644
index 0000000..885fd66
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME-FROM-SECONDS.out
@@ -0,0 +1,2 @@
+OK
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.cob
new file mode 100644
index 0000000..aeba184
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_LOCALE-TIME.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(32) VALUE SPACES.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LOCALE-TIME ( "233012" ) TO X.
+ IF X NOT = SPACES
+ DISPLAY "OK"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.out
new file mode 100644
index 0000000..885fd66
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOCALE-TIME.out
@@ -0,0 +1,2 @@
+OK
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOG.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOG.cob
new file mode 100644
index 0000000..f0ab0e7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOG.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LOG ( 1.5 ) TO Y.
+ IF Y NOT = 0.405465108108164381978013115464349
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOG10.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOG10.cob
new file mode 100644
index 0000000..e37210b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOG10.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LOG10 ( 1.5 ) TO Y.
+ IF Y NOT = 0.176091259055681242081289008530622
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE.cob
new file mode 100644
index 0000000..4cf24d5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(10) VALUE "A#B.C%D+E$".
+ 01 TEST-FLD PIC X(12) VALUE ALL '_'.
+ PROCEDURE DIVISION.
+ STRING FUNCTION LOWER-CASE ( X )
+ DELIMITED BY SIZE
+ INTO TEST-FLD
+ END-STRING
+ IF TEST-FLD NOT = 'a#b.c%d+e$__'
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE_with_reference_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE_with_reference_modding.cob
new file mode 100644
index 0000000..eb53ca4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWER-CASE_with_reference_modding.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(10) VALUE "A#B.C%D+E$".
+ 01 TEST-FLD PIC X(03).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION LOWER-CASE ( X ) (1 : 3)
+ TO TEST-FLD
+ IF TEST-FLD NOT = 'a#b'
+ DISPLAY TEST-FLD
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWEST-ALGEBRAIC.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWEST-ALGEBRAIC.cob
new file mode 100644
index 0000000..4750c7e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_LOWEST-ALGEBRAIC.cob
@@ -0,0 +1,55 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 F1 PIC S999.
+ 01 F2 PIC S9(4) BINARY.
+ 01 F3 PIC 99V9(3).
+ 01 F4 PIC $**,**9.99BCR.
+ 01 F5 PIC $**,**9.99.
+ 01 F6 USAGE BINARY-CHAR SIGNED.
+ 01 F7 USAGE BINARY-CHAR UNSIGNED.
+ 01 F8 PIC S999PPP.
+ 01 F9 PIC SP99.
+ PROCEDURE DIVISION.
+ IF FUNCTION LOWEST-ALGEBRAIC (F1) NOT = -999
+ DISPLAY "Test 1 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F2) NOT = -9999
+ DISPLAY "Test 2 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F3) NOT = 0
+ DISPLAY "Test 3 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F4) NOT = -99999.99
+ DISPLAY "Test 4 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F5) NOT = 0
+ DISPLAY "Test 5 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F6) NOT = -128
+ DISPLAY "Test 6 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F7) NOT = 0
+ DISPLAY "Test 7 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F8) NOT = -999000
+ DISPLAY "Test 8 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION LOWEST-ALGEBRAIC (F9) NOT = -0.099
+ DISPLAY "Test 9 fail"
+ END-DISPLAY
+ END-IF.
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.cob
new file mode 100644
index 0000000..99971a9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.cob
@@ -0,0 +1,12 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_MAX.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION MAX ( 3 -14 0 8 -3 )
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.out
new file mode 100644
index 0000000..2f95459
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MAX.out
@@ -0,0 +1,2 @@
+8
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.cob
new file mode 100644
index 0000000..007f235
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_MEAN.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 result PIC S999V999.
+ PROCEDURE DIVISION.
+ COMPUTE result = FUNCTION MEAN ( 3 -14 0 8 -3 )
+ DISPLAY result
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.out
new file mode 100644
index 0000000..7f05c89
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEAN.out
@@ -0,0 +1,2 @@
+-001.200
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.cob
new file mode 100644
index 0000000..ac2515d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.cob
@@ -0,0 +1,12 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_MEDIAN.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION MEDIAN ( 3 -14 0 8 -3 )
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.out
new file mode 100644
index 0000000..77ac542
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MEDIAN.out
@@ -0,0 +1,2 @@
+0
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.cob
new file mode 100644
index 0000000..601cbc7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_MIDRANGE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC S999V999.
+ PROCEDURE DIVISION.
+ COMPUTE RESULT = FUNCTION MIDRANGE ( 3 -14 0 8 -3 )
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.out
new file mode 100644
index 0000000..6945d25
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIDRANGE.out
@@ -0,0 +1,2 @@
+-003.000
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.cob
new file mode 100644
index 0000000..85ef141
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.cob
@@ -0,0 +1,12 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_MIN.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION MIN ( 3 -14 0 8 -3 )
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.out
new file mode 100644
index 0000000..1bd872a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MIN.out
@@ -0,0 +1,2 @@
+-14
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.cob
new file mode 100644
index 0000000..cbb445f
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.cob
@@ -0,0 +1,110 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_MODULE-NAME.out" }
+
+ identification division.
+ program-id. level-1.
+ data division.
+ working-storage section.
+ procedure division.
+ display "From level-1:"
+ perform reportt.
+ call "level-2"
+ goback.
+ reportt.
+ display " " "top-level: " """" function module-name(top-level) """"
+ display " " "current: " """" function module-name(current) """"
+ display " " "activating: " """" function module-name(activating) """"
+ display " " "nested: " """" function module-name(nested) """"
+ display " " "stack: " """" function module-name(stack) """"
+ continue.
+ end program level-1.
+
+ identification division.
+ program-id. level-2.
+ data division.
+ working-storage section.
+ procedure division.
+ display "From level-2:"
+ perform reportt.
+ call "level-3"
+ goback.
+ reportt.
+ display " " "top-level: " """" function module-name(top-level) """"
+ display " " "current: " """" function module-name(current) """"
+ display " " "activating: " """" function module-name(activating) """"
+ display " " "nested: " """" function module-name(nested) """"
+ display " " "stack: " """" function module-name(stack) """"
+ continue.
+ end program level-2.
+
+ identification division.
+ program-id. level-3.
+ data division.
+ working-storage section.
+ procedure division.
+ display "From level-3:"
+ perform reportt.
+ call "level-3a"
+ goback.
+ reportt.
+ display " " "top-level: " """" function module-name(top-level) """"
+ display " " "current: " """" function module-name(current) """"
+ display " " "activating: " """" function module-name(activating) """"
+ display " " "nested: " """" function module-name(nested) """"
+ display " " "stack: " """" function module-name(stack) """"
+ continue.
+
+ identification division.
+ program-id. level-3a.
+ data division.
+ working-storage section.
+ procedure division.
+ display "From level-3a:"
+ perform reportt.
+ call "level-3b"
+ goback.
+ reportt.
+ display " " "top-level: " """" function module-name(top-level) """"
+ display " " "current: " """" function module-name(current) """"
+ display " " "activating: " """" function module-name(activating) """"
+ display " " "nested: " """" function module-name(nested) """"
+ display " " "stack: " """" function module-name(stack) """"
+ continue.
+
+ identification division.
+ program-id. level-3b.
+ data division.
+ working-storage section.
+ procedure division.
+ display "From level-3b:"
+ perform reportt.
+ call "level-3c"
+ goback.
+ reportt.
+ display " " "top-level: " """" function module-name(top-level) """"
+ display " " "current: " """" function module-name(current) """"
+ display " " "activating: " """" function module-name(activating) """"
+ display " " "nested: " """" function module-name(nested) """"
+ display " " "stack: " """" function module-name(stack) """"
+ continue.
+
+ identification division.
+ program-id. level-3c.
+ data division.
+ working-storage section.
+ procedure division.
+ display "From level-3c:"
+ perform reportt.
+ goback.
+ reportt.
+ display " " "top-level: " """" function module-name(top-level) """"
+ display " " "current: " """" function module-name(current) """"
+ display " " "activating: " """" function module-name(activating) """"
+ display " " "nested: " """" function module-name(nested) """"
+ display " " "stack: " """" function module-name(stack) """"
+ continue.
+ end program level-3c.
+ end program level-3b.
+ end program level-3a.
+ end program level-3.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.out
new file mode 100644
index 0000000..7be80f0
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MODULE-NAME.out
@@ -0,0 +1,37 @@
+From level-1:
+ top-level: "level-1"
+ current: "level-1"
+ activating: " "
+ nested: "level-1"
+ stack: "level-1; "
+From level-2:
+ top-level: "level-1"
+ current: "level-2"
+ activating: "level-1"
+ nested: "level-2"
+ stack: "level-2;level-1; "
+From level-3:
+ top-level: "level-1"
+ current: "level-3"
+ activating: "level-2"
+ nested: "level-3"
+ stack: "level-3;level-2;level-1; "
+From level-3a:
+ top-level: "level-1"
+ current: "level-3"
+ activating: "level-3"
+ nested: "level-3a"
+ stack: "level-3a;level-3;level-2;level-1; "
+From level-3b:
+ top-level: "level-1"
+ current: "level-3"
+ activating: "level-3a"
+ nested: "level-3b"
+ stack: "level-3b;level-3a;level-3;level-2;level-1; "
+From level-3c:
+ top-level: "level-1"
+ current: "level-3"
+ activating: "level-3b"
+ nested: "level-3c"
+ stack: "level-3c;level-3b;level-3a;level-3;level-2;level-1; "
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__invalid_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__invalid_.cob
new file mode 100644
index 0000000..56ecbcd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__invalid_.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC 9 VALUE 0.
+ 01 R PIC S9(4)V9(4) VALUE 1.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION MOD ( -11 Z ) TO R
+ IF FUNCTION EXCEPTION-STATUS
+ NOT = 'EC-ARGUMENT-FUNCTION'
+ DISPLAY 'Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF
+ IF R NOT = 0
+ DISPLAY 'result is not zero: ' R
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__valid_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__valid_.cob
new file mode 100644
index 0000000..0db8679
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_MOD__valid_.cob
@@ -0,0 +1,21 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC 9(12) VALUE 600851475143.
+ 01 R PIC S9(4)V9(4) VALUE 0.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION MOD ( -11 5 ) TO R
+ IF R NOT = 4
+ DISPLAY 'first one wrong: ' R
+ END-DISPLAY
+ END-IF
+ MOVE FUNCTION MOD ( Y, 71 ) TO R
+ IF R NOT = 0
+ DISPLAY 'second one wrong: ' R
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C.cob
new file mode 100644
index 0000000..2eb8eb9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X1 PIC X(14) VALUE " -% 9876.1234 ".
+ 01 X2 PIC X(20) VALUE " % 19,876.1234 DB".
+ 01 N PIC s9(5)v9(5).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION NUMVAL-C ( X1 , "%" ) TO N
+ IF N NOT = -9876.1234
+ DISPLAY N
+ END-DISPLAY
+ END-IF
+ MOVE FUNCTION NUMVAL-C ( X2 , "%" ) TO N
+ IF N NOT = -19876.1234
+ DISPLAY N
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C_DP.COMMA.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C_DP.COMMA.cob
new file mode 100644
index 0000000..bd57463
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-C_DP.COMMA.cob
@@ -0,0 +1,21 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA
+ .
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X1 PIC X(20) VALUE " % 19.876,1234 DB".
+ 01 N PIC s9(5)v9(5).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION NUMVAL-C ( X1 , "%" ) TO N
+ IF N NOT = -19876,1234
+ DISPLAY N
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.cob
new file mode 100644
index 0000000..522f810
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.cob
@@ -0,0 +1,30 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_NUMVAL-F.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 result PIC S9(8)V9(9) COMP-5.
+ 01 vector.
+ 05 vd.
+ 10 FILLER PIC X(32) VALUE " - 123.456 E + 2 ".
+ 10 FILLER PIC X(32) VALUE "123".
+ 10 FILLER PIC X(32) VALUE ".456".
+ 10 FILLER PIC X(32) VALUE "123.456".
+ 10 FILLER PIC X(32) VALUE "-123.456".
+ 10 FILLER PIC X(32) VALUE "123.456E2".
+ 10 FILLER PIC X(32) VALUE "-123.456E-2".
+ 10 FILLER PIC X(32) VALUE "DONE".
+ 10 FILLER PIC X(32) OCCURS 100 TIMES.
+ 05 datat REDEFINES vd PIC X(32) OCCURS 100 TIMES INDEXED BY I.
+ PROCEDURE DIVISION.
+ SET I TO 1
+ PERFORM UNTIL datat(I) EQUALS "DONE"
+ DISPLAY """"datat(I)"""" SPACE WITH NO ADVANCING
+ MOVE FUNCTION NUMVAL-F(datat(I)) TO result
+ DISPLAY result
+ ADD 1 TO I
+ END-PERFORM.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.out
new file mode 100644
index 0000000..6d27dd2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL-F.out
@@ -0,0 +1,8 @@
+" - 123.456 E + 2 " -00012345.600000000
+"123 " +00000123.000000000
+".456 " +00000000.456000000
+"123.456 " +00000123.456000000
+"-123.456 " -00000123.456000000
+"123.456E2 " +00012345.600000000
+"-123.456E-2 " -00000001.234560000
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL.cob
new file mode 100644
index 0000000..9288331
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_NUMVAL.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X1 PIC X(12) VALUE " -9876.1234 ".
+ 01 X2 PIC X(18) VALUE " 19876.1234 CR".
+ 01 N PIC s9(5)v9(5).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION NUMVAL ( X1 ) TO N
+ IF N NOT = -9876.1234
+ DISPLAY N
+ END-DISPLAY
+ END-IF
+ MOVE FUNCTION NUMVAL ( X2 ) TO N
+ IF N NOT = -19876.1234
+ DISPLAY N
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.cob
new file mode 100644
index 0000000..0dd1053
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_ORD-MAX.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC 999.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ORD-MAX ( 3 -14 0 8 -3 ) TO RESULT
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.out
new file mode 100644
index 0000000..c9ce4ea
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MAX.out
@@ -0,0 +1,2 @@
+004
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.cob
new file mode 100644
index 0000000..fd55396
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_ORD-MIN.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC 999.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ORD-MIN ( 3 -14 0 8 -3 ) TO RESULT
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.out
new file mode 100644
index 0000000..4119821
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD-MIN.out
@@ -0,0 +1,2 @@
+002
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.cob
new file mode 100644
index 0000000..fe5e290
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_ORD.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC 999.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION ORD ( "k" ) TO RESULT
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.out
new file mode 100644
index 0000000..e55677a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_ORD.out
@@ -0,0 +1,2 @@
+108
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_PI.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_PI.cob
new file mode 100644
index 0000000..9792e03
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_PI.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC 9V9(32).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION PI TO Y.
+ IF Y NOT = 3.14159265358979323846264338327950
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.cob
new file mode 100644
index 0000000..5883abd
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_PRESENT-VALUE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC 9(5)V9(4).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION PRESENT-VALUE ( 3 2 1 ) TO RESULT
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.out
new file mode 100644
index 0000000..52ce840
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_PRESENT-VALUE.out
@@ -0,0 +1,2 @@
+00000.5625
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_RANDOM.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_RANDOM.cob
new file mode 100644
index 0000000..0a3e151
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_RANDOM.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S99V99 COMP VALUE -1.0.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION RANDOM ( ) TO Y.
+ IF Y < 0
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_RANGE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_RANGE.cob
new file mode 100644
index 0000000..48a9511
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_RANGE.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC S9(4)V9(4) COMP-5.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION RANGE ( 3 -14 0 8 -3 ) TO Z.
+ IF Z NOT = 22
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_REM__invalid_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_REM__invalid_.cob
new file mode 100644
index 0000000..38298a8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_REM__invalid_.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 R PIC S9(4)V9(4) COMP-5 VALUE 4.1.
+ 01 Z PIC 9 COMP-5 VALUE 0.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION REM ( -11 Z ) TO R
+ IF FUNCTION EXCEPTION-STATUS
+ NOT = 'EC-ARGUMENT-FUNCTION'
+ DISPLAY 'Wrong/missing exception: '
+ FUNCTION EXCEPTION-STATUS
+ END-DISPLAY
+ END-IF
+ IF R NOT = 0
+ DISPLAY 'result is not zero: ' R
+ END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_REM__valid_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_REM__valid_.cob
new file mode 100644
index 0000000..7ace4a2
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_REM__valid_.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 R PIC S9(4)V9(4) COMP-5 VALUE 0.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION REM ( -11 5 ) TO R
+ IF R NOT = -1
+ DISPLAY R END-DISPLAY
+ END-IF
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE.cob
new file mode 100644
index 0000000..b1b1690
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(10) VALUE "A#B.C%D+E$".
+ 01 Z PIC X(10).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION REVERSE ( X ) TO Z.
+ IF Z NOT = "$E+D%C.B#A"
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE_with_reference_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE_with_reference_modding.cob
new file mode 100644
index 0000000..98c28ad
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_REVERSE_with_reference_modding.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(10) VALUE "A#B.C%D+E$".
+ 01 Z PIC X(10).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION REVERSE ( X ) (1 : 4) TO Z.
+ IF Z NOT = "$E+D "
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-FROM-FORMATTED-TIME.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-FROM-FORMATTED-TIME.cob
new file mode 100644
index 0000000..2641e08
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-FROM-FORMATTED-TIME.cob
@@ -0,0 +1,58 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 result PIC 9(8)V9(9) COMP-5.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+ ("hhmmss", "010203")
+ TO result.
+ IF result NOT = 3723
+ DISPLAY "Test 1 failed: " result
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+ ("hh:mm:ss", "01:02:03")
+ TO result.
+ IF result NOT = 3723
+ DISPLAY "Test 2 failed: " result
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+ ("hhmmss.ssssssss", "010203.04050607")
+ TO result.
+ IF result NOT = 3723.04050607
+ DISPLAY "Test 3 failed: " result
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+ ("hhmmssZ", "010203Z")
+ TO result.
+ IF result NOT = 3723
+ DISPLAY "Test 4 failed: " result
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+ ("hhmmss+hhmm", "010203+0405")
+ TO result.
+ IF result NOT = 3723
+ DISPLAY "Test 5 failed: " result
+ END-DISPLAY
+ END-IF.
+
+ MOVE FUNCTION SECONDS-FROM-FORMATTED-TIME
+ ("YYYYMMDDThhmmss", "16010101T010203")
+ TO result.
+ IF result NOT = 3723
+ DISPLAY "Test 6 failed: " result
+ END-DISPLAY
+ END-IF.
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-PAST-MIDNIGHT.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-PAST-MIDNIGHT.cob
new file mode 100644
index 0000000..b229ac3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SECONDS-PAST-MIDNIGHT.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC 9(8) COMP-5.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION SECONDS-PAST-MIDNIGHT TO Y.
+ IF Y NOT < 86402
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SIGN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SIGN.cob
new file mode 100644
index 0000000..f698d97
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SIGN.cob
@@ -0,0 +1,30 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z USAGE BINARY-LONG SIGNED.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION SIGN ( 3.12345 ) TO Z.
+ IF Z NOT = 1
+ DISPLAY "Sign 1 " Z
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION SIGN ( -0.0 ) TO Z.
+ IF Z NOT = 0
+ DISPLAY "Sign 2 " Z
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION SIGN ( 0.0 ) TO Z.
+ IF Z NOT = 0
+ DISPLAY "Sign 3 " Z
+ END-DISPLAY
+ END-IF.
+ MOVE FUNCTION SIGN ( -3.12345 ) TO Z.
+ IF Z NOT = -1
+ DISPLAY "Sign 4 " Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SIN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SIN.cob
new file mode 100644
index 0000000..a72df35
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SIN.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION SIN ( 1.5 ) TO Y.
+ IF Y NOT = 0.997494986604054430941723371141487
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT.cob
new file mode 100644
index 0000000..ddf36da
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SQRT.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(33).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION SQRT ( 1.5 ) TO Y.
+ IF Y NOT = 1.224744871391589049098642037352945
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob
new file mode 100644
index 0000000..8deadc7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_STANDARD-DEVIATION.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S9V9(32).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION STANDARD-DEVIATION ( 3 -14 0 8 -3 ) TO Y.
+ IF Y NOT = 7.35934779718963954877237043574538
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob
new file mode 100644
index 0000000..850f1da
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC X(20).
+ 01 Z PIC X(20).
+ PROCEDURE DIVISION.
+ MOVE "ABC111444555defxxabc" TO Y.
+ MOVE FUNCTION SUBSTITUTE (Y anycase "abc" "zz"
+ anycase "55" "666")
+ TO Z.
+ IF Z NOT = "zz1114446665defxxzz"
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob
new file mode 100644
index 0000000..24ed1b8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE-CASE_with_reference_mod.cob
@@ -0,0 +1,20 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC X(20).
+ 01 Z PIC X(20).
+ PROCEDURE DIVISION.
+ MOVE "abc111444555defxxabc" TO Y.
+ MOVE FUNCTION SUBSTITUTE
+ ( Y anycase "ABC" "zz"
+ anycase "55" "666" ) (2 : 9)
+ TO Z.
+ IF Z NOT = "z11144466"
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.cob
new file mode 100644
index 0000000..072c159
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_SUBSTITUTE.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC X(24).
+ PROCEDURE DIVISION.
+ MOVE "abc111444555defxxabc" TO Y
+ DISPLAY FUNCTION TRIM (FUNCTION SUBSTITUTE ( Y "abc" "zz" "55" "666" ))
+
+ MOVE "bobBobjimJimbobBobjimJim" TO Y
+ DISPLAY FUNCTION SUBSTITUTE ( Y "bob" "FILLER" "jim" "Z")
+
+ MOVE "bobBobjimJimbobBobjimJim" TO Y
+ DISPLAY FUNCTION SUBSTITUTE ( Y FIRST "bob" "FILLER" "jim" "Z")
+
+ MOVE "bobBobjimJimbobBobjimJim" TO Y
+ DISPLAY FUNCTION SUBSTITUTE ( Y LAST "bob" "FILLER" "jim" "Z")
+
+ MOVE "bobBobjimJimbobBobjimJim" TO Y
+ DISPLAY FUNCTION SUBSTITUTE ( Y ANYCASE "bob" "FILLER" ANYCASE "jim" "Z")
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.out
new file mode 100644
index 0000000..4f5f7a0
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE.out
@@ -0,0 +1,6 @@
+zz1114446665defxxzz
+FILLERBobZJimFILLERBobZJim
+FILLERBobZJimbobBobZJim
+bobBobZJimFILLERBobZJim
+FILLERFILLERZZFILLERFILLERZZ
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE_with_reference_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE_with_reference_modding.cob
new file mode 100644
index 0000000..7894915
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUBSTITUTE_with_reference_modding.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC X(20).
+ 01 Z PIC X(20).
+ PROCEDURE DIVISION.
+ MOVE "abc111444555defxxabc" TO Y.
+ MOVE FUNCTION SUBSTITUTE
+ ( Y "abc" "zz" "55" "666" ) (2 : 9)
+ TO Z.
+ IF Z NOT = "z11144466"
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_SUM.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUM.cob
new file mode 100644
index 0000000..228e996
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_SUM.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z USAGE BINARY-LONG.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION SUM ( 3 -14 0 8 -3 ) TO Z.
+ IF Z NOT = -6
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TAN.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TAN.cob
new file mode 100644
index 0000000..f932157
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TAN.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Y PIC S99V9(31).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION TAN ( 1.5 ) TO Y.
+ IF Y NOT = 14.1014199471717193876460836519877
+ DISPLAY Y
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.cob
new file mode 100644
index 0000000..8841f5a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_TEST-DATE-YYYYMMDD.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC 999.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION TEST-DATE-YYYYMMDD ( 20020231 ) TO RESULT
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.out
new file mode 100644
index 0000000..56fa706
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DATE-YYYYMMDD.out
@@ -0,0 +1,2 @@
+003
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.cob
new file mode 100644
index 0000000..71fbdb9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_TEST-DAY-YYYYDDD__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RESULT PIC 999.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION TEST-DAY-YYYYDDD ( 2002400 ) TO RESULT
+ DISPLAY RESULT
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.out
new file mode 100644
index 0000000..4119821
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__1_.out
@@ -0,0 +1,2 @@
+002
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__2_.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__2_.cob
new file mode 100644
index 0000000..24893ab
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-DAY-YYYYDDD__2_.cob
@@ -0,0 +1,170 @@
+ *> { dg-do run }
+
+ identification division.
+ program-id. test.
+ data division.
+ working-storage section.
+ 01 datev pic 99999999.
+ 01 should_be pic 9999.
+ 01 result pic 9999.
+ procedure division.
+ move function test-day-yyyyddd(1945123) to result
+ move zero to should_be
+ if result not equal to should_be then
+ display "test-day-yyyyddd(1945123) should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move function test-day-yyyyddd(10000000) to result
+ move 1 to should_be
+ if result not equal to should_be then
+ display "test-day-yyyyddd(100000000) should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1601000 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1601001 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1601364 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1601365 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1601366 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1601367 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 2000365 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 2000366 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 2000367 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 2100365 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 2100366 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 2100367 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1988365 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1988366 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1988367 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1989365 to datev
+ move zero to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1989366 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1989367 to datev
+ move 2 to should_be
+ move function test-day-yyyyddd(datev) to result
+ if result not equal to should_be then
+ display "test-day-yyyyddd(" datev ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ end program test.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_DP.COMMA.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_DP.COMMA.cob
new file mode 100644
index 0000000..b825198
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_DP.COMMA.cob
@@ -0,0 +1,32 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SPECIAL-NAMES.
+ DECIMAL-POINT IS COMMA.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss,ss", "000000,00") <> 0
+ DISPLAY "Test 1 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss,ss", "16010101T000000,00") <> 0
+ DISPLAY "Test 2 failed" END-DISPLAY
+ END-IF
+
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss,ss", "000000.00") <> 7
+ DISPLAY "Test 3 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss,ss", "16010101T000000.00") <> 16
+ DISPLAY "Test 4 failed" END-DISPLAY
+ END-IF
+
+ STOP RUN
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_additional.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_additional.cob
new file mode 100644
index 0000000..e782647
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_additional.cob
@@ -0,0 +1,173 @@
+ *> { dg-do run }
+
+ identification division.
+ program-id. test.
+ data division.
+ working-storage section.
+ 01 datev pic 99999999.
+ 01 should_be pic 9999.
+ 01 result pic 9999.
+ 01 date-integer PIC 999999.
+ 01 i PIC 999.
+ 01 datex PIC X(8).
+ 01 xone PIC X.
+ 01 yyyydddv .
+ 02 yyyy PIC 9999.
+ 02 filler PIC X VALUE "-".
+ 02 ddd PIC 999.
+ procedure division.
+ *> TESTING YYYYMMDD
+ move "19000229" to datex
+ move function TEST-FORMATTED-DATETIME("YYYYMMDD", datex) to RESULT
+ move 8 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYMMDD"""
+ ", "
+ function trim(datex)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ *> Test an entire year of YYYYMMDD:
+ move function integer-of-date(19880101) to date-integer
+ perform until date-integer >= function integer-of-date(19890101)
+ move function date-of-integer(date-integer) to datev
+ move function TEST-FORMATTED-DATETIME("YYYYMMDD", datev) to RESULT
+ move zero to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYMMDD"""
+ ", "
+ datev
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if
+ add 1 to date-integer
+ end-perform.
+ *> Make sure foreign characters trigger the correct gazinga in YYYYMMDD
+ move "19530227" to datex
+ perform varying i from 1 by 1 until i > 8
+ move datex(i:1) to xone
+ move 'X' to datex(i:1)
+ move function TEST-FORMATTED-DATETIME("YYYYMMDD", datex) to RESULT
+ move i to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYMMDD"""
+ ", "
+ function trim(datex)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if
+ move xone to datex(i:1)
+ end-perform.
+ move "19000229" to datex
+ move function TEST-FORMATTED-DATETIME("YYYYMMDD", datex) to RESULT
+ move 8 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYMMDD"""
+ ", "
+ function trim(datex)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move "20000229" to datex
+ move function TEST-FORMATTED-DATETIME("YYYYMMDD", datex) to RESULT
+ move 0 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYMMDD"""
+ ", "
+ function trim(datex)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move "20007029" to datex
+ move function TEST-FORMATTED-DATETIME("YYYYMMDD", datex) to RESULT
+ move 5 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYMMDD"""
+ ", "
+ function trim(datex)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ *> TESTING YYYY-DDD
+ move "1988" to yyyy of yyyydddv
+ move "000" to ddd of yyyydddv
+ move function TEST-FORMATTED-DATETIME("YYYY-DDD", yyyydddv) to RESULT
+ move 8 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYDDD"""
+ ", "
+ function trim(yyyydddv)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move "1988" to yyyy of yyyydddv
+ move "367" to ddd of yyyydddv
+ move function TEST-FORMATTED-DATETIME("YYYY-DDD", yyyydddv) to RESULT
+ move 8 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYDDD"""
+ ", "
+ function trim(yyyydddv)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move "1988" to yyyy of yyyydddv
+ move "399" to ddd of yyyydddv
+ move function TEST-FORMATTED-DATETIME("YYYY-DDD", yyyydddv) to RESULT
+ move 7 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYDDD"""
+ ", "
+ function trim(yyyydddv)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1988 to yyyy of yyyydddv
+ move 400 to ddd of yyyydddv
+ move function TEST-FORMATTED-DATETIME("YYYY-DDD", yyyydddv) to RESULT
+ move 6 to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYYDDD"""
+ ", "
+ function trim(yyyydddv)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if.
+ move 1988 to yyyy of yyyydddv
+ perform varying i from 1 by 1 until i > 366
+ move i to ddd of yyyydddv
+ move function TEST-FORMATTED-DATETIME("YYYY-DDD", yyyydddv) to RESULT
+ move zero to should_be
+ if result not equal to should_be then
+ display "TEST-FORMATTED-DATETIME("
+ """YYYY-DDD"""
+ ", "
+ function trim(yyyydddv)
+ ") should have been "
+ should_be " but was " result
+ move 1 to return-code
+ end-if
+ add 1 to date-integer
+ end-perform.
+ end program test.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_dates.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_dates.cob
new file mode 100644
index 0000000..1b571f9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_dates.cob
@@ -0,0 +1,118 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "16010101") <> 0
+ DISPLAY "Test 1 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYY-MM-DD", "1601-01-01") <> 0
+ DISPLAY "Test 2 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYDDD", "1601001") <> 0
+ DISPLAY "Test 3 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYY-DDD", "1601-001") <> 0
+ DISPLAY "Test 4 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYWwwD", "1601W011") <> 0
+ DISPLAY "Test 5 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYY-Www-D", "1601-W01-1") <> 0
+ DISPLAY "Test 6 failed" END-DISPLAY
+ END-IF
+
+
+ *> How will this work with zero-length items?
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "1") <> 2
+ DISPLAY "Test 7 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "160A0101") <> 4
+ DISPLAY "Test 8 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "00000101") <> 1
+ DISPLAY "Test 9 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "16000101") <> 4
+ DISPLAY "Test 10 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "16010001") <> 6
+ DISPLAY "Test 11 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "16011301") <> 6
+ DISPLAY "Test 12 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "16010190") <> 7
+ DISPLAY "Test 13 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "18000229") <> 8
+ DISPLAY "Test 14 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYY-MM-DD", "1601 01 01") <> 5
+ DISPLAY "Test 15 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "160101010") <> 9
+ DISPLAY "Test 16 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYWwwD", "1601A011") <> 5
+ DISPLAY "Test 17 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYWwwD", "1601W531") <> 7
+ DISPLAY "Test 18 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYWwwD", "1601W601") <> 6
+ DISPLAY "Test 19 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYWwwD", "2009W531") <> 0
+ DISPLAY "Test 20 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYWwwD", "1601W018") <> 8
+ DISPLAY "Test 21 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYDDD", "1601366") <> 7
+ DISPLAY "Test 22 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYDDD", "1601370") <> 6
+ DISPLAY "Test 23 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYDDD", "1601400") <> 5
+ DISPLAY "Test 24 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "01") <> 1
+ DISPLAY "Test 25 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDD", "1601010") <> 8
+ DISPLAY "Test 26 failed" END-DISPLAY
+ END-IF
+
+ STOP RUN
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_datetimes.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_datetimes.cob
new file mode 100644
index 0000000..5591fbb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_datetimes.cob
@@ -0,0 +1,44 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 RESULT PIC 9(02).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss", "16010101T000000")
+ TO RESULT
+ IF RESULT <> 0
+ DISPLAY "Test 1 failed: " RESULT END-DISPLAY
+ END-IF
+ MOVE FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYY-MM-DDThh:mm:ss.sssssssss+hh:mm",
+ "1601-01-01T00:00:00.000000000+00:00")
+ TO RESULT
+ IF RESULT <> 0
+ DISPLAY "Test 2 failed: " RESULT END-DISPLAY
+ END-IF
+
+ MOVE FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss", "16010101 000000")
+ TO RESULT
+ IF RESULT <> 9
+ DISPLAY "Test 3 failed: " RESULT END-DISPLAY
+ END-IF
+ MOVE FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss", SPACE)
+ TO RESULT
+ IF RESULT <> 1
+ DISPLAY "Test 4 failed: " RESULT END-DISPLAY
+ END-IF
+ MOVE FUNCTION TEST-FORMATTED-DATETIME
+ ("YYYYMMDDThhmmss", "16010101T ")
+ TO RESULT
+ IF RESULT <> 10
+ DISPLAY "Test 5 failed: " RESULT END-DISPLAY
+ END-IF
+
+ STOP RUN
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_times.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_times.cob
new file mode 100644
index 0000000..ded9551
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-FORMATTED-DATETIME_with_times.cob
@@ -0,0 +1,72 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss.sssssssssZ", "000000.000000000Z") <> 0
+ DISPLAY "Test 1 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hh:mm:ss.sssssssssZ", "00:00:00.000000000Z") <> 0
+ DISPLAY "Test 2 failed" END-DISPLAY
+ END-IF
+ *> 0 instead of +/- valid in sending fields with offset of zero.
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss.sssssssss+hhmm", "000000.00000000000000")
+ <> 0
+ DISPLAY "Test 3 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hh:mm:ss.sssssssss+hh:mm",
+ "00:00:00.000000000+00:00")
+ <> 0
+ DISPLAY "Test 4 failed" END-DISPLAY
+ END-IF
+
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss", "300000") <> 1
+ DISPLAY "Test 5 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss", "250000") <> 2
+ DISPLAY "Test 6 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss", "006000") <> 3
+ DISPLAY "Test 7 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss", "000060") <> 5
+ DISPLAY "Test 8 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hh:mm:ss", "00-00-00") <> 3
+ DISPLAY "Test 9 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss.ss", "000000,00") <> 7
+ DISPLAY "Test 10 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss+hhmm", "000000 0000") <> 7
+ DISPLAY "Test 11 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss+hhmm", "00000000001") <> 11
+ DISPLAY "Test 12 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmssZ", "000000A") <> 7
+ DISPLAY "Test 13 failed" END-DISPLAY
+ END-IF
+ IF FUNCTION TEST-FORMATTED-DATETIME
+ ("hhmmss", SPACE) <> 1
+ DISPLAY "Test 14 failed" END-DISPLAY
+ END-IF
+
+ STOP RUN
+ .
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-C.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-C.cob
new file mode 100644
index 0000000..e458f4a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-C.cob
@@ -0,0 +1,89 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION TEST-NUMVAL-C ("+ 1") NOT = 0
+ DISPLAY "Test 1 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C (" + 1") NOT = 0
+ DISPLAY "Test 2 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("- 1") NOT = 0
+ DISPLAY "Test 3 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C (" - 1") NOT = 0
+ DISPLAY "Test 4 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("+- 1") NOT = 2
+ DISPLAY "Test 5 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1 +") NOT = 0
+ DISPLAY "Test 6 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1 -") NOT = 0
+ DISPLAY "Test 7 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1 +-") NOT = 4
+ DISPLAY "Test 8 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1 -+") NOT = 4
+ DISPLAY "Test 9 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("+ 1.1") NOT = 0
+ DISPLAY "Test 10 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("- 1.1") NOT = 0
+ DISPLAY "Test 11 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1.1 +") NOT = 0
+ DISPLAY "Test 12 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1.1 -") NOT = 0
+ DISPLAY "Test 13 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1.1 CR") NOT = 0
+ DISPLAY "Test 14 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1.1 DB") NOT = 0
+ DISPLAY "Test 15 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("1.1 -CR") NOT = 6
+ DISPLAY "Test 16 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("+ $1.1 ") NOT = 0
+ DISPLAY "Test 17 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("- $1.1 ") NOT = 0
+ DISPLAY "Test 18 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("+ X1.1 ", "X") NOT = 0
+ DISPLAY "Test 19 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-C ("- X1.1 ", "X") NOT = 0
+ DISPLAY "Test 20 fail"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-F.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-F.cob
new file mode 100644
index 0000000..3fcec0e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL-F.cob
@@ -0,0 +1,89 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION TEST-NUMVAL-F ("+ 1") NOT = 0
+ DISPLAY "Test 1 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F (" + 1") NOT = 0
+ DISPLAY "Test 2 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("- 1") NOT = 0
+ DISPLAY "Test 3 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F (" - 1") NOT = 0
+ DISPLAY "Test 4 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("+- 1") NOT = 2
+ DISPLAY "Test 5 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1 +") NOT = 3
+ DISPLAY "Test 6 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1 -") NOT = 3
+ DISPLAY "Test 7 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1 +-") NOT = 3
+ DISPLAY "Test 8 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1 -+") NOT = 3
+ DISPLAY "Test 9 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("+ 1.1") NOT = 0
+ DISPLAY "Test 10 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("- 1.1") NOT = 0
+ DISPLAY "Test 11 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 +") NOT = 5
+ DISPLAY "Test 12 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 -") NOT = 5
+ DISPLAY "Test 13 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 ") NOT = 0
+ DISPLAY "Test 14 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 ") NOT = 0
+ DISPLAY "Test 15 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 -CR") NOT = 5
+ DISPLAY "Test 16 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 E+1") NOT = 0
+ DISPLAY "Test 17 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 E -1") NOT = 0
+ DISPLAY "Test 18 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("1.1 EE") NOT = 6
+ DISPLAY "Test 19 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL-F ("+1.1 E+01") NOT = 0
+ DISPLAY "Test 20 fail"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob
new file mode 100644
index 0000000..bc38b4e
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TEST-NUMVAL.cob
@@ -0,0 +1,89 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ PROCEDURE DIVISION.
+ IF FUNCTION TEST-NUMVAL ("+ 1") NOT = 0
+ DISPLAY "Test 1 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL (" + 1") NOT = 0
+ DISPLAY "Test 2 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("- 1") NOT = 0
+ DISPLAY "Test 3 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL (" - 1") NOT = 0
+ DISPLAY "Test 4 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("+- 1") NOT = 2
+ DISPLAY "Test 5 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1 +") NOT = 0
+ DISPLAY "Test 6 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1 -") NOT = 0
+ DISPLAY "Test 7 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1 +-") NOT = 4
+ DISPLAY "Test 8 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1 -+") NOT = 4
+ DISPLAY "Test 9 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("+ 1.1") NOT = 0
+ DISPLAY "Test 10 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("- 1.1") NOT = 0
+ DISPLAY "Test 11 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 +") NOT = 0
+ DISPLAY "Test 12 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 -") NOT = 0
+ DISPLAY "Test 13 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 CR") NOT = 0
+ DISPLAY "Test 14 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 DB") NOT = 0
+ DISPLAY "Test 15 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 -CR") NOT = 6
+ DISPLAY "Test 16 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 +DB") NOT = 6
+ DISPLAY "Test 17 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("1.1 CDB") NOT = 6
+ DISPLAY "Test 18 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("+1.1 CR") NOT = 6
+ DISPLAY "Test 19 fail"
+ END-DISPLAY
+ END-IF.
+ IF FUNCTION TEST-NUMVAL ("+ ") NOT = 8
+ DISPLAY "Test 20 fail"
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob
new file mode 100644
index 0000000..054b14a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_TRIM.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(12) VALUE " a#b.c%d+e$ ".
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION TRIM ( X )
+ END-DISPLAY.
+ DISPLAY FUNCTION TRIM ( X TRAILING )
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out
new file mode 100644
index 0000000..b0e4a72
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM.out
@@ -0,0 +1,3 @@
+a#b.c%d+e$
+ a#b.c%d+e$
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.cob
new file mode 100644
index 0000000..f14f0fa
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_TRIM_with_reference_modding.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(12) VALUE " a#b.c%d+e$ ".
+ PROCEDURE DIVISION.
+ DISPLAY FUNCTION TRIM ( X ) (2 : 3)
+ END-DISPLAY.
+ DISPLAY FUNCTION TRIM ( X TRAILING ) (2 : 3)
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.out
new file mode 100644
index 0000000..f716581
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_with_reference_modding.out
@@ -0,0 +1,3 @@
+#b.
+a#b
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.cob
new file mode 100644
index 0000000..d92a490
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.cob
@@ -0,0 +1,18 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_TRIM_zero_length.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 A2 PIC X(2) VALUE " ".
+ 01 A3 PIC X(3) VALUE " ".
+ 01 X PIC X(4) VALUE "NOOK".
+ PROCEDURE DIVISION.
+ MOVE FUNCTION TRIM ( A2 ) TO X.
+ DISPLAY ">" X "<"
+ END-DISPLAY.
+ DISPLAY ">" FUNCTION TRIM ( A3 ) "<"
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.out
new file mode 100644
index 0000000..9aa7900
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_TRIM_zero_length.out
@@ -0,0 +1,3 @@
+> <
+><
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE.cob
new file mode 100644
index 0000000..9bf6a6b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(10) VALUE "a#b.c%d+e$".
+ 01 Z PIC X(10).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION UPPER-CASE ( X ) TO Z.
+ IF Z NOT = "A#B.C%D+E$"
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE_with_reference_modding.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE_with_reference_modding.cob
new file mode 100644
index 0000000..2f96446
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_UPPER-CASE_with_reference_modding.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(10) VALUE "a#b.c%d+e$".
+ 01 Z PIC X(4).
+ PROCEDURE DIVISION.
+ MOVE FUNCTION UPPER-CASE ( X ) (1 : 3) TO Z.
+ IF Z NOT = "A#B "
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_VARIANCE.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_VARIANCE.cob
new file mode 100644
index 0000000..0a08f5a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_VARIANCE.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC S9(4)V9(4) COMP-5.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION VARIANCE ( 3 -14 0 8 -3 ) TO Z.
+ IF Z NOT = 54.16
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob
new file mode 100644
index 0000000..d47967b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_WHEN-COMPILED.cob
@@ -0,0 +1,45 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 compiled-datetime.
+ 03 compiled-date.
+ 05 millennium PIC X.
+ 05 FILLER PIC X(15).
+ 03 timezone PIC X(5).
+ PROCEDURE DIVISION.
+ *> Check millennium.
+ MOVE FUNCTION WHEN-COMPILED TO compiled-datetime.
+ IF millennium NOT = "2"
+ DISPLAY "Millennium NOT OK: " millennium
+ END-DISPLAY
+ END-IF.
+
+ *> Check timezone.
+ IF timezone NOT = FUNCTION CURRENT-DATE (17:5)
+ DISPLAY "Timezone NOT OK: " timezone
+ END-DISPLAY
+ END-IF.
+
+ *> Check date format.
+ INSPECT compiled-date CONVERTING "0123456789"
+ TO "9999999999".
+ IF compiled-date NOT = ALL "9"
+ DISPLAY "Date format NOT OK: " compiled-date
+ END-DISPLAY
+ END-IF.
+
+ *> Check timezone format.
+ IF timezone NOT = "00000"
+ INSPECT timezone CONVERTING "0123456789"
+ TO "9999999999"
+ IF timezone NOT = "+9999" AND "-9999"
+ DISPLAY "Timezone format NOT OK: " timezone
+ END-DISPLAY
+ END-IF
+ END-IF.
+
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob
new file mode 100644
index 0000000..ece8151
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_YEAR-TO-YYYY.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z USAGE BINARY-LONG.
+ PROCEDURE DIVISION.
+ MOVE FUNCTION YEAR-TO-YYYY ( 50 ) TO Z.
+ IF Z NOT = 2050
+ DISPLAY Z
+ END-DISPLAY
+ END-IF.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob
new file mode 100644
index 0000000..e25ac8b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.cob
@@ -0,0 +1,27 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ PROCEDURE DIVISION.
+ PROG-MAIN.
+ CALL "subprog" USING BY CONTENT
+ FUNCTION CONCAT("Abc" "D")
+ STOP RUN.
+
+ *> *****************************
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. subprog.
+
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 TESTING PIC X ANY LENGTH.
+
+ PROCEDURE DIVISION USING TESTING.
+ SUBPROG-MAIN.
+ DISPLAY TESTING
+ GOBACK.
+ END PROGRAM subprog.
+ END PROGRAM prog. *> bzzt
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out b/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out
new file mode 100644
index 0000000..11f0477
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_as_CALL_parameter_BY_CONTENT.out
@@ -0,0 +1,2 @@
+AbcD
+
diff --git a/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob b/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
new file mode 100644
index 0000000..b94adf5
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob
@@ -0,0 +1,17 @@
+ *> { dg-do run }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION PI
+ FUNCTION E.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 Z PIC 99V99.
+ PROCEDURE DIVISION.
+ MOVE PI TO Z.
+ MOVE E TO Z.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob
new file mode 100644
index 0000000..6475356
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 5.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(1:I) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out
new file mode 100644
index 0000000..78981922
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out
@@ -0,0 +1 @@
+a
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob
new file mode 100644
index 0000000..351c9df
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 5.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(3:I) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out
new file mode 100644
index 0000000..f2ad6c7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out
@@ -0,0 +1 @@
+c
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob
new file mode 100644
index 0000000..9f7fa83
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow_with_offset__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 3.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(3:I) NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out
new file mode 100644
index 0000000..f2ad6c7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out
@@ -0,0 +1 @@
+c
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob
new file mode 100644
index 0000000..d077373
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow_with_offset__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 3.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ IF X(3:I) <> SPACES
+ DISPLAY X(3:I) NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out
@@ -0,0 +1 @@
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob
new file mode 100644
index 0000000..7fa9843
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow_with_offset__3_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 3.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ EVALUATE TRUE
+ WHEN I < 2
+ AND X(3:I) <> SPACES
+ DISPLAY "1-" X(3:I) NO ADVANCING
+ WHEN I < 2
+ WHEN X(3:I) <> SPACES
+ DISPLAY "2-" X(3:I) NO ADVANCING
+ END-EVALUATE
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out
@@ -0,0 +1 @@
+
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_overflow.cob b/gcc/testsuite/cobol.dg/group2/Offset_overflow.cob
new file mode 100644
index 0000000..8fd5421
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_overflow.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Offset_overflow.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01.
+ 03 X PIC X(4) VALUE "abcd".
+ 03 I PIC 9 VALUE 5.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(I:1) NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_overflow.out b/gcc/testsuite/cobol.dg/group2/Offset_overflow.out
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_overflow.out
@@ -0,0 +1 @@
+5
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_underflow.cob b/gcc/testsuite/cobol.dg/group2/Offset_underflow.cob
new file mode 100644
index 0000000..51100a8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_underflow.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Offset_underflow.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 0.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(I:1) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_underflow.out b/gcc/testsuite/cobol.dg/group2/Offset_underflow.out
new file mode 100644
index 0000000..78981922
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_underflow.out
@@ -0,0 +1 @@
+a
diff --git a/gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob b/gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob
new file mode 100644
index 0000000..6e0443d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.cob
@@ -0,0 +1,237 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Program-to-program_parameters_and_retvals.out" }
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 var1 pic 9 VALUE 1.
+ 01 var2 BINARY-CHAR VALUE 22.
+ 01 var3 pic s999 COMP-3 VALUE -333.
+ 01 var4 pic 9999 BINARY VALUE 4444.
+ 01 var5 pic 99.99 VALUE "12.34".
+ 01 var6 pic s999V999 COMP-5 VALUE -123.456.
+ 01 var7 float-short VALUE 1.23E10.
+ 01 var8 float-long VALUE -1.23E20.
+ 01 var9 float-extended VALUE 1.23E40.
+ 01 var64 pic 9(15) VALUE 987654321098765.
+ 01 var128 pic s9(30) VALUE -987654321098765432109876543210.
+ 01 filler.
+ 02 varpd pic 9(18) comp-5 value 1250999747361.
+ 02 varp redefines varpd pointer.
+ 01 varg.
+ 02 varg1 pic x(7) VALUE "That's".
+ 02 varg2 pic x(5) VALUE "all," .
+ 02 varg3 pic x(7) VALUE "folks!".
+
+ 01 var1r pic 9 .
+ 01 var2r BINARY-CHAR .
+ 01 var3r pic s999 COMP-3 .
+ 01 var4r pic 9999 BINARY .
+ 01 var5r pic 99.99 .
+ 01 var6r pic s999V999 COMP-5 .
+ 01 var7r float-short .
+ 01 var8r float-long .
+ 01 var9r float-extended .
+ 01 var64r pic 9(15) .
+ 01 var128r pic s9(30) .
+ 01 varpr pointer.
+ 01 vargr.
+ 02 varg1 pic x(7).
+ 02 varg2 pic x(5).
+ 02 varg3 pic x(7).
+
+ PROCEDURE DIVISION.
+ display var1
+ call "rvar1" USING by value var1 RETURNING var1r
+ display var1r
+
+ display var2
+ call "rvar2" USING by reference var2 RETURNING var2r
+ display var2r
+
+ display var3
+ call "rvar3" USING by content var3 RETURNING var3r
+ display var3r
+
+ display var4
+ call "rvar4" USING by value var4 RETURNING var4r
+ display var4r
+
+ display var5
+ call "rvar5" USING by reference var5 RETURNING var5r
+ display var5r
+
+ display var6
+ call "rvar6" USING by content var6 RETURNING var6r
+ display var6r
+
+ display var7
+ call "rvar7" USING by reference var7 RETURNING var7r
+ display var7r
+
+ display var8
+ call "rvar8" USING by value var8 RETURNING var8r
+ display var8r
+
+ display var9
+ call "rvar9" USING by content var9 RETURNING var9r
+ display var9r
+
+ display var64
+ call "rvar64" USING by value var64 RETURNING var64r
+ display var64r
+
+ display var128
+ call "rvar128" USING by reference var128 RETURNING var128r
+ display var128r
+
+ display varp
+ call "rvarp" USING by reference varp RETURNING varpr
+ display varpr
+
+ display """"varg""""
+ call "rvarg" USING by reference varg RETURNING vargr
+ display """"vargr""""
+
+ GOBACK.
+ END PROGRAM prog.
+
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar1.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic 9 .
+ 01 varr pic 9 .
+ PROCEDURE DIVISION USING by value var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar1.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar2.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var BINARY-CHAR .
+ 01 varr BINARY-CHAR .
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar2.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar3.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic s999 COMP-3 .
+ 01 varr pic s999 COMP-3 .
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar3.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar4.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic 9999 BINARY .
+ 01 varr pic 9999 BINARY .
+ PROCEDURE DIVISION USING by value var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar4.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar5.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic 99.99 .
+ 01 varr pic 99.99 .
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar5.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar6.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic s999V999 COMP-5 .
+ 01 varr pic s999V999 COMP-5 .
+ PROCEDURE DIVISION USING reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar6.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar7.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var float-short .
+ 01 varr float-short .
+ PROCEDURE DIVISION USING by reference VAR RETURNING varr.
+ MOVE var TO varr.
+ GOBACK.
+ END PROGRAM rvar7.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar8.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var float-long .
+ 01 varr float-long .
+ PROCEDURE DIVISION USING by value var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar8.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar9.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var float-extended .
+ 01 varr float-extended .
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar9.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar64.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic 9(15) .
+ 01 varr pic 9(15) .
+ PROCEDURE DIVISION USING by value var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar64.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvar128.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pic s9(30) .
+ 01 varr pic s9(30) .
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvar128.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvarp.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var pointer .
+ 01 varr pointer .
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ SET varr TO var.
+ END PROGRAM rvarp.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. rvarg.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 var.
+ 02 varg1 pic x(7).
+ 02 varg2 pic x(5).
+ 02 varg3 pic x(7).
+ 01 varr.
+ 02 varg1 pic x(7).
+ 02 varg2 pic x(5).
+ 02 varg3 pic x(7).
+ PROCEDURE DIVISION USING by reference var RETURNING varr.
+ MOVE var TO varr.
+ END PROGRAM rvarg.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.out b/gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.out
new file mode 100644
index 0000000..ce543df
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Program-to-program_parameters_and_retvals.out
@@ -0,0 +1,27 @@
+1
+1
++022
++022
+-333
+-333
+4444
+4444
+12.34
+12.34
+-123.456
+-123.456
+1.230000026E+10
+1.230000026E+10
+-1.23E+20
+-1.23E+20
+1.23E+40
+1.23E+40
+987654321098765
+987654321098765
+-987654321098765432109876543210
+-987654321098765432109876543210
+0x0000012345654321
+0x0000012345654321
+"That's all, folks! "
+"That's all, folks! "
+
diff --git a/gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob b/gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob
new file mode 100644
index 0000000..122aab7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.cob
@@ -0,0 +1,38 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Recursive_FUNCTION_with_local-storage.out" }
+ IDENTIFICATION DIVISION.
+ FUNCTION-ID. callee.
+ DATA DIVISION.
+ LOCAL-STORAGE SECTION.
+ 01 LCL-X PIC 999 .
+ LINKAGE SECTION.
+ 01 parm PIC 999.
+ 01 retval PIC 999.
+ PROCEDURE DIVISION USING parm RETURNING retval.
+ display "On entry, parm is: " parm
+ move parm to lcl-x
+ move parm to retval
+ subtract 1 from parm
+ if parm > 0
+ display "A The function returns " function callee(parm).
+ if lcl-x not equal to retval
+ display "On exit, lcl-s and retval are: " lcl-x " and " retval
+ display "But they should be equal to each other"
+ end-if
+ goback.
+ end function callee.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. caller.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION callee.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 val PIC 999 VALUE 5.
+ PROCEDURE DIVISION.
+ DISPLAY "Starting value is: " val
+ display "B The function returns " function callee(val).
+ STOP RUN.
+ end program caller.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out b/gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out
new file mode 100644
index 0000000..3ccd69a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Recursive_FUNCTION_with_local-storage.out
@@ -0,0 +1,12 @@
+Starting value is: 005
+On entry, parm is: 005
+On entry, parm is: 004
+On entry, parm is: 003
+On entry, parm is: 002
+On entry, parm is: 001
+A The function returns 001
+A The function returns 002
+A The function returns 003
+A The function returns 004
+B The function returns 005
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob
new file mode 100644
index 0000000..6fb70f4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob
@@ -0,0 +1,20 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Refmod__comparisons_inside_numeric-display.out" }
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 n pic 9(9).
+ 01 i pic 99.
+ procedure division.
+ perform varying i from 1 by 1 until i > 8
+ move 88888888 to n
+ move "12" to n(i:2)
+ display n
+ if n(i:2) not equal to "12"
+ display "Equality is flawed"
+ end-if
+ end-perform.
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out
new file mode 100644
index 0000000..ac48dc8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out
@@ -0,0 +1,9 @@
+128888888
+012888888
+081288888
+088128888
+088812888
+088881288
+088888128
+088888812
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob
new file mode 100644
index 0000000..c4af57d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob
@@ -0,0 +1,29 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Refmod_sources_are_figurative_constants.out" }
+
+ id division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 varx pic x(8) VALUE '""""""""'.
+ 01 varp redefines varx pointer.
+ procedure division.
+ move "12345678" to varx
+ display """" varx """"
+ move "999" to varx(4:3)
+ display """" varx """"
+ move LOW-VALUE to varx(4:3).
+ display """" varx """"
+ move ZERO to varx(4:3).
+ display """" varx """"
+ move SPACE to varx(4:3).
+ display """" varx """"
+ move QUOTE to varx(4:3).
+ display """" varx """"
+ move HIGH-VALUE to varx(4:3).
+ display varp
+ initialize varx all to value
+ display """" varx """"
+ .
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out
new file mode 100644
index 0000000..2f5dadc
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out
@@ -0,0 +1,9 @@
+"12345678"
+"12399978"
+"123"
+"12300078"
+"123 78"
+"123"""78"
+0x3837ffffff333231
+""""""""""
+
diff --git a/gcc/testsuite/cobol.dg/group2/Repository_functions_clause.cob b/gcc/testsuite/cobol.dg/group2/Repository_functions_clause.cob
new file mode 100644
index 0000000..cc306b4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Repository_functions_clause.cob
@@ -0,0 +1,14 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Repository_functions_clause.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ SOURCE-COMPUTER. a.
+ OBJECT-COMPUTER. a.
+ REPOSITORY.
+ FUNCTION ALL INTRINSIC.
+ PROCEDURE DIVISION.
+ DISPLAY "OK".
+
diff --git a/gcc/testsuite/cobol.dg/group2/Repository_functions_clause.out b/gcc/testsuite/cobol.dg/group2/Repository_functions_clause.out
new file mode 100644
index 0000000..885fd66
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Repository_functions_clause.out
@@ -0,0 +1,2 @@
+OK
+
diff --git a/gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob
new file mode 100644
index 0000000..919ddb3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Static_reference_modification.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ PROCEDURE DIVISION.
+ DISPLAY X(1:1) ":" X(1:2) ":" X(1:3) ":" X(1:4) ":" X(1:)
+ END-DISPLAY.
+ DISPLAY X(2:1) ":" X(2:2) ":" X(2:3) ":" X(2:)
+ END-DISPLAY.
+ DISPLAY X(3:1) ":" X(3:2) ":" X(3:)
+ END-DISPLAY.
+ DISPLAY X(4:1) ":" X(4:)
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Static_reference_modification.out b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.out
new file mode 100644
index 0000000..fe51165
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.out
@@ -0,0 +1,5 @@
+a:ab:abc:abcd:abcd
+b:bc:bcd:bcd
+c:cd:cd
+d:d
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.cob b/gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.cob
new file mode 100644
index 0000000..d4df058
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.cob
@@ -0,0 +1,51 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/UDF_RETURNING_group_and_PIC_9_5_.out" }
+
+ IDENTIFICATION DIVISION.
+ FUNCTION-ID. COPYPAR.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 PARSA.
+ 02 PAR1 PICTURE X(32).
+ 02 PAR2 PICTURE X(32).
+ 01 PARSB.
+ 02 PAR1 PICTURE X(32).
+ 02 PAR2 PICTURE X(32).
+ PROCEDURE DIVISION USING PARSA RETURNING PARSB.
+ MOVE PARSA TO PARSB
+ DISPLAY """" PARSB """"
+ GOBACK.
+ END FUNCTION COPYPAR.
+ IDENTIFICATION DIVISION.
+ FUNCTION-ID. COPYPAR2.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 PARSB PIC 99999.
+ 01 PAR5 PIC 99999.
+ PROCEDURE DIVISION USING PAR5 RETURNING PARSB.
+ MOVE PAR5 TO PARSB
+ DISPLAY PARSB
+ GOBACK.
+ END FUNCTION COPYPAR2.
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION COPYPAR, COPYPAR2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 PARS1.
+ 02 PAR1 PICTURE X(32) VALUE "Santa".
+ 02 PAR2 PICTURE X(32) VALUE "Claus".
+ 01 PARS2.
+ 02 PAR1 PICTURE X(32).
+ 02 PAR2 PICTURE X(32).
+ 01 PAR5 PICTURE 99999 VALUE 54321.
+ PROCEDURE DIVISION.
+ MOVE COPYPAR(PARS1) TO PARS2
+ DISPLAY """" PARS2 """".
+ DISPLAY COPYPAR2(PAR5)
+ STOP RUN.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.out b/gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.out
new file mode 100644
index 0000000..1361e9a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_RETURNING_group_and_PIC_9_5_.out
@@ -0,0 +1,5 @@
+"Santa Claus "
+"Santa Claus "
+54321
+54321
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.cob b/gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.cob
new file mode 100644
index 0000000..71ef09b
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.cob
@@ -0,0 +1,39 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/UDF_fibonacci_recursion.out" }
+
+ identification division.
+ function-id. fib-func.
+ data division.
+ working-storage section.
+ 01 instance pic 9999 value 0.
+ linkage section.
+ 01 n binary-char unsigned.
+ 01 f-n binary-long unsigned.
+ procedure division using n returning f-n.
+ evaluate true
+ when n = 0
+ move 0 to f-n
+ when n = 1
+ move 1 to f-n
+ when other
+ compute f-n = fib-func(n - 1) + fib-func(n - 2)
+ end-evaluate
+ goback .
+ end function fib-func.
+
+ identification division.
+ program-id. pmain.
+ environment division.
+ configuration section.
+ repository.
+ function fib-func.
+ data division.
+ working-storage section.
+ 01 n binary-char unsigned.
+ procedure division.
+ perform varying n from 1 by 1 until n > 16
+ display "fibonacci(" n "): " fib-func(n)
+ end-perform
+ stop run.
+ end program pmain.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.out b/gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.out
new file mode 100644
index 0000000..34dabfb
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_fibonacci_recursion.out
@@ -0,0 +1,17 @@
+fibonacci(001): 1
+fibonacci(002): 1
+fibonacci(003): 2
+fibonacci(004): 3
+fibonacci(005): 5
+fibonacci(006): 8
+fibonacci(007): 13
+fibonacci(008): 21
+fibonacci(009): 34
+fibonacci(010): 55
+fibonacci(011): 89
+fibonacci(012): 144
+fibonacci(013): 233
+fibonacci(014): 377
+fibonacci(015): 610
+fibonacci(016): 987
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.cob b/gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.cob
new file mode 100644
index 0000000..74576b6
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.cob
@@ -0,0 +1,33 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/UDF_in_COMPUTE.out" }
+
+ IDENTIFICATION DIVISION.
+ FUNCTION-ID. func.
+
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 01 num PIC 999.
+
+ PROCEDURE DIVISION RETURNING num.
+ MOVE 100 TO num
+ .
+ END FUNCTION func.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION func.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 x PIC 999.
+
+ PROCEDURE DIVISION.
+ COMPUTE x = 101 + FUNCTION func
+ DISPLAY x
+ .
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.out b/gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.out
new file mode 100644
index 0000000..d757a46
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_in_COMPUTE.out
@@ -0,0 +1,2 @@
+201
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_with_recursion.cob b/gcc/testsuite/cobol.dg/group2/UDF_with_recursion.cob
new file mode 100644
index 0000000..1e9b378
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_with_recursion.cob
@@ -0,0 +1,49 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/UDF_with_recursion.out" }
+
+ IDENTIFICATION DIVISION.
+ FUNCTION-ID. foo.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 ttl PIC 9 VALUE 1.
+
+ LOCAL-STORAGE SECTION.
+ 01 num PIC 9.
+
+ LINKAGE SECTION.
+ 01 arg PIC 9.
+ 01 ret PIC 9.
+
+ PROCEDURE DIVISION USING arg RETURNING ret.
+ IF arg < 5
+ ADD 1 TO arg GIVING num END-ADD
+ MOVE FUNCTION foo (num) TO ret
+ ELSE
+ MOVE arg TO ret
+ END-IF
+ DISPLAY "Step: " ttl ", Arg: " arg ", Return: " ret
+ END-DISPLAY
+ ADD 1 to ttl END-ADD
+ GOBACK.
+ END FUNCTION foo.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+
+ ENVIRONMENT DIVISION.
+ CONFIGURATION SECTION.
+ REPOSITORY.
+ FUNCTION foo.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 num PIC 9 VALUE 1.
+
+ PROCEDURE DIVISION.
+ DISPLAY "Return value '" FUNCTION foo (num) "'"
+ WITH NO ADVANCING
+ END-DISPLAY
+ GOBACK.
+ END PROGRAM prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/UDF_with_recursion.out b/gcc/testsuite/cobol.dg/group2/UDF_with_recursion.out
new file mode 100644
index 0000000..13bd1e9
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/UDF_with_recursion.out
@@ -0,0 +1,6 @@
+Step: 1, Arg: 5, Return: 5
+Step: 2, Arg: 4, Return: 5
+Step: 3, Arg: 3, Return: 5
+Step: 4, Arg: 2, Return: 5
+Step: 5, Arg: 1, Return: 5
+Return value '5'
diff --git a/gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.cob b/gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.cob
new file mode 100644
index 0000000..3753e7a
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.cob
@@ -0,0 +1,36 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/call_subprogram_using_pointer__passing_pointer.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 varp program-pointer.
+ PROCEDURE DIVISION.
+ SET varp TO ENTRY "ref".
+ CALL "sub" USING BY VALUE varp.
+ end program prog.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. sub.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 param pic x(12) value "hi".
+ LINKAGE SECTION.
+ 77 varp program-pointer.
+ PROCEDURE DIVISION USING BY VALUE varp.
+ DISPLAY "About to call 'ref hi' directly"
+ CALL "ref" USING param.
+ DISPLAY "About to call 'ref hi' indirectly"
+ CALL varp USING param.
+ end program sub.
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. ref.
+ DATA DIVISION.
+ LINKAGE SECTION.
+ 77 greeting pic x(12).
+ PROCEDURE DIVISION using greeting.
+ DISPLAY """" greeting """".
+ end program ref.
+
diff --git a/gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out b/gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out
new file mode 100644
index 0000000..7a12ec1
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/call_subprogram_using_pointer__passing_pointer.out
@@ -0,0 +1,5 @@
+About to call 'ref hi' directly
+"hi "
+About to call 'ref hi' indirectly
+"hi "
+
diff --git a/gcc/testsuite/g++.dg/cpp/pr119391.C b/gcc/testsuite/g++.dg/cpp/pr119391.C
new file mode 100644
index 0000000..6e70efc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp/pr119391.C
@@ -0,0 +1,15 @@
+// PR preprocessor/119391
+// { dg-do preprocess }
+// { dg-options "" }
+
+#if (1 << 63) != -9223372036854775807 - 1 // { dg-warning "integer overflow in preprocessor expression" "" { target c++98_only } }
+#warning "Unexpected value"
+#endif
+#if (3 << 62) != -4611686018427387904 // { dg-warning "integer overflow in preprocessor expression" "" { target c++98_only } }
+#warning "Unexpected value"
+#endif
+#if 1 << 64 // { dg-warning "integer overflow in preprocessor expression" }
+#endif
+#if (3 << 63) != -9223372036854775807 - 1 // { dg-warning "integer overflow in preprocessor expression" "" { target c++17_down } }
+#warning "Unexpected value"
+#endif
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ref14.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref14.C
new file mode 100644
index 0000000..f201afb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ref14.C
@@ -0,0 +1,21 @@
+// PR c++/118249
+// { dg-do compile { target c++11 } }
+
+template <int I>
+void f() { }
+
+template <int N>
+struct array {
+ constexpr int size() const { return N; }
+};
+
+extern array<10>& outer;
+
+struct C {
+ array<10> inner;
+
+ void g() {
+ f<outer.size()>(); // OK
+ f<inner.size()>(); // was error: use of 'this' in a constant expression
+ }
+};
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C
index 1bc2a8f..52328bc 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret2.C
@@ -17,5 +17,5 @@ bar ()
return ((void **) &s)[0]; // { dg-error "reinterpret_cast" }
}
-constexpr auto x = foo ();
-constexpr auto y = bar ();
+constexpr auto x = foo (); // { dg-error "called in a constant expression" }
+constexpr auto y = bar (); // { dg-error "called in a constant expression" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__3.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__3.C
new file mode 100644
index 0000000..50ad6e5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-__func__3.C
@@ -0,0 +1,6 @@
+// PR c++/118629
+// { dg-do compile { target c++11 } }
+
+void foo() {
+ []() -> decltype(+__FUNCTION__) { return nullptr; };
+}
diff --git a/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
new file mode 100644
index 0000000..4494c70
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
@@ -0,0 +1,21 @@
+// PR c++/119687
+// { dg-do compile { target c++17 } }
+
+template <typename> class QFlagsStorage{};
+
+template <typename Enum> struct QFlagsStorageHelper : QFlagsStorage<Enum> {
+ using QFlagsStorage<Enum>::QFlagsStorage;
+
+public:
+ QFlagsStorageHelper(Enum);
+};
+
+template <typename Enum> struct QFlags : public QFlagsStorageHelper<Enum> {
+ using Base = QFlagsStorageHelper<Enum>;
+ using Base::Base;
+ QFlags(Enum);
+};
+
+void f(int flag) {
+ QFlags{int{}};
+}
diff --git a/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit12.C b/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit12.C
index 8f003b8..b104b16 100644
--- a/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit12.C
+++ b/gcc/testsuite/g++.dg/cpp23/constexpr-nonlit12.C
@@ -19,6 +19,6 @@ void
g ()
{
constexpr int i = 42;
- constexpr auto a1 = fn0 (&i);
+ constexpr auto a1 = fn0 (&i); // { dg-error "called in a constant expression" }
constexpr auto a2 = fn1 (i); // { dg-error "called in a constant expression" }
}
diff --git a/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25.C b/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25.C
new file mode 100644
index 0000000..37ab932
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25.C
@@ -0,0 +1,19 @@
+// PR c++/118626
+// { dg-do compile { target c++20 } }
+
+template<long> struct _Nth_type;
+
+template<class _Up>
+struct variant {
+ template<class _Tp> static constexpr long __accepted_index = 0;
+ template<long _Np> using __to_type = _Nth_type<_Np>;
+ template<class _Tp> using __accepted_type = __to_type<__accepted_index<_Tp>>;
+ template<class = __accepted_type<_Up>> variant(_Up);
+};
+
+template<class _Tp>
+struct Node { Node(_Tp); };
+
+template<class R> using Tree = variant<Node<R>>;
+using type = decltype(Tree{Node{42}});
+using type = Tree<int>;
diff --git a/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25a.C b/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25a.C
new file mode 100644
index 0000000..74ef1e4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias25a.C
@@ -0,0 +1,19 @@
+// PR c++/118626
+// { dg-do compile { target c++20 } }
+
+template<long> struct _Nth_type { using type = _Nth_type; };
+
+template<class _Up>
+struct variant {
+ template<class _Tp> static constexpr long __accepted_index = 0;
+ template<long _Np> using __to_type = typename _Nth_type<_Np>::type;
+ template<class _Tp, int = sizeof(_Tp)> using __accepted_type = __to_type<__accepted_index<_Tp>>;
+ template<class = __accepted_type<_Up>> variant(_Up);
+};
+
+template<class _Tp>
+struct Node { Node(_Tp); };
+
+template<class R> using Tree = variant<Node<R>>;
+using type = decltype(Tree{Node{42}});
+using type = Tree<int>;
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C
new file mode 100644
index 0000000..2437b7e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C
@@ -0,0 +1,21 @@
+// PR c++/118698
+// { dg-do compile { target c++20 } }
+
+template <typename T> struct foo {};
+template <typename T> struct bar {};
+
+template <class T> T&& declval ();
+
+template <typename T, typename U>
+concept callable = requires { declval<T>()(declval<U>()); };
+
+template <typename T, template <typename...> typename U>
+concept is_specialization_of = callable<decltype([]<typename... Args>( U<Args...> const& ) { }),T>;
+
+static_assert( is_specialization_of<foo<int>,foo> == true );
+static_assert( is_specialization_of<foo<int>,bar> == false );
+
+template <typename T> concept is_foo = is_specialization_of<T,foo>;
+
+static_assert( is_foo<foo<int>> );
+static_assert( is_foo<bar<int>> == false );
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C
new file mode 100644
index 0000000..f442120
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C
@@ -0,0 +1,12 @@
+// PR c++/119175
+// { dg-do compile { target c++20 } }
+
+template<int = 0>
+static void from() requires requires {
+ []<int> requires requires { [] {}; } {};
+}
+{}
+
+int main() {
+ from();
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-requires41.C b/gcc/testsuite/g++.dg/cpp2a/concepts-requires41.C
new file mode 100644
index 0000000..28c9761
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-requires41.C
@@ -0,0 +1,25 @@
+// PR c++/117849
+// { dg-do compile { target c++20 } }
+
+template<int N>
+struct array {
+ constexpr int size() const { return N; }
+};
+
+struct vector {
+ int _size = 3;
+ constexpr int size() const { return _size; }
+};
+
+template<int N>
+struct integral_constant {
+ constexpr operator int() const { return N; }
+};
+
+template<class T>
+concept StaticSize = requires (T& t) {
+ typename integral_constant<t.size()>;
+};
+
+static_assert(StaticSize<array<5>>);
+static_assert(!StaticSize<vector>);
diff --git a/gcc/testsuite/g++.dg/cpp2a/constinit20.C b/gcc/testsuite/g++.dg/cpp2a/constinit20.C
new file mode 100644
index 0000000..9b04391
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/constinit20.C
@@ -0,0 +1,18 @@
+// PR c++/119652
+// { dg-do compile { target c++20 } }
+
+struct __shared_count {
+ constexpr __shared_count() {}
+ ~__shared_count();
+ int _M_pi = 0;
+};
+struct shared_ptr {
+ __shared_count _M_refcount;
+};
+struct A {
+ A() = default;
+ shared_ptr m;
+};
+constinit A a;
+constinit A b {};
+constinit A c = {};
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-requires2.C b/gcc/testsuite/g++.dg/cpp2a/lambda-requires2.C
new file mode 100644
index 0000000..be5a71a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-requires2.C
@@ -0,0 +1,8 @@
+// PR c++/99546
+// { dg-do compile { target c++20 } }
+
+int main() {
+ constexpr auto b = requires { []{}; };
+ static_assert(b);
+ static_assert(!b); // { dg-error "assertion failed" }
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-requires3.C b/gcc/testsuite/g++.dg/cpp2a/lambda-requires3.C
new file mode 100644
index 0000000..8c4ef06
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-requires3.C
@@ -0,0 +1,6 @@
+// PR c++/113925
+// { dg-do compile { target c++20 } }
+
+template<bool B>
+struct b{};
+static_assert(requires { b<([]()consteval{ return true; }())>{}; });
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-requires4.C b/gcc/testsuite/g++.dg/cpp2a/lambda-requires4.C
new file mode 100644
index 0000000..f3bb041
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-requires4.C
@@ -0,0 +1,6 @@
+// PR c++/106976
+// { dg-do compile { target c++20 } }
+
+struct S{
+ constexpr static auto s = requires { []; }; // { dg-error "expected '\{'" }
+};
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-requires5.C b/gcc/testsuite/g++.dg/cpp2a/lambda-requires5.C
new file mode 100644
index 0000000..c818313
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-requires5.C
@@ -0,0 +1,10 @@
+// PR c++/109961
+// { dg-do compile { target c++20 } }
+
+auto a = requires{
+ []( int b ) consteval {
+ if( b ) {
+ throw b;
+ }
+ }( 0 );
+};
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C
new file mode 100644
index 0000000..8fd0a31
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C
@@ -0,0 +1,7 @@
+// PR c++/119574
+// { dg-do compile { target c++20 } }
+
+template <class F = decltype([] <auto G = [] {}> () {})>
+void f(F op = {}) { op(); }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C
new file mode 100644
index 0000000..8aaefd9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C
@@ -0,0 +1,8 @@
+// PR c++/119574
+// A version of lambda-targ13.C with extra template parameters.
+// { dg-do compile { target c++20 } }
+
+template <int = 0, class F = decltype([] <int = 1, auto G = [] {}> () {})>
+void f(F op = {}) { op(); }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C
new file mode 100644
index 0000000..7f541c7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C
@@ -0,0 +1,8 @@
+// PR c++/119574
+// A version of lambda-targ13.C where the inner lambda returns non-void.
+// { dg-do compile { target c++20 } }
+
+template <class F = decltype([] <auto G = [] { return 42; }> () { return G(); })>
+constexpr int f(F op = {}) { return op(); }
+
+static_assert(f() == 42);
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C
new file mode 100644
index 0000000..debb15e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C
@@ -0,0 +1,12 @@
+// PR c++/119345
+// { dg-do compile { target c++20 } }
+
+void f(auto... args) {
+ [args...]<int... i> {
+ (..., [args...] { i; });
+ }.template operator()<0>();
+}
+
+int main() {
+ f();
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C
new file mode 100644
index 0000000..941fe63
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C
@@ -0,0 +1,10 @@
+// PR c++/117530
+// { dg-do compile { target c++20 } }
+
+template <class> struct A;
+template <class T> using B = decltype([]() -> A<T>::X { return 0; });
+template <class T> struct A {
+ typedef int X;
+ typedef B<T> U;
+};
+B<short> b;
diff --git a/gcc/testsuite/g++.dg/gomp/append-args-8.C b/gcc/testsuite/g++.dg/gomp/append-args-8.C
index 379c767..3052c5b 100644
--- a/gcc/testsuite/g++.dg/gomp/append-args-8.C
+++ b/gcc/testsuite/g++.dg/gomp/append-args-8.C
@@ -82,11 +82,11 @@ test (int *a, int *b)
/* { dg-final { scan-tree-dump-times "__builtin_omp_set_default_device \\(D\.\[0-9\]+\\);" 2 "gimple" } } */
/* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = __builtin_omp_get_mapped_ptr \\(a, D\.\[0-9\]+\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 1, interopobjs\.\[0-9\], tgt_tgtsync\.\[0-9\]+, pref_type.2, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 1, &interopobjs\.\[0-9\], &tgt_tgtsync\.\[0-9\]+, &pref_type.2, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
/* { dg-final { scan-tree-dump-times "repl2<int\\*, int\\*, omp_interop_t> \\(b, D\.\[0-9\]+, obj1, interop\.\[0-9\]+\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 1, interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 1, &interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 0, 0B, 0B, 0B, 0, 0B, 3, interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 0, 0B, 0B, 0B, 0, 0B, 3, &interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
/* { dg-final { scan-tree-dump-times "repl3<int\\*, omp_interop_t> \\(a, interop\.\[0-9\]+, interop\.\[0-9\]+, interop\.\[0-9\]+, 1, 2, \"abc\"\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 3, interopobjs\.\[0-9\]+, tgt_tgtsync\.\[0-9\]+, pref_type\.\[0-9\]+, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 3, &interopobjs\.\[0-9\]+, &tgt_tgtsync\.\[0-9\]+, &pref_type\.\[0-9\]+, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
diff --git a/gcc/testsuite/g++.dg/modules/gc-3_a.C b/gcc/testsuite/g++.dg/modules/gc-3_a.C
new file mode 100644
index 0000000..b4adb2a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/gc-3_a.C
@@ -0,0 +1,7 @@
+// PR c++/119564
+// { dg-additional-options "-fmodules -Wtemplate-names-tu-local" }
+// { dg-module-cmi M }
+
+export module M;
+static void foo() {}; // { dg-message "declared" }
+template <typename> void bar() { foo(); } // { dg-warning "TU-local" }
diff --git a/gcc/testsuite/g++.dg/modules/gc-3_b.C b/gcc/testsuite/g++.dg/modules/gc-3_b.C
new file mode 100644
index 0000000..1d1dc87
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/gc-3_b.C
@@ -0,0 +1,4 @@
+// PR c++/119564
+// { dg-additional-options "-fmodules -fno-module-lazy --param=ggc-min-expand=0 --param=ggc-min-heapsize=0" }
+
+import M;
diff --git a/gcc/testsuite/g++.dg/modules/noexcept-3_a.C b/gcc/testsuite/g++.dg/modules/noexcept-3_a.C
new file mode 100644
index 0000000..00494d3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/noexcept-3_a.C
@@ -0,0 +1,14 @@
+// PR c++/119462
+// { dg-additional-options "-fmodules -std=c++20 -Wno-global-module" }
+// { dg-module-cmi M:part }
+
+module;
+struct exception_ptr {
+ // implicitly noexcept and constexpr
+ friend bool operator==(const exception_ptr&, const exception_ptr&) = default;
+};
+export module M:part;
+export template <typename = int> void enqueue() {
+ exception_ptr e;
+ e == e;
+}
diff --git a/gcc/testsuite/g++.dg/modules/noexcept-3_b.C b/gcc/testsuite/g++.dg/modules/noexcept-3_b.C
new file mode 100644
index 0000000..f26f8f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/noexcept-3_b.C
@@ -0,0 +1,12 @@
+// PR c++/119462
+// { dg-additional-options "-fmodules -std=c++20 -Wno-global-module" }
+// { dg-module-cmi M }
+
+module;
+struct exception_ptr {
+ // implicitly noexcept and constexpr, but this isn't known yet
+ friend bool operator==(const exception_ptr&, const exception_ptr&) = default;
+};
+export module M;
+export import :part;
+export using ::exception_ptr;
diff --git a/gcc/testsuite/g++.dg/modules/noexcept-3_c.C b/gcc/testsuite/g++.dg/modules/noexcept-3_c.C
new file mode 100644
index 0000000..a1e98a5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/noexcept-3_c.C
@@ -0,0 +1,11 @@
+// PR c++/119462
+// { dg-additional-options "-fmodules -std=c++20" }
+
+import M;
+int main() {
+ enqueue();
+
+ constexpr exception_ptr e;
+ static_assert(e == e);
+ static_assert(noexcept(e == e));
+}
diff --git a/gcc/testsuite/g++.dg/modules/pr119608_a.C b/gcc/testsuite/g++.dg/modules/pr119608_a.C
new file mode 100644
index 0000000..4e7b359
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr119608_a.C
@@ -0,0 +1,16 @@
+// PR c++/119608
+// { dg-additional-options "-fmodules" }
+// { dg-module-cmi repro }
+
+export module repro;
+
+export template<class Visitor>
+auto
+visit(
+ Visitor v
+) -> decltype(
+ v);
+
+export template<class Visitor> auto visit(Visitor v) -> decltype(v) {
+ return {};
+}
diff --git a/gcc/testsuite/g++.dg/modules/pr119608_b.C b/gcc/testsuite/g++.dg/modules/pr119608_b.C
new file mode 100644
index 0000000..023d20a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr119608_b.C
@@ -0,0 +1,8 @@
+// PR c++/119608
+// { dg-additional-options "-fmodules" }
+
+import repro;
+
+int main() {
+ visit(123);
+}
diff --git a/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C b/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C
new file mode 100644
index 0000000..9650004
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C
@@ -0,0 +1,20 @@
+// PR c++/114970
+// { dg-do compile { target c++17 } }
+// { dg-additional-options "-O -Wunused-value" }
+
+struct sv
+{
+ const char* str;
+ unsigned len;
+
+ constexpr sv(const char *p): str(p), len(0)
+ {
+ if (__builtin_is_constant_evaluated ()) { len = 42; }
+ }
+};
+
+int main()
+{
+ sv s ("foo");
+ return s.len;
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr119613.C b/gcc/testsuite/g++.dg/opt/pr119613.C
new file mode 100644
index 0000000..2ced2e8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr119613.C
@@ -0,0 +1,22 @@
+// PR middle-end/119613
+// { dg-do compile { target { musttail && c++11 } } }
+// { dg-options "-O0" }
+
+struct S { S () {} };
+char *foo (S);
+void bar (int);
+
+[[gnu::always_inline]] inline char *
+baz (S x)
+{
+ unsigned i;
+ &i;
+ bar (i);
+ [[gnu::musttail]] return foo (x);
+}
+
+char *
+qux (S)
+{
+ [[gnu::musttail]] return baz (S {});
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr119614.C b/gcc/testsuite/g++.dg/opt/pr119614.C
new file mode 100644
index 0000000..cb73fc3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr119614.C
@@ -0,0 +1,30 @@
+// PR tree-optimization/119614
+// { dg-do compile { target musttail } }
+// { dg-options "-O2" }
+
+struct S {} b;
+char *foo ();
+int e, g;
+void bar ();
+void corge (S);
+
+[[gnu::noinline]] char *
+baz ()
+{
+ bar ();
+ return 0;
+}
+
+const char *
+qux ()
+{
+ if (e)
+ {
+ S a = b;
+ corge (a);
+ if (g)
+ return 0;
+ [[gnu::musttail]] return baz ();
+ }
+ return foo ();
+}
diff --git a/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C
new file mode 100644
index 0000000..8b1ad53
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target { { { i?86-*-* x86_64-*-* } && { ! ia32 } } || { powerpc*-*-* aarch64*-*-* riscv*-*-* } } } }
+// { dg-options "-O2 -fdump-rtl-pro_and_epilogue" }
+// { dg-skip-if "requires hosted libstdc++ for vector" { ! hostedlib } }
+
+// PR rtl-optimization/118502
+
+// The shrink-wrapping should happen around the slow path of vector<int>::push_back,
+// The fast path is just checking if there is enough space and doing a few stores.
+// We want to verify that shrink wrapping always happens.
+
+#include <vector>
+
+void push_back(std::vector<int>& xs, unsigned char x) {
+ xs.push_back(x);
+}
+
+/* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" } } */
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr118924.C b/gcc/testsuite/g++.dg/tree-ssa/pr118924.C
new file mode 100644
index 0000000..c95eaca
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr118924.C
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-std=c++17 -O2" } */
+
+template <int Size> struct Vector {
+ int m_data[Size];
+ Vector(int, int, int) {}
+};
+enum class E { POINTS, LINES, TRIANGLES };
+
+__attribute__((noipa))
+void getName(E type) {
+ static E check = E::POINTS;
+ if (type == check)
+ check = (E)((int)check + 1);
+ else
+ __builtin_abort ();
+}
+
+int main() {
+ int arr[]{0, 1, 2};
+ for (auto dim : arr) {
+ Vector<3> localInvs(1, 1, 1);
+ localInvs.m_data[dim] = 8;
+ }
+ E types[] = {E::POINTS, E::LINES, E::TRIANGLES};
+ for (auto primType : types)
+ getName(primType);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr116595.C b/gcc/testsuite/g++.target/aarch64/sve/pr116595.C
new file mode 100644
index 0000000..49874dd
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/sve/pr116595.C
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+#include <arm_sve.h>
+
+void transpose4x4_ps()
+{
+ svfloat32x4_t _r = svfloat32x4_t();
+}
diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr119706.C b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C
new file mode 100644
index 0000000..40fefe5
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C
@@ -0,0 +1,178 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -mcpu=neoverse-v2 --param=aarch64-autovec-preference=sve-only -w" } */
+
+namespace a {
+typedef long unsigned b;
+typedef int c;
+template <bool, typename d> struct e { using f = d; };
+template <bool g, typename d = void> using h = typename e<g, d>::f;
+template <typename aa, typename, template <typename> class> struct i {
+ using f = aa;
+};
+template <typename aa, template <typename> class j> using k = i<aa, void, j>;
+template <typename aa, template <typename> class j>
+using l = typename k<aa, j>::f;
+} // namespace a
+inline void *operator new(a::b, void *ab) { return ab; }
+namespace a {
+template <typename> class ac {
+public:
+ typedef b m;
+ template <typename ad, typename... n> void ae(ad *ab, n... w) {
+ new (ab) ad(w...);
+ }
+};
+template <typename d> using x = ac<d>;
+template <typename d> class af : public x<d> {
+public:
+ typedef d o;
+ template <typename> struct ag { typedef af ah; };
+};
+struct ai {};
+struct aj : ai {};
+struct ak : aj {};
+template <typename> struct al;
+template <typename d> struct al<d *> {
+ typedef ak an;
+ typedef c ao;
+ typedef d ap;
+};
+template <typename aq> typename aq ::an ar(aq) { return typename aq ::an(); }
+template <typename as> typename as ::ao at(as au, as av, ak) { return av - au; }
+template <typename aw> typename aw ::ao ax(aw au, aw av) {
+ return at(au, av, ar(au));
+}
+template <typename> struct ay { typedef c ao; };
+} // namespace a
+namespace az {
+template <typename am, typename> class ba {
+ am bb;
+ typedef a::al<am> bc;
+
+public:
+ typedef typename bc::an an;
+ typedef typename bc::ao ao;
+ typedef typename bc::ap ap;
+ ba(am bd) : bb(bd) {}
+ ap operator*() { return *bb; }
+ ba operator++() {
+ ++bb;
+ return *this;
+ }
+ am base() { return bb; }
+};
+template <typename be, typename bf, typename bg>
+bool operator!=(ba<be, bg> bh, ba<bf, bg> p) {
+ return bh.base() != p.base();
+}
+template <typename be, typename bf, typename bg>
+auto operator-(ba<be, bg> bh, ba<bf, bg> p) {
+ return bh.base() - p.base();
+}
+} // namespace az
+namespace a {
+struct bi {
+ template <typename d, typename> struct bj {
+ using f = typename d::ag<d>::ah;
+ };
+ template <typename> using bk = b;
+ template <typename...> static constexpr bool bl = false;
+ template <typename, typename> static constexpr bool bm = bl<>;
+ template <typename d, typename... n> static constexpr bool bn = bm<d, n...>;
+};
+template <typename bo, typename ad> using bp = typename bi::bj<bo, ad>::f;
+template <typename bo> struct bq : bi {
+ typedef typename bo::o o;
+ using br = l<o *, bk>;
+ template <typename, typename bs> struct bt { using f = typename ay<bs>::ao; };
+ template <typename bu, typename> struct bv { using f = typename bu::m; };
+ using ao = typename bt<bo, c>::f;
+ using m = typename bv<bo, ao>::f;
+ template <typename d> using bw = bp<bo, d>;
+ static br allocate(bo, m);
+ template <typename d, typename... n>
+ static h<bn<bo, d>> ae(bo ci, d ab, n... w) {
+ ci.ae(ab, w...);
+ }
+};
+template <typename d> struct bx {
+ static bool by(d &bz) try { d(bz.begin(), bz.ca(), bz.cb()); } catch (...) {
+ }
+};
+} // namespace a
+namespace az {
+template <typename bo> struct cc : a::bq<bo> {
+ typedef a::bq<bo> q;
+ template <typename d> struct ag { typedef typename q::bw<d> ah; };
+};
+} // namespace az
+enum cd {};
+using ce = double;
+namespace a {
+template <typename aw, typename cf, typename cg, typename ch>
+cg cj(aw au, cf av, cg ck, ch cl) {
+ typedef az::cc<ch> cx;
+ for (; au != av; ++au, ++ck)
+ cx::ae(cl, ck, *au);
+}
+template <typename d, typename bo> struct cm {
+ typedef typename az::cc<bo>::ag<d>::ah cn;
+ typedef typename az::cc<cn>::br br;
+ struct co {
+ br db;
+ br cp;
+ };
+ struct cq : cn, co {
+ cq(cn) {}
+ } typedef cr;
+ cn cs();
+ cr cb() noexcept;
+ cm(cr ci) : ct(ci) {}
+ cq ct;
+ br cu(b cv) {
+ typedef az::cc<cn> cw;
+ return cv ? cw::allocate(ct, cv) : c();
+ }
+};
+template <typename d, typename bo = af<d>> class cy : cm<d, bo> {
+ typedef cm<d, bo> cz;
+
+public:
+ typedef typename cz::br br;
+ typedef az::ba<br, cy> da;
+ typedef b m;
+ typedef bo cr;
+ cz::cs;
+ template <typename aw> cy(aw au, aw av, cr ci) : cz(ci) {
+ dg(au, av, ar(au));
+ }
+ cz::cb;
+ da begin() { return this->ct.db; }
+ da ca() { return this->ct.cp; }
+ void r() { s(); }
+ void clear() { t(this->ct.db); }
+ template <typename cg> void dg(cg au, cg av, ai) { y(au, av, ax(au, av)); }
+ template <typename am, typename cf> void y(am au, cf av, m cv) {
+ br z = this->cu(dc(cv, cs()));
+ cj(au, av, z, cs());
+ }
+ bool s();
+ m dc(m cv, cr) { return cv; }
+ void t(br dd) {
+ if (this->ct.cp - dd)
+ this->ct.cp = dd;
+ }
+};
+template <typename d, typename bo> bool cy<d, bo>::s() { bx<cy>::by(*this); }
+namespace basic {
+class u {
+ using de = ce;
+ void v(cd, b);
+ cy<de> df;
+};
+void u::v(cd, b) {
+ df.clear();
+ df.r();
+}
+} // namespace basic
+} // namespace a \ No newline at end of file
diff --git a/gcc/testsuite/g++.target/i386/pr119689.C b/gcc/testsuite/g++.target/i386/pr119689.C
new file mode 100644
index 0000000..cdc6d2d
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr119689.C
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-O2 -fcompare-debug" }
+// { dg-additional-options "-march=i586 -mtune=generic" { target ia32 } }
+// { dg-additional-options "-fPIC" { target { fpic } } }
+
+enum gimple_code { GIMPLE_ASSIGN, GIMPLE_RETURN };
+bool is_gimple_call();
+int m_sig, m_exp, sreal_new_exp;
+struct sreal {
+ sreal(long long sig) {
+ long long __trans_tmp_6 = sig >= 0 ? sig : -(unsigned long long)sig;
+ sig = __trans_tmp_6 <<= sreal_new_exp -= m_exp = __trans_tmp_6;
+ m_sig = sig;
+ }
+ void operator/(sreal);
+};
+struct ipa_predicate {
+ ipa_predicate(bool = true);
+ void operator&=(ipa_predicate);
+ void operator&(ipa_predicate);
+};
+void add_condition();
+gimple_code eliminated_by_inlining_prob_code;
+static int eliminated_by_inlining_prob() {
+ switch (eliminated_by_inlining_prob_code) {
+ case GIMPLE_RETURN:
+ return 2;
+ case GIMPLE_ASSIGN:
+ return 1;
+ }
+ return 0;
+}
+void fp_expression_p() {
+ ipa_predicate bb_predicate;
+ for (;;) {
+ int prob = eliminated_by_inlining_prob();
+ ipa_predicate sra_predicate;
+ sra_predicate &= add_condition;
+ if (is_gimple_call())
+ sreal(prob) / 2;
+ if (prob != 2)
+ bb_predicate & sra_predicate;
+ }
+}
diff --git a/gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
new file mode 100644
index 0000000..3747549
--- /dev/null
+++ b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include <riscv_vector.h>
+
+void
+vsseg (float *a, vfloat32mf2_t b, vfloat32mf2_t c, unsigned long vl)
+{
+ vfloat32mf2x2_t foo = vfloat32mf2x2_t ();
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c b/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
index d9015ac..1890312 100644
--- a/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
+++ b/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
@@ -5,12 +5,12 @@
/* { dg-additional-options "-O2 -g" } */
-typedef long int ptrdiff_t;
-typedef unsigned long int uintptr_t;
-typedef long int EMACS_INT;
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+typedef __UINTPTR_TYPE__ uintptr_t;
+typedef __PTRDIFF_TYPE__ EMACS_INT;
enum
{
- EMACS_INT_WIDTH = 64,
+ EMACS_INT_WIDTH = sizeof(EMACS_INT) * 8,
VALBITS = EMACS_INT_WIDTH - 3,
};
typedef struct Lisp_X* Lisp_Word;
@@ -151,4 +151,5 @@ set_marker_internal(Lisp_Object position, Lisp_Object buffer)
struct buffer* b = live_buffer(buffer);
if (NILP(position) || (MARKERP(position) && !XMARKER(position)->buffer) || !b) /* { dg-bogus "Wanalyzer-deref-before-check" } */
unchain_marker();
+ return 0;
}
diff --git a/gcc/testsuite/gcc.dg/bf-ms-attrib.c b/gcc/testsuite/gcc.dg/bf-ms-attrib.c
index 2da4f03..5208c7f 100644
--- a/gcc/testsuite/gcc.dg/bf-ms-attrib.c
+++ b/gcc/testsuite/gcc.dg/bf-ms-attrib.c
@@ -32,7 +32,7 @@ main()
/* As long as the sizes are as expected, we know attributes are working.
bf-ms-layout.c makes sure the right thing happens when the attribute
is on. */
- if (sizeof(struct one_ms) != 8)
+ if (sizeof(struct one_ms) != 12)
abort();
if (sizeof(struct one_gcc) != 8)
abort();
diff --git a/gcc/testsuite/gcc.dg/builtin-apply5.c b/gcc/testsuite/gcc.dg/builtin-apply5.c
new file mode 100644
index 0000000..16892f7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtin-apply5.c
@@ -0,0 +1,23 @@
+/* { dg-options "-O2 -Wmissing-noreturn -fgnu89-inline" } */
+/* { dg-additional-options "-mno-mmx" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
+/* { dg-do compile } */
+
+extern void abort (void);
+
+double
+foo (int arg)
+{
+ if (arg != 116)
+ abort();
+ return arg + 1;
+}
+
+__attribute__((noreturn))
+double
+bar (int arg)
+{
+ foo (arg);
+ __builtin_return (__builtin_apply ((void (*) ()) foo, /* { dg-warning "'noreturn' function does return" } */
+ __builtin_apply_args (), 16));
+}
+
diff --git a/gcc/testsuite/gcc.dg/cpp/pr118674.c b/gcc/testsuite/gcc.dg/cpp/pr118674.c
new file mode 100644
index 0000000..00ea438
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr118674.c
@@ -0,0 +1,5 @@
+/* PR preprocessor/118674 */
+/* { dg-do preprocess } */
+#define M(__VA_ARGS__, ...)
+/* { dg-error "'__VA_ARGS__' can only appear in the expansion of a C99 variadic macro" "" { target *-*-* } .-1 } */
+/* { dg-error "duplicate macro parameter '__VA_ARGS__'" "" { target *-*-* } .-2 } */
diff --git a/gcc/testsuite/gcc.dg/gnu23-tag-6.c b/gcc/testsuite/gcc.dg/gnu23-tag-6.c
new file mode 100644
index 0000000..b28c7b3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gnu23-tag-6.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-std=gnu23" } */
+
+int f(int n)
+{
+ struct foo { struct { char (*x)[n]; }; } a;
+ {
+ struct foo { struct { char (*x)[n]; }; } b = a;
+ }
+}
+
+int g(int n)
+{
+ struct foo { struct { char (*x)[n]; }; } a;
+ {
+ struct foo { struct { char (*x)[n]; }; } *b = &a;
+ }
+}
+
+int h(int n)
+{
+ struct foo { struct { struct bar { char (*x)[n]; }* p; }; } a;
+ {
+ struct foo { struct { struct bar { char (*x)[n]; }* p; }; } *b = &a;
+ }
+}
+
diff --git a/gcc/testsuite/gcc.dg/guality/pr36728-3.c b/gcc/testsuite/gcc.dg/guality/pr36728-3.c
index 4700d50..589009b 100644
--- a/gcc/testsuite/gcc.dg/guality/pr36728-3.c
+++ b/gcc/testsuite/gcc.dg/guality/pr36728-3.c
@@ -30,7 +30,7 @@ foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7)
/* { dg-final { gdb-test 14 "arg5" "5" } } */
/* { dg-final { gdb-test 14 "arg6" "6" } } */
/* { dg-final { gdb-test 14 "arg7" "30" } } */
-/* { dg-final { gdb-test 14 "y" "2" } } */
+/* { dg-final { gdb-test 14 "y" "2" { xfail { aarch64*-*-* && { any-opts "-O3" } } } } } */
/* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg3" "3" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/pr41353-1.c b/gcc/testsuite/gcc.dg/guality/pr41353-1.c
index 6639a52..ead9d89 100644
--- a/gcc/testsuite/gcc.dg/guality/pr41353-1.c
+++ b/gcc/testsuite/gcc.dg/guality/pr41353-1.c
@@ -22,7 +22,7 @@ f2 (int i, int j)
{
j += i;
/* { dg-final { gdb-test .+4 "i" "37" } } */
- /* { dg-final { gdb-test .+3 "j" "28 + 37" { xfail { no-opts "-O0" } } } } */
+ /* { dg-final { gdb-test .+3 "j" "28 + 37" { xfail { { ! aarch64-*-* } && { no-opts "-O0" } } } } } */
int i1 = 2 * i; /* { dg-final { gdb-test .+2 "i1" "2 * 37" } } */
int i2 = 3 * i; /* { dg-final { gdb-test .+1 "i2" "3 * 37" } } */
return j;
diff --git a/gcc/testsuite/gcc.dg/guality/pr54693-2.c b/gcc/testsuite/gcc.dg/guality/pr54693-2.c
index 7a0ae73..229ef0e 100644
--- a/gcc/testsuite/gcc.dg/guality/pr54693-2.c
+++ b/gcc/testsuite/gcc.dg/guality/pr54693-2.c
@@ -18,7 +18,7 @@ foo (int x, int y, int z)
while (x > 3 && y > 3 && z > 3)
{ /* { dg-final { gdb-test .+2 "i" "v + 1" } } */
/* { dg-final { gdb-test .+1 "x" "10 - i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
- bar (i); /* { dg-final { gdb-test . "y" "20 - 2 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
+ bar (i); /* { dg-final { gdb-test . "y" "20 - 2 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" "-Os" } } } } } */
/* { dg-final { gdb-test .-1 "z" "30 - 3 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" "-Os" } } } } } */
i++, x--, y -= 2, z -= 3;
}
diff --git a/gcc/testsuite/gcc.dg/guality/pr68860-1.c b/gcc/testsuite/gcc.dg/guality/pr68860-1.c
index 8c8d835..96d3b43 100644
--- a/gcc/testsuite/gcc.dg/guality/pr68860-1.c
+++ b/gcc/testsuite/gcc.dg/guality/pr68860-1.c
@@ -31,7 +31,7 @@ foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int a
/* { dg-final { gdb-test 14 "arg6" "6" } } */
/* { dg-final { gdb-test 14 "arg7" "30" } } */
/* { dg-final { gdb-test 14 "arg8" "7" } } */
-/* { dg-final { gdb-test 14 "y" "2" } } */
+/* { dg-final { gdb-test 14 "y" "2" { xfail { aarch64*-*-* && { any-opts "-O3" } } } } } */
/* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg3" "3" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/pr68860-2.c b/gcc/testsuite/gcc.dg/guality/pr68860-2.c
index 070efbc..a18a04e 100644
--- a/gcc/testsuite/gcc.dg/guality/pr68860-2.c
+++ b/gcc/testsuite/gcc.dg/guality/pr68860-2.c
@@ -31,7 +31,7 @@ foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int a
/* { dg-final { gdb-test 14 "arg6" "6" } } */
/* { dg-final { gdb-test 14 "arg7" "30" } } */
/* { dg-final { gdb-test 14 "arg8" "7" } } */
-/* { dg-final { gdb-test 14 "y" "2" } } */
+/* { dg-final { gdb-test 14 "y" "2" { xfail { aarch64*-*-* && { any-opts "-O3" } } } } } */
/* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg3" "3" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/sra-1.c b/gcc/testsuite/gcc.dg/guality/sra-1.c
index c0d1cf6..9d4cafbf 100644
--- a/gcc/testsuite/gcc.dg/guality/sra-1.c
+++ b/gcc/testsuite/gcc.dg/guality/sra-1.c
@@ -39,7 +39,7 @@ f3 (int k)
struct B a = { 4, k + 6 };
asm ("" : "+r" (a.i));
a.j++;
- bar (a.i); /* { dg-final { gdb-test .+1 "a.i" "4" { xfail { aarch64*-*-* && { { any-opts "-Og" "-O2" "-O3" } && { ! { any-opts "-fno-fat-lto-objects" } } } } } } } */
+ bar (a.i); /* { dg-final { gdb-test .+1 "a.i" "4" { xfail { aarch64*-*-* && { any-opts "-Og" "-fno-fat-lto-objects" } } } } } */
bar (a.j); /* { dg-final { gdb-test . "a.j" "14" { xfail { aarch64*-*-* && { any-opts "-Og" "-fno-fat-lto-objects" } } } } } */
return a.i + a.j;
}
diff --git a/gcc/testsuite/gcc.dg/guality/vla-1.c b/gcc/testsuite/gcc.dg/guality/vla-1.c
index 264b9f3..f44474e 100644
--- a/gcc/testsuite/gcc.dg/guality/vla-1.c
+++ b/gcc/testsuite/gcc.dg/guality/vla-1.c
@@ -20,8 +20,8 @@ f1 (int i)
int __attribute__((noinline))
f2 (int i)
{
- short a[i * 2 + 7]; /* { dg-final { gdb-test .+1 "i" "5" } } */
- bar (a); /* { dg-final { gdb-test . "sizeof (a)" "17 * sizeof (short)" } } */
+ short a[i * 2 + 7]; /* { dg-final { gdb-test .+1 "i" "5" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
+ bar (a); /* { dg-final { gdb-test . "sizeof (a)" "17 * sizeof (short)" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
return a[i + 4];
}
diff --git a/gcc/testsuite/gcc.dg/pr119594.c b/gcc/testsuite/gcc.dg/pr119594.c
new file mode 100644
index 0000000..5d1cb37
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr119594.c
@@ -0,0 +1,32 @@
+/* PR rtl-optimization/119594 */
+/* { dg-do run } */
+/* { dg-options "-Os -fno-dce -fno-tree-dce -fno-tree-dse" } */
+
+int a, b;
+static unsigned c = -1;
+
+void
+foo (int e)
+{
+ a = a ^ e;
+}
+
+void
+bar (long e)
+{
+ foo (e >> 1);
+}
+
+int
+main ()
+{
+ int g[2];
+ for (int h = 0; h < 2; h++)
+ g[h] = -1;
+ for (; b; b++)
+ ;
+ g[1] = 0;
+ bar (c);
+ if (!a)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.dg/pr119612.c b/gcc/testsuite/gcc.dg/pr119612.c
new file mode 100644
index 0000000..82bc5d9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr119612.c
@@ -0,0 +1,9 @@
+/* PR c/119612
+ * { dg-do compile }
+ * { dg-options "-std=gnu23" }
+ * */
+
+int n = 3;
+void a(struct { char (*p)[n]; } *); /* { dg-warning "anonymous struct" } */
+void b(struct { char (*p)[n]; } *); /* { dg-warning "anonymous struct" } */
+
diff --git a/gcc/testsuite/gcc.dg/pr119664.c b/gcc/testsuite/gcc.dg/pr119664.c
new file mode 100644
index 0000000..23ffc30
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr119664.c
@@ -0,0 +1,15 @@
+/* PR target/119664 */
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+
+struct S { unsigned : 1, a : 1; } *s;
+int foo (void);
+void bar (void);
+
+int
+baz (void)
+{
+ int a = s->a;
+ bar ();
+ return a && foo ();
+}
diff --git a/gcc/testsuite/gcc.dg/torture/bitint-76.c b/gcc/testsuite/gcc.dg/torture/bitint-76.c
new file mode 100644
index 0000000..df47857
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/bitint-76.c
@@ -0,0 +1,19 @@
+/* PR tree-optimization/119707 */
+/* { dg-do run { target bitint } } */
+
+#if __BITINT_MAXWIDTH__ >= 256
+__attribute__((noipa)) unsigned _BitInt(256)
+foo (unsigned _BitInt(256) x, _BitInt(129) y)
+{
+ return x + (unsigned _BitInt(255)) y;
+}
+#endif
+
+int
+main ()
+{
+#if __BITINT_MAXWIDTH__ >= 256
+ if (foo (0, -1) != 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffuwb)
+ __builtin_abort ();
+#endif
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr119599-1.c b/gcc/testsuite/gcc.dg/torture/pr119599-1.c
new file mode 100644
index 0000000..4fbd228
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr119599-1.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-tree-einline" } */
+
+/* PR ipa/119599 */
+/* inlining a noreturn function which returns
+ can cause an ICE when dealing finding an unreachable block.
+ We should get a __builtin_unreachable after the inliing. */
+
+
+void baz (void);
+
+static inline __attribute__((always_inline, noreturn)) void
+bar (void)
+{
+ static volatile int t = 0;
+ if (t == 0)
+ baz ();
+} /* { dg-warning "function does return" } */
+
+void
+foo (void)
+{
+ bar ();
+}
+
+/* After inlining, we should have call to __builtin_unreachable now. */
+/* { dg-final { scan-tree-dump "__builtin_unreachable " "einline" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr119399.c b/gcc/testsuite/gcc.dg/vect/pr119399.c
new file mode 100644
index 0000000..8d868f4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr119399.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-vect-raw" } */
+
+void foo(int *p, int *q, int n)
+{
+ for (int i = 0; i < n; i++)
+ p[i] = q[i] + 1;
+}
+
+/* { dg-final { scan-tree-dump-not {<pointer_diff_expr,} "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr119640.c b/gcc/testsuite/gcc.dg/vect/pr119640.c
new file mode 100644
index 0000000..8872817
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr119640.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-funswitch-loops" } */
+
+int save, mask_nbits;
+
+void execute(long imm)
+{
+ long shift = 0;
+ int destReg[4];
+ for (unsigned i = 0; i < 4; i++)
+ {
+ if (imm)
+ shift = 1ULL << mask_nbits;
+ destReg[i] = shift;
+ save = destReg[0];
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr99102.c b/gcc/testsuite/gcc.dg/vect/pr99102.c
index 071741f..fcbf036 100644
--- a/gcc/testsuite/gcc.dg/vect/pr99102.c
+++ b/gcc/testsuite/gcc.dg/vect/pr99102.c
@@ -1,5 +1,5 @@
/* { dg-additional-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */
-/* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */
+/* { dg-additional-options "-march=armv8-a+sve -msve-vector-bits=256" { target aarch64_sve256_hw } } */
long a[44];
short d, e = -7;
__attribute__((noipa)) void b(char f, short j, short k, unsigned l) {
diff --git a/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c b/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
index b4141da..843fdac 100644
--- a/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
+++ b/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
@@ -8,7 +8,7 @@
/*
** le32:
** sub w([0-9]+), w0, #1
-** tst w0, w\1
+** tst (?:w0, w\1|w\1, w0)
** cset w0, eq
** ret
*/
@@ -20,7 +20,7 @@ unsigned le32 (const unsigned int a) {
/*
** gt32:
** sub w([0-9]+), w0, #1
-** tst w0, w\1
+** tst (?:w0, w\1|w\1, w0)
** cset w0, ne
** ret
*/
diff --git a/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c b/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
index b811e6f..3b558e9 100644
--- a/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
+++ b/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
@@ -8,7 +8,7 @@
/*
** le16:
** sub w([0-9]+), w0, #1
-** and w([0-9]+), w0, w\1
+** and w([0-9]+), (?:w0, w\1|w\1, w0)
** tst w\2, 65535
** cset w0, eq
** ret
@@ -21,7 +21,7 @@ unsigned le16 (const unsigned short a) {
/*
** gt16:
** sub w([0-9]+), w0, #1
-** and w([0-9]+), w0, w\1
+** and w([0-9]+), (?:w0, w\1|w\1, w0)
** tst w\2, 65535
** cset w0, ne
** ret
diff --git a/gcc/testsuite/gcc.target/aarch64/pr100056.c b/gcc/testsuite/gcc.target/aarch64/pr100056.c
index 0b77824..70499772 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr100056.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr100056.c
@@ -1,7 +1,9 @@
/* PR target/100056 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
-/* { dg-final { scan-assembler-not {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} } } */
+/* { dg-final { scan-assembler-not {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-times {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tw[0-9]+, w[0-9]+, w[0-9]+, uxtb\n} 2 } } */
int
or_shift_u8 (unsigned char i)
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp b/gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp
new file mode 100644
index 0000000..376985d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp
@@ -0,0 +1,46 @@
+# Copyright (C) 2006-2025 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an AArch64 target.
+if {![istarget aarch64*-*-*] } then {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+if ![check_effective_target_fopenmp] {
+ return
+}
+
+if { [check_effective_target_aarch64_sve] } {
+ set sve_flags ""
+} else {
+ set sve_flags "-march=armv8.2-a+sve"
+}
+
+# Main loop.
+dg-runtest [lsort [find $srcdir/$subdir *.c]] "$sve_flags -fopenmp" ""
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c
new file mode 100644
index 0000000..75dd39b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c
@@ -0,0 +1,201 @@
+/* { dg-do compile } */
+/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */
+
+#include <arm_sve.h>
+
+#define N __ARM_FEATURE_SVE_BITS
+
+int64_t __attribute__ ((noipa))
+target_device_ptr_vla (svbool_t vp, svint32_t *vptr)
+{
+
+ int a[N], b[N], c[N];
+ svint32_t va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+/* { dg-error {SVE type 'svint32_t \*' not allowed in 'target' device clauses} "" { target *-*-* } .+1 } */
+#pragma omp target data use_device_ptr (vptr) map (to: b, c)
+/* { dg-error {SVE type 'svint32_t \*' not allowed in 'target' device clauses} "" { target *-*-* } .+1 } */
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vb = *vptr;
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+2 } */
+ /* { dg-error "cannot reference 'svbool_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vc = svld1_s32 (vp, c);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_device_addr_vla (svbool_t vp, svint32_t *vptr)
+{
+
+ int a[N], b[N], c[N];
+ svint32_t va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'target' device clauses" "" { target *-*-* } .+1 } */
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+/* { dg-error {SVE type 'svint32_t \*' not allowed in 'target' device clauses} "" { target *-*-* } .+1 } */
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vb = *vptr;
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+2 } */
+ /* { dg-error "cannot reference 'svbool_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vc = svld1_s32 (vp, c);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_has_device_addr_vla (svbool_t vp, svint32_t *vptr)
+{
+
+ int a[N], b[N], c[N];
+ svint32_t va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'target' device clauses" "" { target *-*-* } .+1 } */
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+/* { dg-error "SVE type 'svint32_t' not allowed in 'target' device clauses" "" { target *-*-* } .+1 } */
+#pragma omp target has_device_addr (vb) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svbool_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vb = svld1_s32 (vp, b);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vc = svld1_s32 (vp, c);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+#define FIXED_ATTR __attribute__ ((arm_sve_vector_bits (N)))
+
+typedef __SVInt32_t v8si FIXED_ATTR;
+typedef svbool_t v8bi FIXED_ATTR;
+
+int64_t __attribute__ ((noipa))
+target_device_ptr_vls (v8bi vp, v8si *vptr)
+{
+
+ int a[N], b[N], c[N];
+ v8si va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+#pragma omp target data use_device_ptr (vptr) map (to: b, c)
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ vb = *vptr;
+ vc = svld1_s32 (vp, c);
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_device_addr_vls (v8bi vp, v8si *vptr)
+{
+
+ int a[N], b[N], c[N];
+ v8si va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ vb = *vptr;
+ vc = svld1_s32 (vp, c);
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_has_device_addr_vls (v8bi vp, v8si *vptr)
+{
+
+ int a[N], b[N], c[N];
+ v8si va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+#pragma omp target has_device_addr (vb) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ vb = svld1_s32 (vp, b);
+ vc = svld1_s32 (vp, c);
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c
new file mode 100644
index 0000000..2f6184b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c
@@ -0,0 +1,57 @@
+/* { dg-do compile } */
+/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */
+
+#include <arm_sve.h>
+
+#define N __ARM_FEATURE_SVE_BITS
+#define FIXED_ATTR __attribute__((arm_sve_vector_bits (N)))
+
+typedef __SVInt32_t v8si FIXED_ATTR;
+
+static v8si local_vec;
+#pragma omp declare target link(local_vec)
+
+v8si global_vec;
+#pragma omp declare target link(global_vec)
+
+/* { dg-error {SVE type 'svint32_t' does not have a fixed size} "" { target *-*-* } .+1 } */
+static svint32_t slocal_vec;
+
+/* { dg-error {'slocal_vec' does not have a mappable type in 'link' clause} "" { target *-*-* } .+1 } */
+#pragma omp declare target link(slocal_vec)
+
+void
+one_get_inc2_local_vec_vls ()
+{
+ v8si res, res2, tmp;
+
+#pragma omp target map(from: res, res2)
+ {
+ res = local_vec;
+ local_vec = svadd_s32_z (svptrue_b32 (), local_vec, local_vec);
+ res2 = local_vec;
+ }
+
+ tmp = svadd_s32_z (svptrue_b32 (), res, res);
+ svbool_t p = svcmpne_s32 (svptrue_b32 (), tmp, res2);
+ if (svptest_any (svptrue_b32 (), p))
+ __builtin_abort ();
+}
+
+void
+one_get_inc3_global_vec_vls ()
+{
+ v8si res, res2, tmp;
+
+#pragma omp target map(from: res, res2)
+ {
+ res = global_vec;
+ global_vec = svadd_s32_z (svptrue_b32 (), global_vec, global_vec);
+ res2 = global_vec;
+ }
+
+ tmp = svadd_s32_z (svptrue_b32 (), res, res);
+ svbool_t p = svcmpne_s32 (svptrue_b32 (), tmp, res2);
+ if (svptest_any (svptrue_b32 (), p))
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c
new file mode 100644
index 0000000..812183d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c
@@ -0,0 +1,2049 @@
+/* { dg-do compile } */
+/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */
+
+#include <arm_sve.h>
+
+#define N __ARM_FEATURE_SVE_BITS
+#define FIXED_ATTR __attribute__((arm_sve_vector_bits (N)))
+
+typedef svint32_t v8si FIXED_ATTR;
+typedef svbool_t v8bi FIXED_ATTR;
+
+void
+target_vla1 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla1 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla1 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla1 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla1 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls1 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls1 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls1 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls1 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls1 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla2 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla2 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla2 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla2 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla2 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls2 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls2 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls2 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls2 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target parallel map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls2 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla3 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla3 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla3 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla3 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla3 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls3 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls3 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls3 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls3 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target parallel loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls3 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target parallel loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla4 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla4 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla4 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla4 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla4 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls4 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls4 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls4 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls4 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls4 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla5 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla5 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla5 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla5 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla5 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls5 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls5 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls5 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls5 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls5 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla6 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla6 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla6 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla6 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla6 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls6 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls6 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls6 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls6 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls6 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla7 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla7 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla7 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla7 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla7 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls7 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls7 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls7 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls7 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams distribute map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams distribute map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls7 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams distribute map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla8 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla8 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla8 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla8 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla8 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls8 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls8 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls8 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls8 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams distribute simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams distribute simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls8 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams distribute simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
index a7d2795..c9a8b82 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
@@ -19,6 +19,6 @@ void f10(double * restrict z, double * restrict w, double * restrict x, double *
}
}
-/* { dg-final { scan-assembler-not {\tbic\t} { xfail *-*-* } } } */
-/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-not {\tbic\t} } } */
+/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 } } */
/* { dg-final { scan-assembler-times {\tfcmgt\tp[0-9]+\.d, p[0-9]+/z, z[0-9]+\.d, #0} 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
index 20cbd75..1845bd3 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
@@ -8,6 +8,6 @@ void f13(double * restrict z, double * restrict w, double * restrict x, double *
}
}
-/* { dg-final { scan-assembler-not {\tbic\t} { xfail *-*-* } } } */
-/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-not {\tbic\t} } } */
+/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 } } */
/* { dg-final { scan-assembler-times {\tfcmuo\tp[0-9]+\.d, p[0-9]+/z, z[0-9]+\.d, z[0-9]+\.d} 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c
index 33b9f0f..b8afea7 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c
@@ -16,7 +16,8 @@ f (TYPE *x, TYPE *y, unsigned short n, unsigned short m)
/* { dg-final { scan-assembler {\tldr\tw[0-9]+} } } */
/* { dg-final { scan-assembler {\tstr\tw[0-9]+} } } */
/* Should multiply by (257-1)*4 rather than (VF-1)*4 or (VF-2)*4. */
-/* { dg-final { scan-assembler-times {\tadd\tx[0-9]+, x[0-9]+, x[0-9]+, lsl 10\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tubfiz\tx[0-9]+, x2, 10, 16\n} 1 } } */
+/* { dg-final { scan-assembler-times {\tubfiz\tx[0-9]+, x3, 10, 16\n} 1 } } */
/* { dg-final { scan-assembler-not {\tcmp\tx[0-9]+, 0} } } */
/* { dg-final { scan-assembler-not {\tcmp\tw[0-9]+, 0} } } */
/* { dg-final { scan-assembler-not {\tcsel\tx[0-9]+} } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c
index 71b826a..d2e74f9 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c
@@ -16,7 +16,8 @@ f (TYPE *x, TYPE *y, int n, int m)
/* { dg-final { scan-assembler {\tldr\tw[0-9]+} } } */
/* { dg-final { scan-assembler {\tstr\tw[0-9]+} } } */
/* Should multiply by (257-1)*4 rather than (VF-1)*4. */
-/* { dg-final { scan-assembler-times {\t(?:lsl\tx[0-9]+, x[0-9]+, 10|sbfiz\tx[0-9]+, x[0-9]+, 10, 32)\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tsbfiz\tx[0-9]+, x2, 10, 32\n} 1 } } */
+/* { dg-final { scan-assembler-times {\tsbfiz\tx[0-9]+, x3, 10, 32\n} 1 } } */
/* { dg-final { scan-assembler {\tcmp\tw2, 0} } } */
/* { dg-final { scan-assembler {\tcmp\tw3, 0} } } */
/* { dg-final { scan-assembler-times {\tcsel\tx[0-9]+} 4 } } */
diff --git a/gcc/testsuite/gcc.target/arm/ivopts.c b/gcc/testsuite/gcc.target/arm/ivopts.c
index d7d72a5..582fdab 100644
--- a/gcc/testsuite/gcc.target/arm/ivopts.c
+++ b/gcc/testsuite/gcc.target/arm/ivopts.c
@@ -11,6 +11,6 @@ tr5 (short array[], int n)
}
/* { dg-final { scan-tree-dump-times "PHI <" 1 "ivopts"} } */
-/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1_lob } } } } */
+/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1m_lob } } } } */
/* { dg-final { object-size text <= 32 { target { arm_nothumb && { ! arm_iwmmxt_ok } } } } } */
/* { dg-final { object-size text <= 36 { target { arm_nothumb && arm_iwmmxt_ok } } } } */
diff --git a/gcc/testsuite/gcc.target/arm/lob1.c b/gcc/testsuite/gcc.target/arm/lob1.c
index c8ce653..f42a367 100644
--- a/gcc/testsuite/gcc.target/arm/lob1.c
+++ b/gcc/testsuite/gcc.target/arm/lob1.c
@@ -1,7 +1,7 @@
/* Check that GCC generates Armv8.1-M low over head loop instructions
for some simple loops. */
/* { dg-do run } */
-/* { dg-require-effective-target arm_v8_1_lob_ok } */
+/* { dg-require-effective-target arm_v8_1m_lob_hw } */
/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */
/* { dg-options "-march=armv8.1-m.main -mthumb -O3 --save-temps" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/gcc.target/arm/lob6.c b/gcc/testsuite/gcc.target/arm/lob6.c
index 4fe116e..e19635b 100644
--- a/gcc/testsuite/gcc.target/arm/lob6.c
+++ b/gcc/testsuite/gcc.target/arm/lob6.c
@@ -1,7 +1,7 @@
/* Check that GCC generates Armv8.1-M low over head loop instructions
with some less trivial loops and the result is correct. */
/* { dg-do run } */
-/* { dg-require-effective-target arm_v8_1_lob_ok } */
+/* { dg-require-effective-target arm_v8_1m_lob_hw } */
/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */
/* { dg-options "-march=armv8.1-m.main -mthumb -O3 --save-temps" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/gcc.target/arm/mve/mve.exp b/gcc/testsuite/gcc.target/arm/mve/mve.exp
index a5d8511..9dc56c9 100644
--- a/gcc/testsuite/gcc.target/arm/mve/mve.exp
+++ b/gcc/testsuite/gcc.target/arm/mve/mve.exp
@@ -35,6 +35,7 @@ global dg_runtest_extra_prunes
set dg_runtest_extra_prunes ""
lappend dg_runtest_extra_prunes "warning: switch '-m(cpu|arch)=.*' conflicts with switch '-m(cpu|arch)=.*'"
+set saved-dg-do-what-default ${dg-do-what-default}
set dg-do-what-default "assemble"
# Initialize `dg'.
@@ -53,6 +54,8 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/general-c/*.\[cCS\]]] \
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
"" $DEFAULT_CFLAGS
+set dg-do-what-default ${saved-dg-do-what-default}
+
# All done.
set dg_runtest_extra_prunes ""
dg-finish
diff --git a/gcc/testsuite/gcc.target/arm/short-vfp-1.c b/gcc/testsuite/gcc.target/arm/short-vfp-1.c
index f6866c4..418fc27 100644
--- a/gcc/testsuite/gcc.target/arm/short-vfp-1.c
+++ b/gcc/testsuite/gcc.target/arm/short-vfp-1.c
@@ -1,45 +1,75 @@
/* { dg-do compile } */
-/* { dg-require-effective-target arm_vfp_ok } */
-/* { dg-add-options arm_vfp } */
+/* { dg-require-effective-target arm_arch_v7a_fp_hard_ok } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_arch_v7a_fp_hard } */
+/* { dg-final { check-function-bodies "**" "" } } */
+/*
+** test_sisf:
+** vcvt.s32.f32 (s[0-9]+), s0
+** vmov r0, \1 @ int
+** bx lr
+*/
int
test_sisf (float x)
{
return (int)x;
}
+/*
+** test_hisf:
+** vcvt.s32.f32 (s[0-9]+), s0
+** vmov (r[0-9]+), \1 @ int
+** sxth r0, \2
+** bx lr
+*/
short
test_hisf (float x)
{
return (short)x;
}
+/*
+** test_sfsi:
+** vmov (s[0-9]+), r0 @ int
+** vcvt.f32.s32 s0, \1
+** bx lr
+*/
float
test_sfsi (int x)
{
return (float)x;
}
+/*
+** test_sfhi:
+** vmov (s[0-9]+), r0 @ int
+** vcvt.f32.s32 s0, \1
+** bx lr
+*/
float
test_sfhi (short x)
{
return (float)x;
}
+/*
+** test_hisi:
+** sxth r0, r0
+** bx lr
+*/
short
test_hisi (int x)
{
return (short)x;
}
+/*
+** test_sihi:
+** bx lr
+*/
int
test_sihi (short x)
{
return (int)x;
}
-
-/* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {vmov\tr[0-9]+, s[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {vmov\ts[0-9]+, r[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {sxth\tr[0-9]+, r[0-9]+} 2 } } */
diff --git a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
index 9272e4c..41ee994 100644
--- a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
+++ b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1_lob } */
+/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1m_lob } */
/* { dg-options "-O" } */
unsigned short foo (unsigned short x, unsigned short c)
diff --git a/gcc/testsuite/gcc.target/i386/pr115910.c b/gcc/testsuite/gcc.target/i386/pr115910.c
new file mode 100644
index 0000000..5f1cd9a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr115910.c
@@ -0,0 +1,20 @@
+/* PR target/115910 */
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O2 -march=x86-64 -mtune=generic -masm=att" } */
+/* { dg-final { scan-assembler-times {\timulq\t} 2 } } */
+/* { dg-final { scan-assembler-times {\tshrq\t\$33,} 2 } } */
+/* { dg-final { scan-assembler-not {\tsarl\t} } } */
+
+int
+foo (int x)
+{
+ if (x < 0)
+ __builtin_unreachable ();
+ return x / 3U;
+}
+
+int
+bar (int x)
+{
+ return x / 3U;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr67215-1.c b/gcc/testsuite/gcc.target/i386/pr67215-1.c
index fd37f8e..ab69550 100644
--- a/gcc/testsuite/gcc.target/i386/pr67215-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr67215-1.c
@@ -13,8 +13,8 @@ foo (void)
arr[i] = bar (128);
}
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler-not "movl\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "call\[ \t\]*.bar@PLT" } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]+bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-not "movl\[ \t\]+bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "call\[ \t\]+\\*bar@PLT" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr67215-2.c b/gcc/testsuite/gcc.target/i386/pr67215-2.c
index ebf2919..9fd7469 100644
--- a/gcc/testsuite/gcc.target/i386/pr67215-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr67215-2.c
@@ -13,8 +13,8 @@ foo (void)
arr[i] = bar (128);
}
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler-not "movl\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "call\[ \t\]*.bar@PLT" } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]+bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-not "movl\[ \t\]+bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "call\[ \t\]+\\*bar@PLT" } } */
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c b/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c
index 4cc4d0c..92562cd 100644
--- a/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c
@@ -1,4 +1,4 @@
-/* { dg-do link } */
+/* { dg-do run } */
/* { dg-options {-O0 -mno-soft-stack} } */
/* { dg-additional-options -march=sm_30 } */
/* { dg-additional-options -mfake-ptx-alloca } */
@@ -13,6 +13,7 @@ main(void)
/* { dg-final { scan-assembler-times {(?n)^\.extern \.func \(\.param\.u64 %value_out\) __GCC_nvptx__PTX_alloca_not_supported \(\.param\.u64 %in_ar0\);$} 1 } } */
-/* { dg-message __GCC_nvptx__PTX_alloca_not_supported {unresolved symbol} { target *-*-* } 0 } */
+/* { dg-bogus __GCC_nvptx__PTX_alloca_not_supported {unresolved symbol} { target *-*-* } 0 } */
-/* { dg-final output-exists-not } */
+/* { dg-output {GCC/nvptx: sorry, unimplemented: dynamic stack allocation not supported[\r\n]+} }
+ { dg-shouldfail __GCC_nvptx__PTX_alloca_not_supported } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c
deleted file mode 100644
index e4ff310..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -ffast-math" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (float, _Float16)
-
-/* { dg-final { scan-assembler-times {\tvfwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c
deleted file mode 100644
index 7d2b448..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable -ffast-math" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (double, float)
-
-/* { dg-final { scan-assembler-times {\tvfwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c
deleted file mode 100644
index dc7e1da..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (int32_t, int16_t)
-
-/* { dg-final { scan-assembler-times {\tvwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c
deleted file mode 100644
index de1072f..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (int64_t, int32_t)
-
-/* { dg-final { scan-assembler-times {\tvwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c
deleted file mode 100644
index 8de5ef4..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (int16_t, int8_t)
-
-/* { dg-final { scan-assembler-times {\tvwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c
deleted file mode 100644
index a4aafd2..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (uint32_t, uint16_t)
-
-/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c
deleted file mode 100644
index 0deeaa0..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (uint64_t, uint32_t)
-
-/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c
deleted file mode 100644
index a6afcd0..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (uint16_t, uint8_t)
-
-/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c
new file mode 100644
index 0000000..d02a8e2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -ffast-math" } */
+
+#include <stdint-gcc.h>
+
+#define TEST_TYPE(TYPE1, TYPE2) \
+ __attribute__ ((noipa)) void vwadd_##TYPE1_##TYPE2 ( \
+ TYPE1 *__restrict dst, TYPE1 *__restrict dst2, TYPE1 *__restrict dst3, \
+ TYPE1 *__restrict dst4, TYPE2 *__restrict a, TYPE2 *__restrict b, \
+ TYPE2 *__restrict a2, TYPE2 *__restrict b2, int *__restrict pred, int n) \
+ { \
+ for (int i = 0; i < n; i++) \
+ { \
+ dst[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b[i] : dst[i]; \
+ dst2[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) b[i] : dst2[i]; \
+ dst3[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) a[i] : dst3[i]; \
+ dst4[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b2[i] : dst4[i]; \
+ } \
+ }
+
+#define TEST_ALL() \
+ TEST_TYPE (int16_t, int8_t) \
+ TEST_TYPE (uint16_t, uint8_t) \
+ TEST_TYPE (int32_t, int16_t) \
+ TEST_TYPE (uint32_t, uint16_t) \
+ TEST_TYPE (int64_t, int32_t) \
+ TEST_TYPE (uint64_t, uint32_t) \
+ TEST_TYPE (float, _Float16) \
+ TEST_TYPE (double, float)
+
+TEST_ALL ()
+
+/* { dg-final { scan-assembler-times {\tvwmul\.vv} 12 } } */
+/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 12 } } */
+/* { dg-final { scan-assembler-times {\tvfwmul\.vv} 8 } } */
+/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h
deleted file mode 100644
index 974846f..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef COND_WIDEN_COMPLICATE_3_H
-#define COND_WIDEN_COMPLICATE_3_H
-
-#include <stdint-gcc.h>
-
-#define TEST_TYPE(TYPE1, TYPE2) \
- __attribute__ ((noipa)) void vwadd_##TYPE1##_##TYPE2 ( \
- TYPE1 *__restrict dst, TYPE1 *__restrict dst2, TYPE1 *__restrict dst3, \
- TYPE1 *__restrict dst4, TYPE2 *__restrict a, TYPE2 *__restrict b, \
- TYPE2 *__restrict a2, TYPE2 *__restrict b2, int *__restrict pred, int n) \
- { \
- for (int i = 0; i < n; i++) \
- { \
- dst[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b[i] : dst[i]; \
- dst2[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) b[i] : dst2[i]; \
- dst3[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) a[i] : dst3[i]; \
- dst4[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b2[i] : dst4[i]; \
- } \
- }
-
-#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c
index 493dab0..0267078 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c
@@ -18,6 +18,5 @@ int pixel_sad_n(unsigned char *pix1, unsigned char *pix2, int n)
return sum;
}
-/* { dg-final { scan-assembler {vrsub\.v} } } */
/* { dg-final { scan-assembler {vmax\.v} } } */
-/* { dg-final { scan-assembler {vwsubu\.v} } } */
+/* { dg-final { scan-assembler-times {vwsubu\.v} 2 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c
index 638e90f..69a94d5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gczve32x -mabi=lp64d -mrvv-vector-bits=zvl" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c
index 380d0c1..5e0f136 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zvl4096b -mabi=lp64d -mrvv-vector-bits=zvl" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c
index 9ed72a6..a3c0a6d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d -msave-restore" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
index b6b708f..b1cf6aa 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c
index 13e3328..8838f0d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c
index d21b810..77f1c7c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d -msave-restore" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar1 (vint8m1_t a);
void bar2 ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
index 70a32d7..37127a8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar1 (vint8m1_t a);
void bar2 ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c
index 3f2cb2f..a8daeeb 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar1 (vint8m1_t a);
void bar2 ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c
index fe3a1ef..f8143b9 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c
@@ -4,7 +4,7 @@
/* { dg-require-effective-target riscv_zvfh_ok } */
/* { dg-options " -march=rv64gcv_zvfh -mabi=lp64d -O2" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
int8_t a[1];
uint16_t b[1];
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
index 60fdfc4..05628d5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
@@ -4,7 +4,7 @@
/* { dg-require-effective-target riscv_zvfh_ok } */
/* { dg-options " -march=rv64gcv_zvfh -mabi=lp64d -O2 --param=vsetvl-strategy=optim -fno-schedule-insns -fno-schedule-insns2 -fno-schedule-fusion " } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void
__attribute__ ((noipa))
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c
index 28766ce..3180f71 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vint64m1_t f1 (vint64m1_t vd, vint64m1_t vs2, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c
index 975f755..31b68c4 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O0" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O0" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vint64m1_t f1 (vint64m1_t vd, vint64m1_t vs2, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c
index 8cfe965..f7c9ad1 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat16m1_t f0 (vfloat16m1_t vs2, vfloat16m1_t vs1, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c
index 8a6c00f..a08ac6e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c
@@ -2,7 +2,7 @@
/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
/*
** foo9:
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
index 3e43c94..a0ed793 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
@@ -1,7 +1,7 @@
/* { dg-do run { target { riscv_v } } } */
/* { dg-additional-options "-O3 -ansi -pedantic-errors -std=gnu99" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
size_t __attribute__ ((noinline))
sumation (size_t sum0, size_t sum1, size_t sum2, size_t sum3, size_t sum4,
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
index 3ad91db..c5b35c8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
@@ -2,7 +2,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
extern size_t get_vl ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c
index d552eb5..e9e41f7 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c
@@ -1,6 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target riscv_v_ok } */
/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-std=gnu99" } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
#include "pr115068.c"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c
index af2cba6..ce9a389 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c
@@ -1,9 +1,9 @@
/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-std=gnu99" } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
#include <stdint.h>
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat64m8_t
test_vfwadd_wf_f64m8_m (vbool8_t vm, vfloat64m8_t vs2, float rs1, size_t vl)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c
index dabb8ae..7b6eefe 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O1" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
_Float16 a[10];
void func(){
int placeholder0 = 10;
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c
index af3532a..81e0ec3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar() __attribute__((riscv_vector_cc));
vint32m1_t foo(vint32m1_t a, vint32m1_t b) {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c
index 81e3a6e..4904c92 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { rv64 } } } */
/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
_Float16 a (uint64_t);
int8_t b () {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
index adb54d6..d62751e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat32m2_t foo (vfloat16m1_t a, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c
index 4253729..6bb7e1c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vint16m8_t test_vlmul_ext_v_i16mf4_i16m8(vint16mf4_t op1) {
return __riscv_vlmul_ext_v_i16mf4_i16m8(op1);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
index 606854b..a278709 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -march=rv64gcv -mabi=lp64d" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vuint64m1_t test_vssubu_vx_u64m1(vuint64m1_t op1)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
index 78abd09..2f8c146 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -march=rv32gcv -mabi=ilp32d" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vuint64m1_t test_vssubu_vx_u64m1(vuint64m1_t op1)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
index 84d3c4c..43be202 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
@@ -1,9 +1,9 @@
/* { dg-do compile { target { { ! riscv_abi_e } && rv64 } } } */
/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2 -Wno-pedantic" } */
#include <stdint.h>
-#include <riscv_vector.h>
+#include "riscv_vector.h"
/*
** vwadd_wx_i64m8_m:
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c
index 871cf65..f594217 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void
f (vint32m1_t *in, vint64m2_t *out, vbool32_t *m, int b)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c
index b76760b..48f200f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c
@@ -2,7 +2,7 @@
/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d -O3 -w -std=gnu17" } */
/* { dg-skip-if "" { *-*-* } { "-flto" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
static inline __attribute__(()) int vaddq_f32();
static inline __attribute__(()) int vload_tillz_f32(int nlane) {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
index 7096159e..3867681 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
size_t foo ()
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c
index c155f56..3acbc73 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2 -fdump-rtl-vsetvl-details" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
uint64_t a[2], b[2];
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c
index 04a8ff2..2b2fe27 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2 -fno-schedule-insns -fdump-rtl-vsetvl-details" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vuint16m1_t
foo (vuint16m1_t a, vuint16m1_t b, size_t avl)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
index dfaf82c..ad27c38 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
@@ -2,7 +2,7 @@
/* { dg-options "-march=rv32gc_xtheadvector -mabi=ilp32d -O2 -save-temps" { target { rv32 } } } */
/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O2 -save-temps" { target { rv64 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void
foo (float *a, int b)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
index a7cd8c5..c8056a8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gc_zfh_xtheadvector -mabi=lp64d -O2 -save-temps" { target { rv64 } } } */
#include <math.h>
-#include <riscv_vector.h>
+#include "riscv_vector.h"
static vfloat32m8_t atan2_ps(vfloat32m8_t a, vfloat32m8_t b, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c
index aebb0e3..b3c3428 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { rv64 } } } */
/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O2" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat16m4_t foo (float *ptr, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
new file mode 100644
index 0000000..42fa43e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { rv64 } } } */
+/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+struct a
+{
+ int b[];
+} c (vint32m4_t), d;
+
+char e;
+char *f;
+
+void g ()
+{
+ int h;
+ vint32m4_t i;
+ vint8m1_t j = __riscv_vlse8_v_i8m1 (&e, d.b[3], h);
+ vint16m2_t k = __riscv_vwadd_vx_i16m2 (j, 0, h);
+ i = __riscv_vwmacc_vx_i32m4 (i, f[0], k, h);
+ c (i);
+}
+
+/* { dg-final { scan-assembler-not {th\.vsext\.vf2} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
new file mode 100644
index 0000000..d622b72
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { rv64 } } } */
+/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+struct a
+{
+ int b[];
+} c (vuint32m4_t), d;
+
+char e;
+char *f;
+
+void g ()
+{
+ int h;
+ vuint32m4_t i;
+ vuint8m1_t j = __riscv_vlse8_v_u8m1 (&e, d.b[3], h);
+ vuint16m2_t k = __riscv_vwaddu_vx_u16m2 (j, 0, h);
+ i = __riscv_vwmaccu_vx_u32m4 (i, f[0], k, h);
+ c (i);
+}
+
+/* { dg-final { scan-assembler-not {th\.vzext\.vf2} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
index c0d643d..929de16 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
index 470e6b7..a540198 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
index bb94775..e3fe6c7 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
index cc598eb..f42ffea 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d b/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d
new file mode 100644
index 0000000..50e4216
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-options "-fno-druntime -gdwarf-4 -dA -fno-merge-debug-strings" }
+// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_enumeration_type" 1 } }
+// { dg-final { scan-assembler-times " DW_AT_enum_class" 1 } }
+// { dg-final { scan-assembler-times "\"E..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"E1..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C1..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C2..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C3..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C4..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"S1..\"\[^\n\]*DW_AT_name" 1 } }
+
+module expression;
+extern (C++):
+class C1
+{
+ bool bfn() { return true; }
+}
+class C2 : C1
+{
+ C4 cfn() { return null; }
+}
+class C3 : C2
+{
+ S1.E s;
+}
+class C4 : C3
+{
+ S1 s;
+}
+struct S1
+{
+ enum E : ubyte { E1 }
+ E e;
+ C3 c;
+}
diff --git a/gcc/testsuite/gdc.test/compilable/test21153.d b/gcc/testsuite/gdc.test/compilable/test21153.d
new file mode 100644
index 0000000..cd92a31
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test21153.d
@@ -0,0 +1,8 @@
+// https://github.com/dlang/dmd/issues/21153
+alias AliasSeq(TList...) = TList;
+class DataClass;
+void reduce(DataClass[] r)
+{
+ alias Args = AliasSeq!(DataClass);
+ Args result = r[0];
+}
diff --git a/gcc/testsuite/gdc.test/compilable/test21179.d b/gcc/testsuite/gdc.test/compilable/test21179.d
new file mode 100644
index 0000000..78bdffd
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test21179.d
@@ -0,0 +1,11 @@
+// https://github.com/dlang/dmd/issues/21179
+
+void bigEndianToNative(ubyte[2] a) {}
+
+void main()
+{
+ ubyte[] arr;
+ const ubyte[2] bytes;
+ bigEndianToNative(bytes);
+ auto b = cast(const ubyte[2][]) arr;
+}
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d b/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
index 2016a50..79242b1 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
@@ -1,22 +1,24 @@
-/*
+/*
REQUIRED_ARGS: -verrors=context
TEST_OUTPUT:
---
-fail_compilation/fail_pretty_errors.d(27): Error: undefined identifier `a`
+fail_compilation/fail_pretty_errors.d(29): Error: undefined identifier `a`
a = 1;
^
-fail_compilation/fail_pretty_errors.d-mixin-32(32): Error: undefined identifier `b`
-fail_compilation/fail_pretty_errors.d(37): Error: cannot implicitly convert expression `5` of type `int` to `string`
+fail_compilation/fail_pretty_errors.d-mixin-34(34): Error: undefined identifier `b`
+b = 1;
+^
+fail_compilation/fail_pretty_errors.d(39): Error: cannot implicitly convert expression `5` of type `int` to `string`
string x = 5;
^
-fail_compilation/fail_pretty_errors.d(42): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating
+fail_compilation/fail_pretty_errors.d(44): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating
mixin mixinTemplate;
^
-fail_compilation/fail_pretty_errors.d(48): Error: invalid array operation `"" + ""` (possible missing [])
+fail_compilation/fail_pretty_errors.d(50): Error: invalid array operation `"" + ""` (possible missing [])
auto x = ""+"";
^
-fail_compilation/fail_pretty_errors.d(48): did you mean to concatenate (`"" ~ ""`) instead ?
-fail_compilation/fail_pretty_errors.d(51): Error: cannot implicitly convert expression `1111` of type `int` to `byte`
+fail_compilation/fail_pretty_errors.d(50): did you mean to concatenate (`"" ~ ""`) instead ?
+fail_compilation/fail_pretty_errors.d(53): Error: cannot implicitly convert expression `1111` of type `int` to `byte`
byte É‘ = 1111;
^
---
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_11.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_11.f90
new file mode 100644
index 0000000..d4890a3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_11.f90
@@ -0,0 +1,53 @@
+! { dg-do run }
+! { dg-additional-options "-fdump-tree-original" }
+
+module m
+implicit none
+contains
+subroutine sub(y,str)
+integer :: y, x, i
+character(len=5) :: str
+character(len=5) :: z = "abcde"
+logical :: error = .false.
+
+x = 5
+z = "12345"
+do concurrent (i = 1: 3) local_init(x) local_init(z) shared(error)default(none)
+ if (x /= 5) error = .true.
+ if (z /= "12345") error = .true.
+ x = 99
+ z = "XXXXX"
+end do
+if (x /= 5 .or. z /= "12345") stop 1
+if (error) stop 2
+
+do concurrent (i = 1: 3) local(y) local(str) shared(error) default(none)
+ y = 99
+ str = "XXXXX"
+end do
+if (y /= 42 .or. str /= "ABCDE") stop 3
+end
+end
+
+use m
+implicit none
+character(len=5) :: chars = "ABCDE"
+integer :: fourtytwo = 42
+call sub(fourtytwo, chars)
+end
+
+
+! { dg-final { scan-tree-dump-times " integer\\(kind=4\\) x;" 2 "original" } }
+! { dg-final { scan-tree-dump-times " static character\\(kind=1\\) z\\\[1:5\\\] = .abcde.;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " character\\(kind=1\\) z\\\[1:5\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times " integer\\(kind=4\\) y;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " character\\(kind=1\\) str\\\[1:5\\\];" 1 "original" } }
+
+! { dg-final { scan-tree-dump-times " x = 5;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &z, \\(void \\*\\) &.12345.\\\[1\\\]\{lb: 1 sz: 1\}, 5\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times " x = x;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &z, \\(void \\*\\)\\ &z, 5\\);" 1 "original" } }
+
+! { dg-final { scan-tree-dump-not " y = y;" "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &str, \\(void \\*\\)\\ &.XXXXX.\\\[1\\\]\{lb: 1 sz: 1\}, 5\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &str," 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_12.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_12.f90
new file mode 100644
index 0000000..8a2acfa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_12.f90
@@ -0,0 +1,175 @@
+! { dg-do compile }
+
+! Fails to compile because default initializers aren't supported.
+! cf. do_concurrent_14.f90 and PR fortran/101602 (comment 6)
+
+module m
+implicit none
+type t
+ integer :: y = 44
+ integer, pointer :: ptr(:) => null()
+end type t
+
+contains
+
+subroutine sub(x, y)
+ integer :: i
+ type(t) :: x, y(4)
+ type(t) :: a, b(3)
+ logical :: error = .false.
+ integer, target :: tgt(6)
+ integer, target :: tgt2(7)
+
+ x%y = 100
+ x%ptr => tgt
+ y(1)%y = 101
+ y(2)%y = 102
+ y(3)%y = 103
+ y(4)%y = 104
+ y(1)%ptr => tgt
+ y(2)%ptr => tgt
+ y(3)%ptr => tgt
+ y(4)%ptr => tgt
+
+ a%y = 105
+ a%ptr => tgt
+ b(1)%y = 106
+ b(2)%y = 107
+ b(3)%y = 108
+ b(1)%ptr => tgt
+ b(2)%ptr => tgt
+ b(3)%ptr => tgt
+
+ do concurrent (i = 1: 3) local_init(x,y,a,b) shared(error,tgt,tgt2) default(none)
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ error = .true.
+
+ x%y = 900
+ x%ptr => tgt
+ y(1)%y = 901
+ y(2)%y = 902
+ y(3)%y = 903
+ y(4)%y = 904
+ y(1)%ptr => tgt2
+ y(2)%ptr => tgt2
+ y(3)%ptr => tgt2
+ y(4)%ptr => tgt2
+
+ a%y = 905
+ a%ptr => tgt
+ b(1)%y = 906
+ b(2)%y = 907
+ b(3)%y = 908
+ b(1)%ptr => tgt2
+ b(2)%ptr => tgt2
+ b(3)%ptr => tgt2
+ end do
+
+ if (error) stop 1
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 2
+
+ do concurrent (i = 1: 3) local(x,y,a,b) shared(error,tgt,tgt2) default(none)
+! { dg-error "34: Sorry, LOCAL specifier at .1. for 'x' of derived type with default initializer is not yet supported" "" { target *-*-* } .-1 }
+! { dg-error "36: Sorry, LOCAL specifier at .1. for 'y' of derived type with default initializer is not yet supported" "" { target *-*-* } .-2 }
+! { dg-error "38: Sorry, LOCAL specifier at .1. for 'a' of derived type with default initializer is not yet supported" "" { target *-*-* } .-3 }
+! { dg-error "40: Sorry, LOCAL specifier at .1. for 'b' of derived type with default initializer is not yet supported" "" { target *-*-* } .-4 }
+
+ if (x%y /= 44) error = .true.
+ if (any(y(:)%y /= 44)) error = .true.
+ if (a%y /= 44) error = .true.
+ if (any (b(:)%y /= 44)) error = .true.
+
+ if (associated(x%ptr)) error = .true.
+ if (associated(y(1)%ptr)) error = .true.
+ if (associated(y(2)%ptr)) error = .true.
+ if (associated(y(3)%ptr)) error = .true.
+ if (associated(y(4)%ptr)) error = .true.
+ if (associated(a%ptr)) error = .true.
+ if (associated(b(1)%ptr)) error = .true.
+ if (associated(b(2)%ptr)) error = .true.
+ if (associated(b(3)%ptr)) error = .true.
+
+ x%y = 900
+ x%ptr => tgt
+ y(1)%y = 901
+ y(2)%y = 902
+ y(3)%y = 903
+ y(4)%y = 904
+ y(1)%ptr => tgt2
+ y(2)%ptr => tgt2
+ y(3)%ptr => tgt2
+ y(4)%ptr => tgt2
+
+ a%y = 905
+ a%ptr => tgt
+ b(1)%y = 906
+ b(2)%y = 907
+ b(3)%y = 908
+ b(1)%ptr => tgt2
+ b(2)%ptr => tgt2
+ b(3)%ptr => tgt2
+ end do
+
+ if (error) stop 3
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 4
+end
+end
+
+use m
+implicit none
+type(t) :: q, r(4)
+call sub(q,r)
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_13.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_13.f90
new file mode 100644
index 0000000..6545780
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_13.f90
@@ -0,0 +1,211 @@
+! { dg-do run }
+! { dg-additional-options "-fdump-tree-original" }
+
+module m
+implicit none
+type t
+ integer :: y = 44
+ integer, pointer :: ptr(:) => null()
+end type t
+
+contains
+
+subroutine sub(x, y)
+ integer :: i
+ type(t), pointer :: x, y(:)
+ type(t), pointer :: a, b(:)
+ logical :: error = .false.
+ integer, target :: tgt(6)
+ integer, target :: tgt2(7)
+
+ type(t), pointer :: x_saved
+ type(t), pointer :: y_saved(:)
+ type(t), pointer :: a_saved
+ type(t), pointer :: b_saved(:)
+
+ allocate(a, b(3))
+
+ x_saved => x
+ y_saved => y
+ a_saved => a
+ b_saved => b
+
+ x%y = 100
+ x%ptr => tgt
+ y(1)%y = 101
+ y(2)%y = 102
+ y(3)%y = 103
+ y(4)%y = 104
+ y(1)%ptr => tgt
+ y(2)%ptr => tgt
+ y(3)%ptr => tgt
+ y(4)%ptr => tgt
+
+ a%y = 105
+ a%ptr => tgt
+ b(1)%y = 106
+ b(2)%y = 107
+ b(3)%y = 108
+ b(1)%ptr => tgt
+ b(2)%ptr => tgt
+ b(3)%ptr => tgt
+
+ do concurrent (i = 1: 3) local_init(x,y,a,b) shared(error,tgt,tgt2,x_saved,y_saved,a_saved,b_saved) default(none)
+ if (.not.associated(x,x_saved)) error = .true.
+ if (.not.associated(y,y_saved)) error = .true.
+ if (.not.associated(a,a_saved)) error = .true.
+ if (.not.associated(b,b_saved)) error = .true.
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ error = .true.
+
+ if (i == 3) then
+ ! This is a hack - assuming no concurrency!
+ x%y = 900
+ y(1)%y = 901
+ a%y = 905
+ b(1)%y = 906
+ endif
+ x => null()
+ y => null()
+ a => null()
+ b => null()
+ end do
+
+ if (error) stop 1
+ if (.not.associated(x,x_saved)) stop 2
+ if (.not.associated(y,y_saved)) stop 3
+ if (.not.associated(a,a_saved)) stop 4
+ if (.not.associated(b,b_saved)) stop 5
+ ! Value a bit changed because of the hack above!
+ if (x%y /= 900 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 901 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 905 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 906 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 6
+
+ ! Reset
+ x%y = 100
+ y(1)%y = 101
+ a%y = 105
+ b(1)%y = 106
+
+ do concurrent (i = 1: 3) local(x,y,a,b) shared(error) default(none)
+ x => null()
+ y => null()
+ a => null()
+ b => null()
+ end do
+
+ if (.not.associated(x,x_saved)) stop 7
+ if (.not.associated(y,y_saved)) stop 8
+ if (.not.associated(a,a_saved)) stop 9
+ if (.not.associated(b,b_saved)) stop 10
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 11
+
+ do concurrent (i = 1: 3) local(x,y,a,b) shared(error,tgt,tgt2,x_saved,y_saved,a_saved,b_saved) default(none)
+ x => a_saved
+ y => b_saved
+ a => x_saved
+ b => y_saved
+ if (a%y /= 100 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 101 &
+ .or. b(2)%y /= 102 &
+ .or. b(3)%y /= 103 &
+ .or. b(4)%y /= 104 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt) &
+ .or. .not.associated (b(4)%ptr, tgt) &
+ .or. x%y /= 105 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 106 &
+ .or. y(2)%y /= 107 &
+ .or. y(3)%y /= 108 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt)) &
+ error = .true.
+ end do
+
+ if (.not.associated(x,x_saved)) stop 12
+ if (.not.associated(y,y_saved)) stop 13
+ if (.not.associated(a,a_saved)) stop 14
+ if (.not.associated(b,b_saved)) stop 15
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 16
+end
+end
+
+use m
+implicit none
+type(t), pointer :: q, r(:)
+allocate(q, r(4))
+call sub(q,r)
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_14.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_14.f90
new file mode 100644
index 0000000..c0a90ff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_14.f90
@@ -0,0 +1,176 @@
+! { dg-do run }
+
+module m
+implicit none
+type t
+ integer :: y = 44
+ integer, pointer :: ptr(:) => null()
+end type t
+
+! No default initializers, cf. do_concurrent_12.f90
+! and PR fortran/101602 (comment 6)
+type t2
+ integer :: y
+ integer, pointer :: ptr(:)
+end type t2
+
+contains
+
+subroutine sub(x, y)
+ integer :: i
+ type(t) :: x, y(4)
+ type(t) :: a, b(3)
+ type(t2) :: x2, y2(4)
+ type(t2) :: a2, b2(3)
+ logical :: error = .false.
+ integer, target :: tgt(6)
+ integer, target :: tgt2(7)
+
+ x%y = 100
+ x%ptr => tgt
+ y(1)%y = 101
+ y(2)%y = 102
+ y(3)%y = 103
+ y(4)%y = 104
+ y(1)%ptr => tgt
+ y(2)%ptr => tgt
+ y(3)%ptr => tgt
+ y(4)%ptr => tgt
+
+ a%y = 105
+ a%ptr => tgt
+ b(1)%y = 106
+ b(2)%y = 107
+ b(3)%y = 108
+ b(1)%ptr => tgt
+ b(2)%ptr => tgt
+ b(3)%ptr => tgt
+
+ ! Copy values from 't' to associated 't2' variables
+ x2%y = x%y
+ x2%ptr => x%ptr
+ a2%y = a%y
+ a2%ptr => a%ptr
+ y2(:)%y = y(:)%y
+ do i = 1, size(y)
+ y2(i)%ptr => y(i)%ptr
+ end do
+ b2(:)%y = b(:)%y
+ do i = 1, size(b)
+ b2(i)%ptr => b(i)%ptr
+ end do
+
+ do concurrent (i = 1: 3) local_init(x,y,a,b) shared(error,tgt,tgt2) default(none)
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ error = .true.
+
+ x%y = 900
+ x%ptr => tgt
+ y(1)%y = 901
+ y(2)%y = 902
+ y(3)%y = 903
+ y(4)%y = 904
+ y(1)%ptr => tgt2
+ y(2)%ptr => tgt2
+ y(3)%ptr => tgt2
+ y(4)%ptr => tgt2
+
+ a%y = 905
+ a%ptr => tgt
+ b(1)%y = 906
+ b(2)%y = 907
+ b(3)%y = 908
+ b(1)%ptr => tgt2
+ b(2)%ptr => tgt2
+ b(3)%ptr => tgt2
+ end do
+
+ if (error) stop 1
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 2
+
+ ! Use version without default initializers
+ do concurrent (i = 1: 3) local(x2,y2,a2,b2) shared(error,tgt,tgt2) default(none)
+ x2%y = 900
+ x2%ptr => tgt
+ y2(1)%y = 901
+ y2(2)%y = 902
+ y2(3)%y = 903
+ y2(4)%y = 904
+ y2(1)%ptr => tgt2
+ y2(2)%ptr => tgt2
+ y2(3)%ptr => tgt2
+ y2(4)%ptr => tgt2
+
+ a2%y = 905
+ a2%ptr => tgt
+ b2(1)%y = 906
+ b2(2)%y = 907
+ b2(3)%y = 908
+ b2(1)%ptr => tgt2
+ b2(2)%ptr => tgt2
+ b2(3)%ptr => tgt2
+ end do
+
+ if (error) stop 3
+ if (x2%y /= 100 &
+ .or. .not.associated (x2%ptr, tgt) &
+ .or. y2(1)%y /= 101 &
+ .or. y2(2)%y /= 102 &
+ .or. y2(3)%y /= 103 &
+ .or. y2(4)%y /= 104 &
+ .or. .not.associated (y2(1)%ptr, tgt) &
+ .or. .not.associated (y2(2)%ptr, tgt) &
+ .or. .not.associated (y2(3)%ptr, tgt) &
+ .or. .not.associated (y2(4)%ptr, tgt) &
+ .or. a2%y /= 105 &
+ .or. .not.associated (a2%ptr, tgt) &
+ .or. b2(1)%y /= 106 &
+ .or. b2(2)%y /= 107 &
+ .or. b2(3)%y /= 108 &
+ .or. .not.associated (b2(1)%ptr, tgt) &
+ .or. .not.associated (b2(2)%ptr, tgt) &
+ .or. .not.associated (b2(3)%ptr, tgt)) &
+ stop 4
+end
+end
+
+use m
+implicit none
+type(t) :: q, r(4)
+call sub(q,r)
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_15.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_15.f90
new file mode 100644
index 0000000..f0003c8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_15.f90
@@ -0,0 +1,20 @@
+! { dg-do compile }
+
+! Fails to compile because assumed-size arrays are not yet
+! handled with LOCAL / LOCAL_INIT, cf. PR fortran/101602 (comment 6)
+
+subroutine test_it(xx, yy)
+ implicit none
+ integer :: xx(:), yy(:,:)
+ integer :: i, sz1, sz2
+
+ sz1 = size(xx)
+ do , concurrent (i = 1 : sz1) local(xx) ! { dg-error "39: Sorry, LOCAL specifier at .1. for assumed-size array 'xx' is not yet supported" }
+ xx(i) = 1
+ end do
+
+ sz2 = size(yy,dim=1)
+ do , concurrent (i=1:sz2) local_init(yy) ! { dg-error "40: Sorry, LOCAL_INIT specifier at .1. for assumed-size array 'yy' is not yet supported" }
+ yy(i,:) = 1
+ end do
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
index a99d81e..55eb97b 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
@@ -8,10 +8,8 @@ program do_concurrent_complex
product = 1
do concurrent (i = 1:10) local(j) shared(sum) reduce(+:sum)
! { dg-error "Variable .sum. at .1. has already been specified in a locality-spec" "" { target *-*-* } .-1 }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-2 }
do concurrent (j = 1:10) local(k) shared(product) reduce(*:product)
! { dg-error "Variable .product. at .1. has already been specified in a locality-spec" "" { target *-*-* } .-1 }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-2 }
do concurrent (k = 1:10)
array(i,j,k) = i * j * k
sum = sum + array(i,j,k)
@@ -20,4 +18,4 @@ program do_concurrent_complex
end do
end do
print *, sum, product
-end program do_concurrent_complex \ No newline at end of file
+end program do_concurrent_complex
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_9.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_9.f90
index 98cef3e..9c1bca6 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_9.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_9.f90
@@ -6,7 +6,7 @@ program do_concurrent_default_none
x = 0
y = 0
z = 0
- do concurrent (i = 1:10) default(none) shared(x) local(y) ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported" }
+ do concurrent (i = 1:10) default(none) shared(x) local(y)
! { dg-error "Variable 'z' .* not specified in a locality spec .* but required due to DEFAULT \\(NONE\\)" "" { target *-*-* } .-1 }
x = x + i
y = i * 2
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
index 2e1c18c..0c8a6ad 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
@@ -11,7 +11,6 @@ program do_concurrent_all_clauses
shared(arr, squared, sum, max_val) &
reduce(+:sum) & ! { dg-error "Variable 'sum' at \\(1\\) has already been specified in a locality-spec" }
reduce(max:max_val) ! { dg-error "Variable 'max_val' at \\(1\\) has already been specified in a locality-spec" }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported*" "" { target *-*-* } .-1 }
block
integer :: temp2
temp = i * 2
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
index 08e1fb9..6c5e87e 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
@@ -3,9 +3,9 @@
program do_concurrent_local_init
implicit none
integer :: i, arr(10), temp
- do concurrent (i = 1:10) local_init(temp) ! { dg-error "LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" }
+ do concurrent (i = 1:10) local_init(temp)
temp = i
arr(i) = temp
end do
print *, arr
-end program do_concurrent_local_init \ No newline at end of file
+end program do_concurrent_local_init
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
index 0ee7a7e..ed3504e 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
@@ -6,9 +6,8 @@ do , concurrent (i = 1:5) shared(j,jj) local(k,kk) local_init(ll,lll)
! { dg-warning "Variable 'kk' in locality-spec at \\(1\\) is not used \\\[-Wunused-variable\\\]" "" { target *-*-* } .-1 }
! { dg-warning "Variable 'll' in locality-spec at \\(1\\) is not used \\\[-Wunused-variable\\\]" "" { target *-*-* } .-2 }
! { dg-warning "Variable 'jj' in locality-spec at \\(1\\) is not used \\\[-Wunused-variable\\\]" "" { target *-*-* } .-3 }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-4 }
j = 5
k = 7
lll = 8
end do
-end \ No newline at end of file
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90 b/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
index f2c4d97..540079a 100644
--- a/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
@@ -23,6 +23,6 @@ use m
call f()
end
-! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 3, interopobjs\.\[0-9\]+, tgt_tgtsync\.\[0-9\]+, pref_type\.\[0-9\]+, " "gimple" } }
-! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 0, 0B, 0B, 0B, 0, 0B, 3, interopobjs\.\[0-9\]+," "gimple" } }
+! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 3, &interopobjs\.\[0-9\]+, &tgt_tgtsync\.\[0-9\]+, &pref_type\.\[0-9\]+, " "gimple" } }
+! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 0, 0B, 0B, 0B, 0, 0B, 3, &interopobjs\.\[0-9\]+," "gimple" } }
! { dg-final { scan-tree-dump "g \\(&interop\.\[0-9\]+, interop\.\[0-9\]+, &interop\.\[0-9\]+\\)" "gimple" } }
diff --git a/gcc/testsuite/gfortran.dg/optional_absent_13.f90 b/gcc/testsuite/gfortran.dg/optional_absent_13.f90
new file mode 100644
index 0000000..9c2039b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/optional_absent_13.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+! PR fortran/119656 - wrong code with impure elemental subroutine and interface
+!
+! Derived from testcase at:
+! https://fortran-lang.discourse.group/t/
+! problem-with-impure-elemental-subroutine-in-interface-with-gfortran/9545
+
+module m2
+ implicit none
+ interface foo
+ module procedure foo_mat
+ module procedure foo_df
+ module procedure foo_cmat
+ end interface foo
+contains
+
+ subroutine foo_mat(x, nacf, label)
+ real, intent(in) :: x(:,:)
+ integer, intent(in) :: nacf
+ character(len=*), intent(in), optional :: label
+ end subroutine foo_mat
+
+ impure elemental subroutine foo_df(nacf, outu, xstr)
+ integer , intent(in) :: nacf
+ integer , intent(in), optional :: outu
+ character(len=*), intent(in), optional :: xstr
+ if (present(xstr)) then
+ if (len (xstr) /= 2) then
+ print *,"nacf, len(xstr) =", nacf, len(xstr)
+ stop nacf
+ end if
+ end if
+ end subroutine foo_df
+
+ subroutine foo_cmat(x, nacf, label)
+ complex, intent(in) :: x(:,:)
+ integer, intent(in) :: nacf
+ character(len=*), intent(in), optional :: label
+ end subroutine foo_cmat
+
+end module m2
+
+program main
+ use m2, only: foo, foo_df
+ implicit none
+ call foo_df(nacf = 1, xstr="ab")
+ call foo (nacf = 2, xstr="ab")
+end program main
diff --git a/gcc/testsuite/gfortran.dg/reduce_2.f90 b/gcc/testsuite/gfortran.dg/reduce_2.f90
index 52d7c68..cacd54a 100644
--- a/gcc/testsuite/gfortran.dg/reduce_2.f90
+++ b/gcc/testsuite/gfortran.dg/reduce_2.f90
@@ -8,6 +8,10 @@
integer, allocatable :: i(:,:,:)
integer :: n(2,2)
Logical :: l1(4), l2(2,3), l3(2,2)
+ type :: string_t
+ character(:), allocatable :: chr(:)
+ end type
+ type(string_t) :: str
! The ARRAY argument at (1) of REDUCE shall not be polymorphic
print *, reduce (cstar, add) ! { dg-error "shall not be polymorphic" }
@@ -54,6 +58,10 @@
! (2) shall be the same
print *, reduce ([character(4) :: 'abcd','efgh'], char_three) ! { dg-error "arguments of the OPERATION" }
+! The character length of the ARRAY argument at (1) and of the arguments of the OPERATION at (2)
+! shall be the same
+ str = reduce ([character(4) :: 'abcd','efgh'], char_one) ! { dg-error "character length of the ARRAY" }
+
! The DIM argument at (1), if present, must be an integer scalar
print *, reduce (i, add, dim = 2.0) ! { dg-error "must be an integer scalar" }
diff --git a/gcc/testsuite/gfortran.dg/reduce_3.f90 b/gcc/testsuite/gfortran.dg/reduce_3.f90
new file mode 100644
index 0000000..c0ed062
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reduce_3.f90
@@ -0,0 +1,56 @@
+! { dg-do run }
+!
+! PR119460: Scalar reduce was failing with ARRAY elements larger than
+! an address size.
+!
+! Contributed by Rainer Orth <ro@gcc.gnu.org>
+!
+program test_reduce
+ implicit none
+ integer :: i
+ integer, parameter :: dp = kind(1.0_8), extent = 4
+
+ real(dp) :: rarray(extent,extent,extent), rmat(extent,extent), &
+ rvec (extent), rscl
+
+ type :: t
+ real(dp) :: field(extent)
+ end type t
+
+ type (t) :: tmat(extent, extent), tarray(extent), tscalar
+
+ rarray = reshape ([(real(i, kind = dp), i = 1, size(rarray))], &
+ shape (rarray))
+
+ rmat = reduce (rarray, add, dim = 1)
+ if (any (rmat /= sum (rarray, 1))) stop 1
+
+ rmat = reduce (rarray, add, dim = 2)
+ if (any (rmat /= sum (rarray, 2))) stop 2
+
+ rmat = reduce (rarray, add, dim = 3)
+ if (any (rmat /= sum (rarray, 3))) stop 3
+
+ rscl = reduce (rarray, add)
+ if (rscl /= sum (rarray)) stop 4
+
+ tmat%field(1) = rmat
+ tarray = reduce (tmat, t_add, dim =1)
+ rvec = reduce (rmat, add, dim = 1)
+ if (any (tarray%field(1) /= rvec)) stop 5
+
+ tscalar = reduce (tmat, t_add)
+ if (tscalar%field(1) /= sum (tmat%field(1))) stop 6
+contains
+
+ pure real(dp) function add (i, j)
+ real(dp), intent(in) :: i, j
+ add = i + j
+ end function add
+
+ pure type(t) function t_add (i, j)
+ type(t), intent(in) :: i, j
+ t_add%field(1) = i%field(1) + j%field(1)
+ end function t_add
+
+end
diff --git a/gcc/testsuite/gfortran.dg/reduce_4.f90 b/gcc/testsuite/gfortran.dg/reduce_4.f90
new file mode 100644
index 0000000..edea931
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reduce_4.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+!
+! PR119540 comment2: REDUCE was getting the shape wrong. This testcase also
+! verifies that the longest possible name for the OPERATION wrapper function
+! is catered for.
+!
+! Contributed by Harald Anlauf <anlauf@gcc.gnu.org>
+!
+program p2345678901234567890123456789012345678901234567890123456789_123
+ implicit none
+ integer, parameter :: n = 3
+ integer, parameter :: vec(n) = [2, 5, 10]
+ integer, parameter :: mat(n,2) = reshape([vec,2*vec],[n,2])
+ integer :: mat_shape(2), reduce_shape(1), r
+ integer, dimension(:), allocatable :: res1
+
+ mat_shape = shape (mat)
+ reduce_shape = shape (reduce (mat, add, 1), 1)
+ if (reduce_shape(1) /= mat_shape(2)) stop 1
+
+ reduce_shape = shape (reduce (mat, add, 1), 1)
+ if (reduce_shape(1) /= mat_shape(2)) stop 2
+
+ res1 = reduce (mat, add, 1)
+ if (any (res1 /= [17, 34])) stop 3
+
+ res1 = reduce (mat, add, 2)
+ if (any (res1 /= [6, 15, 30])) stop 4
+
+ r = reduce (vec, &
+ o2345678901234567890123456789012345678901234567890123456789_123)
+ if (r /= 17) stop 5
+
+ deallocate (res1)
+contains
+ pure function add(i,j) result(sum_ij)
+ integer, intent(in) :: i, j
+ integer :: sum_ij
+ sum_ij = i + j
+ end function add
+
+ pure function o2345678901234567890123456789012345678901234567890123456789_123 (i, j) &
+ result (sum)
+ integer, intent(in) :: i, j
+ integer :: sum
+ sum = i + j
+ end function
+end
diff --git a/gcc/testsuite/gnat.dg/renaming17.adb b/gcc/testsuite/gnat.dg/renaming17.adb
new file mode 100644
index 0000000..d826433
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming17.adb
@@ -0,0 +1,17 @@
+-- { dg-do run }
+
+procedure Renaming17 is
+
+ function Incr (V : Integer; I : Integer := 1) return Integer is
+ (V + I);
+
+ function Incr_Ren (V : Integer; I : Positive := 1) return Positive
+ renames Incr;
+
+ I : Integer;
+
+begin
+ I := Incr_Ren (-3);
+ I := Incr_Ren (-3, 2);
+ I := Incr_Ren (-3, 0);
+end;
diff --git a/gcc/testsuite/lib/cobol.exp b/gcc/testsuite/lib/cobol.exp
index cd88bcb..723989e 100644
--- a/gcc/testsuite/lib/cobol.exp
+++ b/gcc/testsuite/lib/cobol.exp
@@ -107,8 +107,11 @@ proc cobol_link_flags { paths } {
}
if { $gccpath != "" } {
+ if [file exists "${gccpath}/libgcobol/libgcobol.spec"] {
+ append flags "-B${gccpath}/libgcobol "
+ }
if [file exists "${gccpath}/libgcobol/libgcobol.a"] {
- append flags "-L${gccpath}/libgcobol"
+ append flags "-L${gccpath}/libgcobol "
}
if { [file exists "${gccpath}/libgcobol/.libs/libgcobol.a"] ||
[file exists "${gccpath}/libgobol/.libs/libgcobol.${shlib_ext}"] } {
@@ -119,6 +122,15 @@ proc cobol_link_flags { paths } {
}
append ld_library_path ":${gccpath}/libgcobol/.libs"
}
+ if { [file exists "${gccpath}/libquadmath/.libs/libquadmath.a"] ||
+ [file exists "${gccpath}/libquadmath/.libs/libquadmath.${shlib_ext}"] } {
+ if { $target_wants_B_option } {
+ append flags "-B${gccpath}/libquadmath/.libs "
+ } else {
+ append flags "-L${gccpath}/libquadmath/.libs "
+ }
+ append ld_library_path ":${gccpath}/libquadmath/.libs"
+ }
if { [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] ||
[file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] } {
if { $target_wants_B_option } {
@@ -160,7 +172,6 @@ proc cobol_init { args } {
global gcc_warning_prefix
global gcc_error_prefix
global TEST_ALWAYS_FLAGS
- global cobol_init_set_COBOL_UNDER_TEST
# We set LC_ALL and LANG to C so that we get the same error messages as expected.
setenv LC_ALL C
@@ -176,24 +187,14 @@ proc cobol_init { args } {
setenv LANG C.ASCII
}
- # COBOL_UNDER_TEST as set below contains $specpath, which depends on
- # the used multilib config. Thus, its value may need to be reset;
- # that's tracked via gfortran_init_set_COBOL_UNDER_TEST.
- if { ![info exists COBOL_UNDER_TEST]
- || [info exists cobol_init_set_COBOL_UNDER_TEST] } then {
+ if ![info exists COBOL_UNDER_TEST] then {
if [info exists TOOL_EXECUTABLE] {
set COBOL_UNDER_TEST $TOOL_EXECUTABLE
} else {
if { [is_remote host] || ! [info exists TESTING_IN_BUILD_TREE] } {
set COBOL_UNDER_TEST [transform gcobol]
} else {
- if [info exists TOOL_OPTIONS] {
- set specpath [get_multilibs ${TOOL_OPTIONS}]
- } else {
- set specpath [get_multilibs]
- }
- set cobol_init_set_COBOL_UNDER_TEST 1
- set COBOL_UNDER_TEST [findfile $base_dir/../../gcobol "$base_dir/../../gcobol -B$base_dir/../../ -B$specpath/libgcobol/.libs" [findfile $base_dir/gcobol "$base_dir/gcobol -B$base_dir/" [transform gcobol]]]
+ set COBOL_UNDER_TEST [findfile $base_dir/../../gcobol "$base_dir/../../gcobol -B$base_dir/../../" [findfile $base_dir/gcobol "$base_dir/gcobol -B$base_dir/" [transform gcobol]]]
}
}
}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index ee4138a..a62f459 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -13489,11 +13489,11 @@ proc check_effective_target_arm_v8_3a_bkey_directive { } {
# Return 1 if the target supports executing the Armv8.1-M Mainline Low
# Overhead Loop, 0 otherwise. The test is valid for ARM.
-proc check_effective_target_arm_v8_1_lob_ok { } {
+proc check_effective_target_arm_v8_1m_lob_hw { } {
if { ![check_effective_target_arm_cortex_m] } {
return 0;
} else {
- return [check_runtime arm_v8_1_lob_hw_available {
+ return [check_runtime arm_v8_1m_lob_hw_available {
int
main (void)
{ int i = 0;
@@ -13513,9 +13513,9 @@ proc check_effective_target_arm_v8_1_lob_ok { } {
# the Armv8.1-M Mainline Low Overhead Loop, 0 otherwise. The test is
# valid for ARM.
-proc check_effective_target_arm_thumb2_no_arm_v8_1_lob { } {
+proc check_effective_target_arm_thumb2_no_arm_v8_1m_lob { } {
if { [check_effective_target_arm_thumb2]
- && ![check_effective_target_arm_v8_1_lob_ok] } {
+ && ![check_effective_target_arm_v8_1m_lob_hw] } {
return 1
}
return 0
@@ -13525,9 +13525,9 @@ proc check_effective_target_arm_thumb2_no_arm_v8_1_lob { } {
# used and the target does not support executing the Armv8.1-M
# Mainline Low Overhead Loop, 0 otherwise. The test is valid for ARM.
-proc check_effective_target_arm_thumb2_ok_no_arm_v8_1_lob { } {
+proc check_effective_target_arm_thumb2_ok_no_arm_v8_1m_lob { } {
if { [check_effective_target_arm_thumb2_ok]
- && ![check_effective_target_arm_v8_1_lob_ok] } {
+ && ![check_effective_target_arm_v8_1m_lob_hw] } {
return 1
}
return 0
diff --git a/gcc/testsuite/rust/compile/enum_discriminant1.rs b/gcc/testsuite/rust/compile/enum_discriminant1.rs
new file mode 100644
index 0000000..32092b2
--- /dev/null
+++ b/gcc/testsuite/rust/compile/enum_discriminant1.rs
@@ -0,0 +1,7 @@
+enum Foo {
+ Bar = 3 + 12,
+}
+
+fn test() -> Foo { // { dg-warning "function is never used" }
+ return Foo::Bar;
+} \ No newline at end of file
diff --git a/gcc/testsuite/rust/compile/feature.rs b/gcc/testsuite/rust/compile/feature.rs
index f743f92..6f428f0 100644
--- a/gcc/testsuite/rust/compile/feature.rs
+++ b/gcc/testsuite/rust/compile/feature.rs
@@ -2,5 +2,7 @@
#![feature(AA)] //{ dg-error "unknown feature .AA." }
#![feature(iamcrabby)] // { dg-error "unknown feature .iamcrabby." }
#![feature(nonexistent_gccrs_feature)] // { dg-error "unknown feature .nonexistent_gccrs_feature." }
+// ErrorCode - E0556
+#![feature] // { dg-error "malformed .feature. attribute input" }
fn main() {}
diff --git a/gcc/testsuite/rust/compile/invalid_label_name.rs b/gcc/testsuite/rust/compile/invalid_label_name.rs
index 5c850da..66e40a6 100644
--- a/gcc/testsuite/rust/compile/invalid_label_name.rs
+++ b/gcc/testsuite/rust/compile/invalid_label_name.rs
@@ -1,20 +1,24 @@
+// { dg-additional-options "-frust-name-resolution-2.0" }
pub fn function() {
'continue: loop {
// { dg-error "invalid label name .'continue." "" { target *-*-* } .-1 }
break 'extern;
// { dg-error "invalid label name .'extern." "" { target *-*-* } .-1 }
+ // { dg-error "use of undeclared label .'extern." "" { target *-*-* } .-2 }
}
'break: loop {
// { dg-error "invalid label name .'break." "" { target *-*-* } .-1 }
break 'for;
// { dg-error "invalid label name .'for." "" { target *-*-* } .-1 }
+ // { dg-error "use of undeclared label .'for." "" { target *-*-* } .-2 }
}
'crate: loop {
// { dg-error "invalid label name .'crate." "" { target *-*-* } .-1 }
break 'loop;
// { dg-error "invalid label name .'loop." "" { target *-*-* } .-1 }
+ // { dg-error "use of undeclared label .'loop." "" { target *-*-* } .-2 }
}
'a: loop {
diff --git a/gcc/testsuite/rust/compile/issue-2812.rs b/gcc/testsuite/rust/compile/issue-2812.rs
index 173259b..0de1738 100644
--- a/gcc/testsuite/rust/compile/issue-2812.rs
+++ b/gcc/testsuite/rust/compile/issue-2812.rs
@@ -1,4 +1,4 @@
// { dg-additional-options "-frust-compile-until=astvalidation" }
fn foo_1(&self);
-fn foo_1(&mut self);
-fn foo_1(self);
+fn foo_2(&mut self);
+fn foo_3(self);
diff --git a/gcc/testsuite/rust/compile/issue-3625.rs b/gcc/testsuite/rust/compile/issue-3625.rs
new file mode 100644
index 0000000..91e0dc9
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3625.rs
@@ -0,0 +1,2 @@
+type A = crate::A;
+// { dg-error "failed to resolve type path segment: .A." "" { target *-*-* } .-2 }
diff --git a/gcc/testsuite/rust/compile/issue-3643.rs b/gcc/testsuite/rust/compile/issue-3643.rs
new file mode 100644
index 0000000..bed9ffc
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3643.rs
@@ -0,0 +1,4 @@
+fn foo() {
+ let x: usize<foo>;
+ // { dg-error "generic arguments are not allowed for this type .E0109." "" { target *-*-* } .-1 }
+}
diff --git a/gcc/testsuite/rust/compile/issue-3646.rs b/gcc/testsuite/rust/compile/issue-3646.rs
new file mode 100644
index 0000000..80693cb
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3646.rs
@@ -0,0 +1,7 @@
+trait Foo {
+ type T;
+ fn foo() -> Foo<main>;
+ // { dg-error "generic arguments are not allowed for this type .E0109." "" { target *-*-* } .-1 }
+}
+
+fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3647.rs b/gcc/testsuite/rust/compile/issue-3647.rs
new file mode 100644
index 0000000..51d9478d
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3647.rs
@@ -0,0 +1,7 @@
+#![allow(dead_code)]
+type A = fn();
+
+type B = for<'static> fn();
+// { dg-error "invalid lifetime parameter name: .static. .E0262." "" { target *-*-* } .-1 }
+
+pub fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3648.rs b/gcc/testsuite/rust/compile/issue-3648.rs
new file mode 100644
index 0000000..52ecbbf
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3648.rs
@@ -0,0 +1,8 @@
+struct B; // { dg-warning "struct is never constructed" }
+
+impl B {
+ fn main() {}
+ // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
+}
+
+fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3654.rs b/gcc/testsuite/rust/compile/issue-3654.rs
new file mode 100644
index 0000000..923488e
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3654.rs
@@ -0,0 +1,3 @@
+type Meeshka = Mow<!>;
+// { dg-error "generic arguments are not allowed for this type .E0109." "" { target *-*-* } .-1 }
+type Mow = &'static fn(!) -> !;
diff --git a/gcc/testsuite/rust/compile/issue-3656.rs b/gcc/testsuite/rust/compile/issue-3656.rs
new file mode 100644
index 0000000..e0bec2f
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3656.rs
@@ -0,0 +1,10 @@
+enum Foo {
+ Bar(isize),
+}
+
+fn main() {
+ match Foo::Bar(205) {
+ Foo { i } => (),
+ // { dg-error "expected struct, variant or union type, found enum .Foo. .E0574." "" { target *-*-* } .-1 }
+ }
+}
diff --git a/gcc/testsuite/rust/compile/issue-3657.rs b/gcc/testsuite/rust/compile/issue-3657.rs
new file mode 100644
index 0000000..978f3ce
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3657.rs
@@ -0,0 +1,8 @@
+struct Foo<'_>(&'_ u8);
+
+impl Foo<'a> {
+ // { dg-error "unresolved lifetime" "" { target *-*-* } .-1 }
+ fn x() {}
+}
+
+fn x() {}
diff --git a/gcc/testsuite/rust/compile/issue-3663.rs b/gcc/testsuite/rust/compile/issue-3663.rs
new file mode 100644
index 0000000..0f0559c
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3663.rs
@@ -0,0 +1,6 @@
+pub trait TypeFn {}
+
+impl TypeFn for Output<{ 42 }> {
+ // { dg-error "could not resolve type path .Output. .E0412." "" { target *-*-* } .-1 }
+ type Output = ();
+}
diff --git a/gcc/testsuite/rust/compile/issue-3665.rs b/gcc/testsuite/rust/compile/issue-3665.rs
new file mode 100644
index 0000000..d66a81f
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3665.rs
@@ -0,0 +1,6 @@
+pub const uint_val: usize = 1;
+pub const uint_expr: usize = 1 << uint_val;
+
+pub fn test() -> usize {
+ uint_expr
+}
diff --git a/gcc/testsuite/rust/compile/issue-3667.rs b/gcc/testsuite/rust/compile/issue-3667.rs
new file mode 100644
index 0000000..e72069c
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3667.rs
@@ -0,0 +1,24 @@
+// { dg-options "-w" }
+#![feature(raw_ref_op)]
+
+const pq1: () = {
+ let mut x = 2;
+ &raw mut x;
+}; //~ mutable reference
+
+static B: () = {
+ let mut x = 2;
+ &raw mut x;
+}; //~ mutable reference
+
+static mut C: () = {
+ let mut x = 2;
+ &raw mut x;
+}; //~ mutable reference
+
+const fn foo() {
+ let mut x = 0;
+ let y = &raw mut x; //~ mutable reference
+}
+
+fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3671.rs b/gcc/testsuite/rust/compile/issue-3671.rs
new file mode 100644
index 0000000..e800d53
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3671.rs
@@ -0,0 +1,2 @@
+impl Self<0> {}
+// { dg-error "could not resolve type path" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro6.rs b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs
index 9c54a67..bbaaa25 100644
--- a/gcc/testsuite/rust/compile/macros/mbe/macro6.rs
+++ b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs
@@ -1,6 +1,6 @@
macro_rules! zero_or_one {
($($a:literal)?) => {
- f();
+ 1 + 2;
}
}
diff --git a/gcc/testsuite/rust/compile/min_specialization1.rs b/gcc/testsuite/rust/compile/min_specialization1.rs
new file mode 100644
index 0000000..d38167e
--- /dev/null
+++ b/gcc/testsuite/rust/compile/min_specialization1.rs
@@ -0,0 +1,15 @@
+#![feature(min_specialization)]
+
+pub trait Foo {
+ fn foo(&self) -> bool {
+ false
+ }
+}
+
+pub struct Bar;
+
+impl Foo for Bar {
+ default fn foo(&self) -> bool { // { dg-warning "unused" }
+ true
+ }
+}
diff --git a/gcc/testsuite/rust/compile/nr2/compile.exp b/gcc/testsuite/rust/compile/nr2/compile.exp
index 35637f1..4d91dd0 100644
--- a/gcc/testsuite/rust/compile/nr2/compile.exp
+++ b/gcc/testsuite/rust/compile/nr2/compile.exp
@@ -47,18 +47,22 @@ namespace eval rust-nr2-ns {
set tests_expect_ok ""
set tests_expect_err ""
+ set compile_dir [list {*}[file split $srcdir] {*}[file split $subdir]]
+ set compile_dir [lreplace $compile_dir end end]
+
foreach test_dir $test_dirs {
- set directory [list {*}[file split $srcdir] {*}[file split $subdir]]
- set directory [lreplace $directory end end]
- set directory [list {*}$directory {*}$test_dir]
- foreach test [lsort [glob -nocomplain -tails -directory [file join {*}$directory] *.rs]] {
+ foreach test [lsort [glob -nocomplain -tails -directory [file join {*}$compile_dir {*}$test_dir] *.rs]] {
# use '/' as the path seperator for entries in the exclude file
set test_lbl [join [list {*}$test_dir $test] "/"]
set idx [lsearch -exact -sorted $exclude $test_lbl]
if {$idx == -1} {
- lappend tests_expect_ok [file join {*}$directory $test]
+ if {[runtest_file_p $runtests [file join {*}$compile_dir {*}$test_dir $test]]} {
+ lappend tests_expect_ok [list {*}$test_dir $test]
+ }
} else {
- lappend tests_expect_err [file join {*}$directory $test]
+ if {[runtest_file_p $runtests [file join {*}$compile_dir {*}$test_dir $test]]} {
+ lappend tests_expect_err [list {*}$test_dir $test]
+ }
set exclude [lreplace $exclude $idx $idx]
}
}
@@ -83,10 +87,10 @@ namespace eval rust-nr2-ns {
variable record_test_out
switch $type {
FAIL {
- lappend record_test_out "$type: $msg"
+ lappend record_test_out [list $type $msg]
}
XPASS {
- lappend record_test_out "$type: $msg"
+ lappend record_test_out [list $type $msg]
}
}
}
@@ -109,23 +113,23 @@ namespace eval rust-nr2-ns {
# check for unexpected failures
foreach test $tests_expect_ok {
- set fails [try_test $test]
+ set fails [try_test [file join {*}$compile_dir {*}$test]]
if {[llength $fails] != 0} {
foreach ent $fails {
- record_test FAIL "$test: nr2 failure: $ent"
+ record_test [lindex $ent 0] "on nr2: [lindex $ent 1]"
}
} else {
- record_test PASS "$test: nr2 success"
+ record_test PASS "[file join {*}$test] on nr2"
}
}
#check for unexpected successes
foreach test $tests_expect_err {
- set fails [try_test $test]
+ set fails [try_test [file join {*}$compile_dir {*}$test]]
if {[llength $fails] == 0} {
- record_test XPASS "$test: nr2 unexpectedly passed"
+ record_test XPASS "[file join {*}$test] on nr2"
} else {
- record_test XFAIL "$test: nr2 was rightfully excluded"
+ record_test XFAIL "[file join {*}$test] on nr2 was rightfully excluded"
}
}
}
diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude
index 19bf6f8..4772517 100644
--- a/gcc/testsuite/rust/compile/nr2/exclude
+++ b/gcc/testsuite/rust/compile/nr2/exclude
@@ -1,11 +1,8 @@
canonical_paths1.rs
cfg1.rs
generics9.rs
-issue-2043.rs
-issue-2812.rs
issue-3315-2.rs
lookup_err1.rs
-macros/mbe/macro6.rs
multiple_bindings1.rs
multiple_bindings2.rs
privacy5.rs
@@ -13,21 +10,16 @@ privacy8.rs
pub_restricted_1.rs
pub_restricted_2.rs
pub_restricted_3.rs
-undeclared_label.rs
use_1.rs
-while_break_expr.rs
issue-2905-2.rs
-issue-266.rs
derive_clone_enum3.rs
derive-debug1.rs
derive-default1.rs
-issue-3402-1.rs
-issue-3403.rs
derive-eq-invalid.rs
derive-hash1.rs
torture/alt_patterns1.rs
-torture/loop4.rs
-torture/loop8.rs
torture/name_resolve1.rs
issue-3568.rs
+issue-3663.rs
+issue-3671.rs
# please don't delete the trailing newline
diff --git a/gcc/testsuite/rust/compile/undeclared_label.rs b/gcc/testsuite/rust/compile/undeclared_label.rs
index 6efa2d9..9aa0553 100644
--- a/gcc/testsuite/rust/compile/undeclared_label.rs
+++ b/gcc/testsuite/rust/compile/undeclared_label.rs
@@ -2,12 +2,12 @@
#![allow(unused)]
fn resolve_label_continue() -> () {
loop {
- continue 'a; // { dg-error "use of undeclared label .a. in .continue." }
+ continue 'a; // { dg-error "use of undeclared label .'a." }
}
}
fn resolve_label_break() -> () {
loop {
- break 'crabby; // { dg-error "use of undeclared label .crabby. in .break." }
+ break 'crabby; // { dg-error "use of undeclared label .'crabby." }
}
}
fn main() {