diff options
Diffstat (limited to 'gcc/testsuite')
101 files changed, 2552 insertions, 20 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f895762eff7..e4ea2377fbe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,460 @@ +2018-01-14 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + Backport from trunk + PR libgfortran/83811 + * gfortran.dg/fmt_e.f90: New test. + +2018-01-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + Backport from mainline + 2018-01-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + PR target/83677 + * gcc.target/powerpc/pr83677.c: New file. + +2018-01-14 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2018-01-12 Uros Bizjak <ubizjak@gmail.com> + + PR target/83628 + * gcc.target/alpha/pr83628-3.c: New test. + +2018-01-13 Steven G. Kargl <kargl@gcc.gnu.org> + + Backport from mainline + PR fortran/78814 + * gfortran.dg/interface_40.f90: New testcase. + +2018-01-12 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.c-torture/execute/20180112-1.c: New test. + +2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> + + Backport from trunk + PR fortran/82367 + * gfortran.dg/deferred_character_18.f90: New test. + +2018-01-10 Steven G. Kargl <kargl@gcc.gnu.org> + + Backport from trunk + PR fortran/83093 + * gfortran.dg/allocate_with_typespec_7.f90: New test. + +2018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org> + + Backport r254555 from trunk + PR Fortran/82841 + * gfortran.dg/transfer_simplify_11.f90: New test. + +2018-01-09 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2018-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/83713 + * g++.dg/torture/pr83713.C: New testcase. + +2018-01-08 Jim Wilson <jimw@sifive.com> + + Backport from mainline + 2018-01-08 Chih-Mao Chen <pkmx.tw@gmail.com> + Monk Chiang <sh.chiang04@gmail.com> + + * gcc.target/riscv/save-restore-1.c: New. + + 2017-11-29 Jim Wilson <jimw@sifive.com> + + * gcc.target/riscv/riscv.exp: New. + +2018-01-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + Backport from mainline + 2017-12-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + PR target/82975 + * gcc.dg/pr82975.c: New test. + +2018-01-04 Uros Bizjak <ubizjak@gmail.com> + + PR target/83628 + * gcc.target/alpha/pr83628-1.c: New test. + * gcc.target/alpha/pr83628-2.c: Ditto. + +2018-01-02 Jakub Jelinek <jakub@redhat.com> + + PR c++/83556 + * g++.dg/cpp0x/pr83556.C: New test. + +2018-01-02 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/83650 + * gfortran.dg/simplify_cshift_1.f90: Correct condition. + +2018-01-01 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/83608 + * g++.dg/opt/pr83608.C: New test. + + PR middle-end/83609 + * gcc.dg/pr83609.c: New test. + * g++.dg/opt/pr83609.C: New test. + + PR middle-end/83623 + * gcc.dg/pr83623.c: New test. + +2017-12-28 Steven G. Kargl <kargl@gcc.gnu.org> + + PR Fortran/83548 + * gfortran.dg/array_constructor_type_22.f03: New test. + +2017-12-23 Jakub Jelinek <jakub@redhat.com> + + PR c++/83553 + * c-c++-common/torture/pr83553.c: New test. + +2017-12-22 Martin Jambor <mjambor@suse.cz> + + PR lto/82027 + * g++.dg/lto/pr82027_0.C: New test. + +2017-12-22 Jakub Jelinek <jakub@redhat.com> + + PR debug/83550 + * c-c++-common/dwarf2/pr83550.c: New test. + + Backported from mainline + 2017-12-21 Jakub Jelinek <jakub@redhat.com> + + PR c/83448 + * gcc.c-torture/compile/pr83448.c: New test. + * gcc.dg/tree-ssa/builtin-snprintf-warn-4.c: New test. + + PR rtl-optimization/80747 + PR rtl-optimization/83512 + * gcc.dg/pr80747.c: New test. + * gcc.dg/pr83512.c: New test. + + PR tree-optimization/83523 + * g++.dg/tree-ssa/pr83523.C: New test. + + PR tree-optimization/83521 + * gcc.dg/pr83521.c: New test. + + 2017-12-19 Jakub Jelinek <jakub@redhat.com> + + PR ipa/82801 + PR ipa/83346 + * g++.dg/ipa/pr82801.C: New test. + +2017-12-21 Uros Bizjak <ubizjak@gmail.com> + + PR target/83467 + * gcc.target/i386/pr83467-1.c: New test. + * gcc.target/i386/pr83467-2.c: Ditto. + +2017-12-21 Thomas Koenig <tkoenig@gcc.gnu.org> + + Backport from trunk + PR fortran/83436 + * gfortran.dg/internal_readwrite_4.f90: New test. + +2017-12-19 Bin Cheng <bin.cheng@arm.com> + + Backport from mainline + 2017-11-15 Bin Cheng <bin.cheng@arm.com> + + PR tree-optimization/82726 + * gcc.dg/tree-ssa/pr82726.c: New test. + +2017-12-19 H.J. Lu <hongjiu.lu@intel.com> + + Backported from mainline + 2017-12-19 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/83471 + * g++.dg/torture/pr83471.C: New test. + +2017-12-16 Jakub Jelinek <jakub@redhat.com> + + Backported from mainline + 2017-12-15 Jakub Jelinek <jakub@redhat.com> + + PR c++/83205 + * g++.dg/cpp1z/decomp3.C: Adjust for structured binding count + mismatch diagnostics split into error and warning with plural + forms. + * g++.dg/cpp1z/decomp10.C: Likewise. + * g++.dg/cpp1z/decomp32.C: New test. + + PR c++/81197 + * g++.dg/cpp1z/decomp34.C: New test. + +2017-12-15 Jakub Jelinek <jakub@redhat.com> + + PR c++/83217 + * g++.dg/cpp1z/decomp33.C: New test. + + PR tree-optimization/83269 + * gcc.c-torture/execute/pr83269.c: New test. + + PR tree-optimization/80631 + * gcc.target/i386/avx2-pr80631.c: New test. + + Backported from mainline + 2017-12-14 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/83198 + * gcc.dg/pr83198.c: New test. + * gcc.dg/tree-ssa/pr83198.c: New test. + + PR c++/79650 + * g++.dg/template/pr79650.C: New test. + + 2017-12-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/80631 + * gcc.dg/vect/pr80631-1.c: New test. + * gcc.dg/vect/pr80631-2.c: New test. + + 2017-12-08 Jakub Jelinek <jakub@redhat.com> + + PR target/81906 + * gcc.target/i386/pr81906.c: New test. + + 2017-12-06 Jakub Jelinek <jakub@redhat.com> + + PR c++/80259 + * g++.dg/cpp0x/pr80259.C: New test. + + 2017-12-02 Jakub Jelinek <jakub@redhat.com> + + PR c++/81212 + * g++.dg/ubsan/pr81212.C: New test. + + 2017-12-02 Jakub Jelinek <jakub@redhat.com> + + PR target/78643 + PR target/80583 + * gcc.target/i386/pr80583.c: New test. + + 2017-11-29 Jakub Jelinek <jakub@redhat.com> + + PR target/80819 + * gcc.target/i386/pr80819-1.c: New test. + * gcc.target/i386/pr80819-2.c: New test. + + 2017-11-27 Jakub Jelinek <jakub@redhat.com> + + PR c++/81888 + * g++.dg/cpp1z/decomp30.C: Add a test for structured binding with + = {} and = { a, a } initializers. + * g++.dg/cpp1z/decomp31.C: New test. + + PR c++/81675 + * g++.dg/warn/pr81675.C: New test. + + 2017-11-25 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/81553 + * gcc.c-torture/compile/pr81553.c: New test. + + 2017-11-24 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/83014 + * gcc.dg/ubsan/pr83014.c: New test. + + * gcc.dg/builtin-object-size-18.c: New test. + + 2017-11-23 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/82253 + * gfortran.dg/pr82253.f90: New test. + + 2017-11-22 Jakub Jelinek <jakub@redhat.com> + + PR debug/83084 + * g++.dg/opt/pr83084.C: New test. + + 2017-11-21 Jakub Jelinek <jakub@redhat.com> + + PR target/82880 + * gcc.dg/opts-8.c: New test. + + PR c++/83059 + * c-c++-common/pr83059.c: New test. + + 2017-11-20 Jakub Jelinek <jakub@redhat.com> + + PR c++/82781 + * g++.dg/ext/constexpr-pr82781.C: New test. + +2017-12-15 Richard Biener <rguenther@suse.de> + + Backport from mainline + PR tree-optimization/82060 + * g++.dg/torture/pr82060.C: New testcase. + +2017-12-15 Sudakshina Das <sudi.das@arm.com> + + * gcc.target/arm/armv8_2-fp16-move-2.c: Remove dg-add-options. + +2017-12-15 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2017-09-05 Richard Biener <rguenther@suse.de> + + PR tree-optimization/82102 + * gcc.dg/torture/pr82102.c: New testcase. + + 2017-09-13 Richard Biener <rguenther@suse.de> + + PR middle-end/82128 + * g++.dg/pr82128.C: New testcase. + +2017-12-15 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2017-11-24 Richard Biener <rguenther@suse.de> + + PR tree-optimization/82402 + * gcc.dg/torture/pr82402.c: New testcase. + + 2017-10-24 Richard Biener <rguenther@suse.de> + + PR tree-optimization/82697 + * gcc.dg/torture/pr82697.c: New testcase. + + 2017-11-02 Richard Biener <rguenther@suse.de> + + PR middle-end/82765 + * gcc.dg/pr82765.c: New testcase. + + 2017-11-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/82902 + * g++.dg/torture/pr82902.C: New testcase. + +2017-12-14 Peter Bergner <bergner@vnet.ibm.com> + + Backport from mainline + 2017-10-02 Peter Bergner <bergner@vnet.ibm.com> + + PR target/80210 + * gcc.target/powerpc/pr80210-2.c: New test. + +2017-12-14 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/alignment13.adb: New test. + +2017-12-13 Peter Bergner <bergner@vnet.ibm.com> + + Backport from mainline + 2017-12-13 Peter Bergner <bergner@vnet.ibm.com> + + * gcc.target/powerpc/cpu-builtin-1.c (htm-no-suspend): Add test. + +2017-12-11 Michael Meissner <meissner@linux.vnet.ibm.com> + + Back port from trunk + 2017-12-01 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/81959 + * gcc.target/powerpc/pr81959.c: New test. + +2017-12-11 Sudakshina Das <sudi.das@arm.com> + + Backported from trunk + 2017-12-01 Sudakshina Das <sudi.das@arm.com> + + * gcc.target/arm/armv8_2-fp16-move-2.c: New test. + +2017-12-07 Kelvin Nilsen <kelvin@gcc.gnu.org> + + Backport from trunk + 2017-05-08 Kelvin Nilsen <kelvin@gcc.gnu.org> + + PR target/80101 + * gcc.target/powerpc/pr80101-1.c: New test. + +2017-12-04 Sebastian Peryt <sebastian.peryt@intel.com> + H.J. Lu <hongjiu.lu@intel.com> + + Backported from trunk + PR target/82941 + PR target/82942 + PR target/82990 + * gcc.target/i386/pr82941-1.c: New test. + * gcc.target/i386/pr82941-2.c: Likewise. + * gcc.target/i386/pr82942-1.c: Likewise. + * gcc.target/i386/pr82942-2.c: Likewise. + * gcc.target/i386/pr82990-1.c: Likewise. + * gcc.target/i386/pr82990-2.c: Likewise. + * gcc.target/i386/pr82990-3.c: Likewise. + * gcc.target/i386/pr82990-4.c: Likewise. + * gcc.target/i386/pr82990-5.c: Likewise. + * gcc.target/i386/pr82990-6.c: Likewise. + * gcc.target/i386/pr82990-7.c: Likewise. + +2017-12-03 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + Backported from trunk + PR fortran/83191 + * gfortran.dg/namelist_95.f90: New test. + +2017-11-29 Martin Jambor <mjambor@suse.cz> + + PR ipa/82808 + * gcc.dg/ipa/pr82808.c: New test. + +2017-11-23 Paul Thomas <pault@gcc.gnu.org> + + Backported from trunk + PR fortran/79072 + * gfortran.dg/class_result_5.f90: New test. + * gfortran.dg/class_result_6.f90: New test. + +2017-11-21 Paul Thomas <pault@gcc.gnu.org> + + Backported from trunk fix for PR82586 + PR fortran/78686 + * gfortran.dg/pr78686.f90: New test. + +2017-11-21 Martin Liska <mliska@suse.cz> + + Backport from mainline + 2017-11-08 Martin Liska <mliska@suse.cz> + + PR sanitizer/82792 + * g++.dg/asan/pr82792.C: New test. + +2017-11-21 Martin Liska <mliska@suse.cz> + + Backport from mainline + 2017-10-18 Martin Liska <mliska@suse.cz> + + PR sanitizer/82545 + * gcc.dg/asan/pr82545.c: New test. + +2017-11-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + Backport from mainline + 2017-11-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * lib/target-supports.exp (check_effective_target_pie): Adapt + comment for Solaris 12 renaming. + + * gcc.dg/torture/pr60092.c: Remove *-*-solaris2.11* dg-xfail-run-if. + +2017-11-20 Segher Boessenkool <segher@kernel.crashing.org> + + Backport from mainline + 2017-09-20 Segher Boessenkool <segher@kernel.crashing.org> + + PR target/77687 + * gcc.target/powerpc/pr77687.c: New testcase. + 2017-11-15 Richard Biener <rguenther@suse.de> PR tree-optimization/82985 @@ -140,8 +597,8 @@ 2017-10-24 Qing Zhao <qing.zhao@oracle.com> Wilco Dijkstra <wilco.dijkstra@arm.com> - PR middle-end/80295 - * gcc.target/aarch64/pr80295.c: New test. + PR middle-end/80295 + * gcc.target/aarch64/pr80295.c: New test. 2017-10-21 Paul Thomas <pault@gcc.gnu.org> @@ -843,8 +1300,8 @@ 2017-06-21 Marc Glisse <marc.glisse@inria.fr> - * gcc.dg/tree-ssa/addadd.c: Un-XFAIL. - * gcc.dg/tree-ssa/addadd-2.c: New file. + * gcc.dg/tree-ssa/addadd.c: Un-XFAIL. + * gcc.dg/tree-ssa/addadd-2.c: New file. 2016-07-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com> diff --git a/gcc/testsuite/c-c++-common/dwarf2/pr83550.c b/gcc/testsuite/c-c++-common/dwarf2/pr83550.c new file mode 100644 index 00000000000..1d77e9530cd --- /dev/null +++ b/gcc/testsuite/c-c++-common/dwarf2/pr83550.c @@ -0,0 +1,10 @@ +/* PR debug/83550 */ +/* { dg-do compile } */ +/* { dg-options "-gdwarf -dA -fno-merge-debug-strings" } */ + +struct my_struct; +extern struct my_struct s; +struct my_struct { int a, b; }; +struct my_struct q; + +/* { dg-final { scan-assembler "DW_TAG_structure_type\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"my_struct\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?7\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */ diff --git a/gcc/testsuite/c-c++-common/pr83059.c b/gcc/testsuite/c-c++-common/pr83059.c new file mode 100644 index 00000000000..9a6ff5e0db2 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr83059.c @@ -0,0 +1,10 @@ +/* PR c++/83059 */ +/* { dg-do compile } */ + +void +foo (int *p, int *q, int *r) +{ + __atomic_compare_exchange (p, q, r, 0, 0, -1); /* { dg-warning "invalid memory model argument 6" } */ + /* { dg-warning "\[uU]nknown architecture specifi" "" { target *-*-* } .-1 } */ + /* { dg-warning "failure memory model cannot be stronger than success memory model" "" { target *-*-* } .-2 } */ +} diff --git a/gcc/testsuite/c-c++-common/torture/pr83553.c b/gcc/testsuite/c-c++-common/torture/pr83553.c new file mode 100644 index 00000000000..c12b79b9e77 --- /dev/null +++ b/gcc/testsuite/c-c++-common/torture/pr83553.c @@ -0,0 +1,29 @@ +/* PR c++/83553 */ +/* { dg-do run } */ + +int a[3]; + +int +foo (int n) +{ + switch (n) + { + case 0: + for (n = 7, a[0]++; 0; a[2] = a[1] + 1) + { + case 2: + a[1] = a[0] + 1; + } + } + return n; +} + +int +main () +{ + if (foo (0) != 7 || a[0] != 1 || a[1] || a[2]) + __builtin_abort (); + if (foo (2) != 2 || a[0] != 1 || a[1] != 2 || a[2] != 3) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/asan/pr82792.C b/gcc/testsuite/g++.dg/asan/pr82792.C new file mode 100644 index 00000000000..99f1c35328c --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr82792.C @@ -0,0 +1,32 @@ +/* PR sanitizer/82792 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=address" } */ + +extern int +test (int i, int j) +{ + long c; + (c) = 1; + switch (i) + { + case 1: + if (j) + { + c = 1; + } + goto default_case; + case 2: + { + if (j) + { + c = 0; + } + } + __attribute ((fallthrough)); + default_case: + default: + c = 0; + break; + } + return 0; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/pr80259.C b/gcc/testsuite/g++.dg/cpp0x/pr80259.C new file mode 100644 index 00000000000..9d2a109bcf3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr80259.C @@ -0,0 +1,13 @@ +// PR c++/80259 +// { dg-do compile { target c++11 } } + +void foo () {} // { dg-message "previously defined here" } +void bar (); + +struct A +{ + friend void foo () = delete; // { dg-error "redefinition of" } + friend void bar () = delete; // { dg-message "previously defined here" } +}; + +void bar () {} // { dg-error "redefinition of" } diff --git a/gcc/testsuite/g++.dg/cpp0x/pr83556.C b/gcc/testsuite/g++.dg/cpp0x/pr83556.C new file mode 100644 index 00000000000..bab06a5b943 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr83556.C @@ -0,0 +1,28 @@ +// PR c++/83556 +// { dg-do run { target c++11 } } + +int +foo () +{ + return 1; +} + +struct A +{ + int a = foo (); + int b = 1; + int c = a ? 1 * b : 2 * b; +}; + +struct B +{ + A d {}; +}; + +int +main () +{ + B e {}; + if (e.d.c != 1) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-83116.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-83116.C new file mode 100644 index 00000000000..18d79e2e1cc --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-83116.C @@ -0,0 +1,18 @@ +// PR c++/83116 +// { dg-do run { target c++14 } } +// { dg-options "-O2" } + +struct S { + constexpr S () : s(0) { foo (); } + constexpr int foo () { return s; } + int s; +}; + +int +main () +{ + static S var; + var.s = 5; + if (var.s != 5 || var.foo () != 5) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp10.C b/gcc/testsuite/g++.dg/cpp1z/decomp10.C index c2bcb93c1d7..f27cbfbc0d9 100644 --- a/gcc/testsuite/g++.dg/cpp1z/decomp10.C +++ b/gcc/testsuite/g++.dg/cpp1z/decomp10.C @@ -11,7 +11,8 @@ void f1() { auto [ x ] = a1; } // { dg-error "is not an integral constant expres struct A2 { int i,j; } a2; template<> struct std::tuple_size<A2> { enum { value = 5 }; }; -void f2() { auto [ x ] = a2; } // { dg-error "decomposes into 5" } +void f2() { auto [ x ] = a2; } // { dg-error "only 1 name provided" } + // { dg-message "decomposes into 5" "" { target *-*-* } .-1 } struct A3 { int i,j; } a3; template<> struct std::tuple_size<A3> { enum { value = 1 }; }; diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp3.C b/gcc/testsuite/g++.dg/cpp1z/decomp3.C index a739d3ace37..416a22b79f0 100644 --- a/gcc/testsuite/g++.dg/cpp1z/decomp3.C +++ b/gcc/testsuite/g++.dg/cpp1z/decomp3.C @@ -51,16 +51,21 @@ int arr[4]; void test3 (A &b, B c) { - auto [ d, e, f ] = arr; // { dg-error "only 3 names provided while 'int .4.' decomposes into 4 elements" } - // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 } - auto & [ g, h, i, j, k ] = arr; // { dg-error "5 names provided while 'int .4.' decomposes into 4 elements" } - // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 } - auto [ l, m ] = b; // { dg-error "only 2 names provided while 'A' decomposes into 3 elements" } - // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 } - auto & [ n, o, p, q ] = b; // { dg-error "4 names provided while 'A' decomposes into 3 elements" } - // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 } + auto [ d, e, f ] = arr; // { dg-error "only 3 names provided" } + // { dg-message "while 'int .4.' decomposes into 4 elements" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-2 } + auto & [ g, h, i, j, k ] = arr; // { dg-error "5 names provided" } + // { dg-message "while 'int .4.' decomposes into 4 elements" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-2 } + auto [ l, m ] = b; // { dg-error "only 2 names provided" } + // { dg-message "while 'A' decomposes into 3 elements" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-2 } + auto & [ n, o, p, q ] = b; // { dg-error "4 names provided" } + // { dg-message "while 'A' decomposes into 3 elements" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-2 } auto [] { c }; // { dg-error "empty decomposition declaration" } // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 } - auto [ r, s ] = c; // { dg-error "2 names provided while 'B' decomposes into 1 elements" } - // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-1 } + auto [ r, s ] = c; // { dg-error "2 names provided" } + // { dg-message "while 'B' decomposes into 1 element" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with -std=c..1z or -std=gnu..1z" "" { target c++14_down } .-2 } } diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp30.C b/gcc/testsuite/g++.dg/cpp1z/decomp30.C index 23115ad1082..cca15ed126b 100644 --- a/gcc/testsuite/g++.dg/cpp1z/decomp30.C +++ b/gcc/testsuite/g++.dg/cpp1z/decomp30.C @@ -10,3 +10,5 @@ auto [j, k] { a, a }; // { dg-error "invalid initializer for structured binding auto [l, m] = { a }; // { dg-error "deducing from brace-enclosed initializer list requires" } auto [n, o] {}; // { dg-error "invalid initializer for structured binding declaration" } auto [p, q] (); // { dg-error "invalid initializer for structured binding declaration" } +auto [r, s] = {}; // { dg-error "deducing from brace-enclosed initializer list requires" } +auto [t, u] = { a, a }; // { dg-error "deducing from brace-enclosed initializer list requires" } diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp31.C b/gcc/testsuite/g++.dg/cpp1z/decomp31.C new file mode 100644 index 00000000000..04b2516dada --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/decomp31.C @@ -0,0 +1,18 @@ +// PR c++/81888 +// { dg-do compile { target c++1z } } + +struct S { + bool s = true; +}; + +auto [a] = S{}; + +template <class T> +bool +foo () noexcept +{ + auto [c] = T{}; + return c; +} + +const bool b = foo<S> (); diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp32.C b/gcc/testsuite/g++.dg/cpp1z/decomp32.C new file mode 100644 index 00000000000..c4ea130d551 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/decomp32.C @@ -0,0 +1,32 @@ +// PR c++/83205 +// { dg-do compile { target c++11 } } +// { dg-options "" } + +struct A { int i; }; +struct B { int i; }; +namespace std { + template <typename T> struct tuple_size; + template <> struct tuple_size<A> { + static constexpr int value = -1; + }; +#ifdef __SIZEOF_INT128__ + template <> struct tuple_size<B> { + static constexpr unsigned __int128 value = -1; + }; +#endif +} + +auto [a] = A{}; // { dg-error "1 name provided" } + // { dg-message "while 'A' decomposes into -1 elements" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-2 } +#ifdef __SIZEOF_INT128__ +auto [b] = B{}; // { dg-error "1 name provided" "" { target int128 } } + // { dg-message "while 'B' decomposes into \[0-9xa-fXA-F]* elements" "" { target int128 } .-1 } + // { dg-warning "decomposition declaration only available with" "" { target { c++14_down && int128 } } .-2 } +auto [c, d] = B{}; // { dg-error "2 names provided" "" { target int128 } } + // { dg-message "while 'B' decomposes into \[0-9xa-fXA-F]* elements" "" { target int128 } .-1 } + // { dg-warning "decomposition declaration only available with" "" { target { c++14_down && int128 } } .-2 } +#endif +auto [e, f, g] = A{}; // { dg-error "3 names provided" } + // { dg-message "while 'A' decomposes into -1 elements" "" { target *-*-* } .-1 } + // { dg-warning "decomposition declaration only available with" "" { target c++14_down } .-2 } diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp33.C b/gcc/testsuite/g++.dg/cpp1z/decomp33.C new file mode 100644 index 00000000000..9c5914a1d13 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/decomp33.C @@ -0,0 +1,21 @@ +// PR c++/83217 +// { dg-do compile { target c++11 } } +// { dg-options "" } + +template <typename T> +struct S +{ + T a; +}; + +void +foo (S<int> *b) +{ + auto & [c] = *b; // { dg-warning "decomposition declaration only available with" "" { target c++14_down } } +} + +void +bar (S<char> *d) +{ + auto [e] = *d; // { dg-warning "decomposition declaration only available with" "" { target c++14_down } } +} diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp34.C b/gcc/testsuite/g++.dg/cpp1z/decomp34.C new file mode 100644 index 00000000000..e8cda7954b7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/decomp34.C @@ -0,0 +1,11 @@ +// PR c++/81197 +// { dg-do compile { target c++11 } } +// { dg-options "" } + +struct X { int a; }; +struct Y { int b, c, d; }; +auto&& [t] = X{}; // { dg-warning "decomposition declaration only available with" "" { target c++14_down } } +namespace A { namespace B { auto&& [u, v, ww] = Y{}; } } // { dg-warning "decomposition declaration only available with" "" { target c++14_down } } + +// { dg-final { scan-assembler "_ZGRDC1tE0" } } +// { dg-final { scan-assembler "_ZGRN1A1BDC1u1v2wwEE1" } } diff --git a/gcc/testsuite/g++.dg/ext/constexpr-pr82781.C b/gcc/testsuite/g++.dg/ext/constexpr-pr82781.C new file mode 100644 index 00000000000..eee0159351c --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/constexpr-pr82781.C @@ -0,0 +1,12 @@ +// PR c++/82781 +// { dg-do compile { target c++11 } } + +typedef int V __attribute__ ((vector_size (16))); +constexpr V b1 = { 0, 1, 10, 20 }; +constexpr V b2 = { 0, 2, 10, 0 }; +constexpr V b3 = b1 == b2; + +static_assert (b3[0] == -1, ""); +static_assert (b3[1] == 0, ""); +static_assert (b3[2] == -1, ""); +static_assert (b3[3] == 0, ""); diff --git a/gcc/testsuite/g++.dg/ipa/pr82801.C b/gcc/testsuite/g++.dg/ipa/pr82801.C new file mode 100644 index 00000000000..d0c2756e47a --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr82801.C @@ -0,0 +1,20 @@ +// PR ipa/82801 +// { dg-do compile } +// { dg-options "-O2 -Wno-attributes" } + +template<int> +struct A { A () {} }; +struct B { double foo () const; }; + +__attribute__((always_inline, flatten)) +double B::foo () const +{ + A<1> v; + return 0.0; +} + +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/g++.dg/lto/pr82027_0.C b/gcc/testsuite/g++.dg/lto/pr82027_0.C new file mode 100644 index 00000000000..70cc776b2db --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr82027_0.C @@ -0,0 +1,73 @@ +// { dg-lto-do run } +// { dg-lto-options { { -O3 -flto } } } + +class Position +{ + public: + Position( void ) {} + virtual ~Position() {} + + virtual void calcPercent( const char *name,int pos,int size ) {} +}; + + +class Looper +{ + public: + Looper( Position *cc,int size ) + : m_cc(cc), m_size(size) {} + virtual ~Looper() {} + + void loop( void ) + { + for( int pos=0; pos<m_size; pos++ ) + { + m_cc->calcPercent( "",pos,m_size ); + } + } + + private: + Position *m_cc; + int m_size; +}; + + +class EmptyClass +{ + public: + EmptyClass( void ) {} + virtual ~EmptyClass() {} +}; + + +class Combined : public EmptyClass, public Position +{ + public: + Combined( void ) : m_percent(0) {} + ~Combined() {} + + void calcPercent( const char *name,int pos,int size ) + { + int percent = 100*pos/size; + if( percent!=m_percent ) + m_percent = percent; + } + + private: + int m_percent; +}; + + + +int main( int argc,char **argv ) +{ + Combined *comb = new Combined(); + Looper *looper = new Looper( comb,argc ); + + looper->loop(); + + delete comb; + delete looper; + + return( 0 ); +} diff --git a/gcc/testsuite/g++.dg/opt/pr83084.C b/gcc/testsuite/g++.dg/opt/pr83084.C new file mode 100644 index 00000000000..d21e30878ec --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr83084.C @@ -0,0 +1,16 @@ +// PR debug/83084 +// { dg-do compile } +// { dg-options "-O2 -fcompare-debug -Wno-return-type" } + +enum E { F }; +template <E = F> struct A { + bool foo (); + int b; +}; +template <> bool A<>::foo () { + int a; + do + if (a) + return false; + while (__atomic_compare_exchange_n (&b, &a, 0, 1, 4, 0)); +} diff --git a/gcc/testsuite/g++.dg/opt/pr83608.C b/gcc/testsuite/g++.dg/opt/pr83608.C new file mode 100644 index 00000000000..555e5877e75 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr83608.C @@ -0,0 +1,28 @@ +// PR middle-end/83608 +// { dg-do compile } +// { dg-options "-O2" } + +template <typename> class B; +template <> struct B<float> +{ + float foo () { return __real__ b; } + _Complex double b; +}; + +void bar (int); + +template <class T> +void +baz () +{ + B<T> h; + T *a = (T *) &h; + a[0] = a[1] = 6; + h.foo () ? void () : bar (7); +} + +int +main () +{ + baz<float> (); +} diff --git a/gcc/testsuite/g++.dg/opt/pr83609.C b/gcc/testsuite/g++.dg/opt/pr83609.C new file mode 100644 index 00000000000..a43d2916d9d --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr83609.C @@ -0,0 +1,28 @@ +// PR middle-end/83609 +// { dg-do compile } +// { dg-options "-O2 -fno-tree-forwprop" } + +template <typename> class B; +template <> struct B<float> +{ + float foo () { return __real__ b; } + _Complex float b; +}; + +void bar (int); + +template <class T> +void +baz () +{ + B<T> h; + T *a = (T *) &h; + a[0] = a[1] = 6; + h.foo () ? void () : bar (7); +} + +int +main () +{ + baz<float> (); +} diff --git a/gcc/testsuite/g++.dg/pr82128.C b/gcc/testsuite/g++.dg/pr82128.C new file mode 100644 index 00000000000..98bb27adf9d --- /dev/null +++ b/gcc/testsuite/g++.dg/pr82128.C @@ -0,0 +1,20 @@ +// { dg-do compile } +// { dg-options "-O3 -fno-tree-forwprop" } + +class A { + virtual unsigned long m_fn1() const; + virtual int &m_fn2(unsigned long) const; +}; +class C : A { +public: + int &m_fn2(unsigned long) const; + unsigned long m_fn1() const; +}; +class B { + void m_fn3(const A &, const int &, const C &, int &) const; +}; +void B::m_fn3(const A &, const int &, const C &, int &) const { + C &a(a); + for (long b = 0; a.m_fn1(); b++) + a.m_fn2(0); +} diff --git a/gcc/testsuite/g++.dg/template/pr79650.C b/gcc/testsuite/g++.dg/template/pr79650.C new file mode 100644 index 00000000000..72c78140942 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr79650.C @@ -0,0 +1,20 @@ +// PR c++/79650 +// { dg-do compile { target c++11 } } +// { dg-options "" } + +typedef __INTPTR_TYPE__ intptr_t; +template<intptr_t> struct A {}; + +void +foo () +{ + static int a, b; +lab1: +lab2: + A<(intptr_t)&&lab1 - (__INTPTR_TYPE__)&&lab2> c; // { dg-error "not a constant integer" } + A<(intptr_t)&&lab1 - (__INTPTR_TYPE__)&&lab1> d; + A<(intptr_t)&a - (intptr_t)&b> e; // { dg-error "is not a constant expression" } + A<(intptr_t)&a - (intptr_t)&a> f; + A<(intptr_t)sizeof(a) + (intptr_t)&a> g; // { dg-error "not a constant integer" } + A<(intptr_t)&a> h; // { dg-error "conversion from pointer type" } +} diff --git a/gcc/testsuite/g++.dg/torture/pr82060.C b/gcc/testsuite/g++.dg/torture/pr82060.C new file mode 100644 index 00000000000..3cea930ae05 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr82060.C @@ -0,0 +1,32 @@ +// { dg-do compile } + +struct A +{ + char a[1]; // must be char array +}; + +struct B +{ + A& a() { return ma; } // must be accessed through a getter + A ma; +}; + +struct C +{ + B& b() { return mb; } // must be accessed through a getter + B mb; +}; + +struct D +{ + virtual A getA() = 0; // must be virtual +}; + +void +foo(D& d) // The D object must not be created locally + // (so that getA implementation is not known at compile time?) +{ + C c; + for (;;) // must be in a loop + c.b().a() = d.getA(); +} diff --git a/gcc/testsuite/g++.dg/torture/pr82902.C b/gcc/testsuite/g++.dg/torture/pr82902.C new file mode 100644 index 00000000000..cc2ce271d4c --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr82902.C @@ -0,0 +1,21 @@ +// { dg-do compile } + +typedef struct el_t { + el_t *next; + int elem[]; +} EL; +el_t a, c; +void *b; +void *fn1() { + if (b) + return a.elem; + return c.elem; +} +typedef struct { + int x; +} EV_T; +EV_T *d; +void fn2() { + EV_T *e = (EV_T *)fn1(); + d[0] = *e; +} diff --git a/gcc/testsuite/g++.dg/torture/pr83471.C b/gcc/testsuite/g++.dg/torture/pr83471.C new file mode 100644 index 00000000000..b9687265d77 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr83471.C @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +class a { +public: + void *operator new(__SIZE_TYPE__, int); +}; +class b : public a { +public: + b(); + virtual void c() {} + void m_fn2(); +}; +int d; +void e() { + long f; + b *g; + (f); + g = new (d) b; + g->c(); + g->m_fn2(); +} diff --git a/gcc/testsuite/g++.dg/torture/pr83713.C b/gcc/testsuite/g++.dg/torture/pr83713.C new file mode 100644 index 00000000000..ca6af04406d --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr83713.C @@ -0,0 +1,12 @@ +// { dg-do compile } + +class a +{ + char b; + void c (); +}; +void +a::c () +{ + &b + ((long long) &b & 0); +} diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr83523.C b/gcc/testsuite/g++.dg/tree-ssa/pr83523.C new file mode 100644 index 00000000000..d9adf90f0b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr83523.C @@ -0,0 +1,25 @@ +// PR tree-optimization/83523 +// { dg-do compile } +// { dg-options "-O2 -fexceptions -fnon-call-exceptions -ftrapv" } + +#ifdef __SIZEOF_INT128__ +typedef __int128 T; +typedef long long int U; +#else +typedef long long int T; +typedef int U; +#endif + +struct S { S (); ~S (); }; +void bar (); + +T +foo (U x, U y) +{ + T z = x; + S s; + bar (); + z *= y; + bar (); + return z; +} diff --git a/gcc/testsuite/g++.dg/ubsan/pr81212.C b/gcc/testsuite/g++.dg/ubsan/pr81212.C new file mode 100644 index 00000000000..ce92a07dceb --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/pr81212.C @@ -0,0 +1,16 @@ +// PR c++/81212 +// { dg-do compile } +// { dg-options "-Wreturn-type -fsanitize=return" } + +struct S +{ + S (void *); + void *s; +}; + +S +foo (bool x, void *y) +{ + if (x) + return S (y); +} // { dg-warning "control reaches end of non-void function" } diff --git a/gcc/testsuite/g++.dg/warn/pr81675.C b/gcc/testsuite/g++.dg/warn/pr81675.C new file mode 100644 index 00000000000..24a7a3b0677 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/pr81675.C @@ -0,0 +1,15 @@ +// PR c++/81675 +// { dg-do compile } +// { dg-options "-Wall" } + +struct S +{ + ~S () __attribute__((noreturn)); + int a; +}; + +int +foo () +{ + false ? 5 : S ().a; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr81553.c b/gcc/testsuite/gcc.c-torture/compile/pr81553.c new file mode 100644 index 00000000000..ae33b169824 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr81553.c @@ -0,0 +1,10 @@ +/* PR rtl-optimization/81553 */ + +int a, b, c, d; + +void +foo (void) +{ + d = 1 >> c >> 1; + b = ~(209883449764912897ULL & d) << (0 >= a) | ~d; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr83448.c b/gcc/testsuite/gcc.c-torture/compile/pr83448.c new file mode 100644 index 00000000000..9f0d9aca4eb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr83448.c @@ -0,0 +1,15 @@ +/* PR c/83448 */ + +char *a; +int b; + +void +foo (void) +{ + for (;;) + { + if (b < 0) + foo (); + __builtin_snprintf (a, b, "%*s", b, ""); + } +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20180112-1.c b/gcc/testsuite/gcc.c-torture/execute/20180112-1.c new file mode 100644 index 00000000000..6752661ecb6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20180112-1.c @@ -0,0 +1,32 @@ +/* PR rtl-optimization/83565 */ +/* Testcase by Sergei Trofimovich <slyfox@inbox.ru> */ + +extern void abort (void); + +typedef unsigned int u32; + +u32 bug (u32 * result) __attribute__((noinline)); +u32 bug (u32 * result) +{ + volatile u32 ss = 0xFFFFffff; + volatile u32 d = 0xEEEEeeee; + u32 tt = d & 0x00800000; + u32 r = tt << 8; + + r = (r >> 31) | (r << 1); + + u32 u = r^ss; + u32 off = u >> 1; + + *result = tt; + return off; +} + +int main(void) +{ + u32 l; + u32 off = bug(&l); + if (off != 0x7fffffff) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr83269.c b/gcc/testsuite/gcc.c-torture/execute/pr83269.c new file mode 100644 index 00000000000..37fc5d14db7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr83269.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/83269 */ + +int +main () +{ +#if __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ > 4 && __CHAR_BIT__ == 8 + volatile unsigned char a = 1; + long long b = 0x80000000L; + int c = -((int)(-b) - (-0x7fffffff * a)); + if (c != 1) + __builtin_abort (); +#endif + return 0; +} diff --git a/gcc/testsuite/gcc.dg/asan/pr82545.c b/gcc/testsuite/gcc.dg/asan/pr82545.c new file mode 100644 index 00000000000..8870db3653f --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr82545.c @@ -0,0 +1,17 @@ +/* PR sanitizer/82545. */ +/* { dg-do compile } */ + +extern void c(int); +extern void d(void); + +void *buf[5]; + +void a(void) { + { + int b; + &b; + __builtin_setjmp(buf); + c(b); + } + d(); +} diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-18.c b/gcc/testsuite/gcc.dg/builtin-object-size-18.c new file mode 100644 index 00000000000..e065393282a --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-object-size-18.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ +/* __stpncpy_chk could return buf up to buf + 64, so + the minimum object size might be far smaller than 64. */ +/* { dg-final { scan-tree-dump-not "return 64;" "optimized" } } */ + +typedef __SIZE_TYPE__ size_t; + +size_t +foo (const char *p, size_t s, size_t t) +{ + char buf[64]; + char *q = __builtin___stpncpy_chk (buf, p, s, t); + return __builtin_object_size (q, 2); +} diff --git a/gcc/testsuite/gcc.dg/ipa/pr82808.c b/gcc/testsuite/gcc.dg/ipa/pr82808.c new file mode 100644 index 00000000000..9c95d0b6ed7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr82808.c @@ -0,0 +1,27 @@ +/* { dg-options "-O2" } */ +/* { dg-do run } */ + +static void __attribute__((noinline)) +foo (double *a, double x) +{ + *a = x; +} + +static double __attribute__((noinline)) +f_c1 (int m, double *a) +{ + foo (a, m); + return *a; +} + +int +main (){ + double data; + double ret = 0 ; + + if ((ret = f_c1 (2, &data)) != 2) + { + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/opts-8.c b/gcc/testsuite/gcc.dg/opts-8.c new file mode 100644 index 00000000000..7837197ed43 --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-8.c @@ -0,0 +1,6 @@ +/* PR target/82880 */ +/* Test we don't ICE or hang. */ +/* { dg-do compile } */ +/* { dg-options "--help=target --help=optimizers" } */ +/* { dg-allow-blank-lines-in-output 1 } */ +/* { dg-prune-output ".*" } */ diff --git a/gcc/testsuite/gcc.dg/pr80747.c b/gcc/testsuite/gcc.dg/pr80747.c new file mode 100644 index 00000000000..ea9dd3c3033 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr80747.c @@ -0,0 +1,18 @@ +/* PR rtl-optimization/80747 */ +/* { dg-do compile } */ +/* { dg-options "-fprofile-use -freorder-blocks-and-partition -O1 -foptimize-sibling-calls" } */ + +int +foo (int a) +{ + int r; + if (a & 1) + r = foo (a - 1); + else if (a) + r = foo (a - 2); + else + return 0; + if (r) + r = r; + return r; +} diff --git a/gcc/testsuite/gcc.dg/pr82765.c b/gcc/testsuite/gcc.dg/pr82765.c new file mode 100644 index 00000000000..dde0aeba7ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr82765.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -w" } */ + +int a[1][1]; +int main() { int *b[] = {a, a[1820408606019012862278468], a, a, a}; } diff --git a/gcc/testsuite/gcc.dg/pr82975.c b/gcc/testsuite/gcc.dg/pr82975.c new file mode 100644 index 00000000000..422ba6c6855 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr82975.c @@ -0,0 +1,20 @@ +/* PR target/82975. */ +/* { dg-do compile } */ +/* { dg-options "-fno-sched-pressure -O2" } */ +/* { dg-additional-options "-mtune=cortex-a57" { target arm*-*-* aarch64*-*-* } } */ + +typedef __SIZE_TYPE__ size_t; + +struct S1 +{ + char pad1; + char val; + short pad2; +}; + +extern char t[256]; + +void foo (struct S1 a, size_t i) +{ + t[i] = a.val; +} diff --git a/gcc/testsuite/gcc.dg/pr83198.c b/gcc/testsuite/gcc.dg/pr83198.c new file mode 100644 index 00000000000..856f2be07d5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83198.c @@ -0,0 +1,18 @@ +/* PR tree-optimization/83198 */ +/* { dg-do compile } */ +/* { dg-options "-Wall -Wno-format" } */ + +int +foo (char *d[6], int x) +{ + int r = 0; + r += __builtin_sprintf (d[0], "%f", x); + r += __builtin_sprintf (d[1], "%a", x); + r += __builtin_sprintf (d[2], "%f", "foo"); + r += __builtin_sprintf (d[3], "%a", "bar"); +#ifdef __SIZEOF_FLOAT128__ + r += __builtin_sprintf (d[4], "%a", 1.0Q); + r += __builtin_sprintf (d[5], "%Lf", 1.0Q); +#endif + return r; +} diff --git a/gcc/testsuite/gcc.dg/pr83512.c b/gcc/testsuite/gcc.dg/pr83512.c new file mode 100644 index 00000000000..d86e57befc7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83512.c @@ -0,0 +1,16 @@ +/* PR rtl-optimization/83512 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -freorder-blocks-algorithm=simple" } */ + +int a; + +void +foo (int *x) +{ + for (;;) + { + for (*x = 0; *x < 1; *x++) + ; + ++a; + } +} diff --git a/gcc/testsuite/gcc.dg/pr83521.c b/gcc/testsuite/gcc.dg/pr83521.c new file mode 100644 index 00000000000..fc7ca04d1b4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83521.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/83521 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fno-tree-forwprop" } */ + +int +foo (unsigned int x, int y) +{ + int *z = (int *)&x; + return (y == 0) ? y : *z; +} diff --git a/gcc/testsuite/gcc.dg/pr83609.c b/gcc/testsuite/gcc.dg/pr83609.c new file mode 100644 index 00000000000..eac11fca936 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83609.c @@ -0,0 +1,29 @@ +/* PR middle-end/83609 */ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-tree-forwprop -fno-tree-ccp -fno-tree-fre -fno-tree-pre -fno-code-hoisting" } */ + +#if __SIZEOF_LONG_LONG__ == 2 * __SIZEOF_FLOAT__ +_Complex float +foo (void) +{ + _Complex float c; + *((unsigned long long *)&c) = 0x123456789abcdef0ULL; + return c; +} + +int +main () +{ + union { _Complex float c; unsigned long long l; } u; + u.c = foo (); + if (u.l != 0x123456789abcdef0ULL) + __builtin_abort (); + return 0; +} +#else +int +main () +{ + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.dg/pr83623.c b/gcc/testsuite/gcc.dg/pr83623.c new file mode 100644 index 00000000000..5d62c04f542 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83623.c @@ -0,0 +1,12 @@ +/* PR middle-end/83623 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-additional-options "-mmovbe" { target i?86-*-* x86_64-*-* } } */ + +unsigned short __attribute__ ((__vector_size__ (16))) x; + +void +foo (void) +{ + x = x << 8 | x >> 8; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr60092.c b/gcc/testsuite/gcc.dg/torture/pr60092.c index d66e3f2444e..7c6cabb509a 100644 --- a/gcc/testsuite/gcc.dg/torture/pr60092.c +++ b/gcc/testsuite/gcc.dg/torture/pr60092.c @@ -4,7 +4,6 @@ /* { dg-skip-if "No undefined weak" { nvptx-*-* } { "*" } { "" } } */ /* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ /* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ -/* { dg-xfail-run-if "posix_memalign modifies first arg on error" { *-*-solaris2.11* } { "-O0" } } */ typedef __SIZE_TYPE__ size_t; extern int posix_memalign(void **memptr, size_t alignment, size_t size) __attribute__((weak)); diff --git a/gcc/testsuite/gcc.dg/torture/pr82102.c b/gcc/testsuite/gcc.dg/torture/pr82102.c new file mode 100644 index 00000000000..393f8bf9590 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr82102.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +void *a, *b; +struct pt3_i2cbuf { + int num_cmds; +} c; +void *memcpy(void *, void *, __SIZE_TYPE__); +void put_stop(); +void translate(struct pt3_i2cbuf *p1, int p2) +{ + p1->num_cmds = 0; + if (p2) + put_stop(); +} +void pt3_i2c_master_xfer(int p1) +{ + translate(&c, p1); + memcpy(a, b, c.num_cmds); + for (; p1;) + ; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr82402.c b/gcc/testsuite/gcc.dg/torture/pr82402.c new file mode 100644 index 00000000000..cf90d5c6faf --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr82402.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +typedef int jmp_buf[1]; + +extern void exit(int) __attribute__((__noreturn__)); +extern int setjmpx(jmp_buf) __attribute__((__returns_twice__)); + +jmp_buf jbAnagram; +int a[6]; +int d; +int b () { exit (1); } +int c () { b (); } +int e () +{ + int f = 0; + for (; f < 6; f++) + a[f] = d; + c (); + setjmpx (jbAnagram); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr82697.c b/gcc/testsuite/gcc.dg/torture/pr82697.c new file mode 100644 index 00000000000..57da8a264b9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr82697.c @@ -0,0 +1,23 @@ +/* { dg-do run } */ + +__attribute__((noinline,noclone)) +void test(int *pi, long *pl, int f) +{ + *pl = 0; + + *pi = 1; + + if (f) + *pl = 2; +} + +int main() +{ + void *p = __builtin_malloc(sizeof (long)); + + test(p, p, 0); + + if (*(int *)p != 1) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-4.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-4.c new file mode 100644 index 00000000000..e6abf24c672 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-4.c @@ -0,0 +1,46 @@ +/* PR c/83448 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wformat-truncation -fdiagnostics-show-caret" } */ + +extern int snprintf (char *, __SIZE_TYPE__, const char *, ...); + +void +foo (char *a, char *b, char *c, int d, int e) +{ + snprintf (a, 7, "abc\\\123 efg"); + /* { dg-warning "directive output truncated writing 9 bytes into a region of size 7" "" { target *-*-* } .-1 } + { dg-message ".snprintf. output 10 bytes into a destination of size 7" "note" { target *-*-* } .-2 } + { dg-begin-multiline-output "" } + snprintf (a, 7, "abc\\\123 efg"); + ~~~~~~~~~~~^~ + { dg-end-multiline-output "" } + { dg-begin-multiline-output "note" } + snprintf (a, 7, "abc\\\123 efg"); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ + d &= 63; + d += 10; + snprintf (b, 7, "a%dbcdefg", d); + /* { dg-warning "'bcdefg' directive output truncated writing 6 bytes into a region of size 4" "" { target *-*-* } .-1 } + { dg-message ".snprintf. output 10 bytes into a destination of size 7" "note" { target *-*-* } .-2 } + { dg-begin-multiline-output "" } + snprintf (b, 7, "a%dbcdefg", d); + ~~~~^~ + { dg-end-multiline-output "" } + { dg-begin-multiline-output "note" } + snprintf (b, 7, "a%dbcdefg", d); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ + e &= 127; + snprintf (c, 7, "a%dbcdefgh", e); + /* { dg-warning "'bcdefgh' directive output truncated writing 7 bytes into a region of size between 3 and 5" "" { target *-*-* } .-1 } + { dg-message ".snprintf. output between 10 and 12 bytes into a destination of size 7" "note" { target *-*-* } .-2 } + { dg-begin-multiline-output "" } + snprintf (c, 7, "a%dbcdefgh", e); + ~~~~~^~ + { dg-end-multiline-output "" } + { dg-begin-multiline-output "note" } + snprintf (c, 7, "a%dbcdefgh", e); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr82726.c b/gcc/testsuite/gcc.dg/tree-ssa/pr82726.c new file mode 100644 index 00000000000..22bc59dacc8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr82726.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 --param tree-reassoc-width=4" } */ +/* { dg-additional-options "-mavx2" { target { x86_64-*-* i?86-*-* } } } */ + +#define N 40 +#define M 128 +unsigned int in[N+M]; +unsigned short out[N]; + +/* Outer-loop vectorization. */ + +void +foo (){ + int i,j; + unsigned int diff; + + for (i = 0; i < N; i++) { + diff = 0; + for (j = 0; j < M; j+=8) { + diff += in[j+i]; + } + out[i]=(unsigned short)diff; + } + + return; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr83198.c b/gcc/testsuite/gcc.dg/tree-ssa/pr83198.c new file mode 100644 index 00000000000..f9dba2acc68 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr83198.c @@ -0,0 +1,23 @@ +/* PR tree-optimization/83198 */ +/* { dg-do compile { target __float128 } } */ +/* { dg-options "-O2 -fprintf-return-value -Wno-format -fdump-tree-optimized" } */ +/* { dg-add-options __float128 } */ + +void bar (void); +void link_error (void); + +void +foo (char *x) +{ + int a = __builtin_sprintf (x, "%f", 1.0Q); + if (a < 8) + link_error (); + if (a > 13) + bar (); + if (a > 322) + link_error (); +} + +/* Verify we don't optimize return value to [8, 13]. */ +/* { dg-final { scan-tree-dump-not "link_error \\(\\);" "optimized" } } */ +/* { dg-final { scan-tree-dump "bar \\(\\);" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/ubsan/pr83014.c b/gcc/testsuite/gcc.dg/ubsan/pr83014.c new file mode 100644 index 00000000000..de626043cc6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr83014.c @@ -0,0 +1,12 @@ +/* PR sanitizer/83014 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=undefined" } */ + +int +foo (void) +{ + int data[5]; + data[0] = 0; + data[5] = 0; + return data[0]; +} diff --git a/gcc/testsuite/gcc.dg/vect/pr80631-1.c b/gcc/testsuite/gcc.dg/vect/pr80631-1.c new file mode 100644 index 00000000000..fc81245935a --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr80631-1.c @@ -0,0 +1,76 @@ +/* PR tree-optimization/80631 */ +/* { dg-do run } */ + +#include "tree-vect.h" + +int v[8] = { 77, 1, 79, 3, 4, 3, 6, 7 }; + +__attribute__((noinline, noclone)) void +f1 (void) +{ + int k, r = -1; + for (k = 0; k < 8; k++) + if (v[k] == 77) + r = k; + if (r != 0) + abort (); +} + +__attribute__((noinline, noclone)) void +f2 (void) +{ + int k, r = 4; + for (k = 0; k < 8; k++) + if (v[k] == 79) + r = k; + if (r != 2) + abort (); +} + +__attribute__((noinline, noclone)) void +f3 (void) +{ + int k, r = -17; + for (k = 0; k < 8; k++) + if (v[k] == 78) + r = k; + if (r != -17) + abort (); +} + +__attribute__((noinline, noclone)) void +f4 (void) +{ + int k, r = 7; + for (k = 0; k < 8; k++) + if (v[k] == 78) + r = k; + if (r != 7) + abort (); +} + +__attribute__((noinline, noclone)) void +f5 (void) +{ + int k, r = -1; + for (k = 0; k < 8; k++) + if (v[k] == 3) + r = k; + if (r != 5) + abort (); +} + +int +main () +{ + check_vect (); + f1 (); + f2 (); + f3 (); + f4 (); + f5 (); + return 0; +} + +/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 5 "vect" { xfail { ! vect_max_reduc } } } } */ +/* { dg-final { scan-tree-dump-times "condition expression based on integer induction." 10 "vect" { xfail { ! vect_max_reduc } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr80631-2.c b/gcc/testsuite/gcc.dg/vect/pr80631-2.c new file mode 100644 index 00000000000..60f4cf0c194 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr80631-2.c @@ -0,0 +1,73 @@ +/* PR tree-optimization/80631 */ +/* { dg-do run } */ + +#include "tree-vect.h" + +int v[8] = { 77, 1, 79, 3, 4, 3, 6, 7 }; + +__attribute__((noinline, noclone)) void +f1 (void) +{ + int k, r = -1; + for (k = 7; k >= 0; k--) + if (v[k] == 77) + r = k; + if (r != 0) + abort (); +} + +__attribute__((noinline, noclone)) void +f2 (void) +{ + int k, r = 4; + for (k = 7; k >= 0; k--) + if (v[k] == 79) + r = k; + if (r != 2) + abort (); +} + +__attribute__((noinline, noclone)) void +f3 (void) +{ + int k, r = -17; + for (k = 7; k >= 0; k--) + if (v[k] == 78) + r = k; + if (r != -17) + abort (); +} + +__attribute__((noinline, noclone)) void +f4 (void) +{ + int k, r = 7; + for (k = 7; k >= 0; k--) + if (v[k] == 78) + r = k; + if (r != 7) + abort (); +} + +__attribute__((noinline, noclone)) void +f5 (void) +{ + int k, r = -1; + for (k = 7; k >= 0; k--) + if (v[k] == 3) + r = k; + if (r != 3) + abort (); +} + +int +main () +{ + check_vect (); + f1 (); + f2 (); + f3 (); + f4 (); + f5 (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/alpha/pr83628-1.c b/gcc/testsuite/gcc.target/alpha/pr83628-1.c new file mode 100644 index 00000000000..a4a32d98969 --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr83628-1.c @@ -0,0 +1,19 @@ +/* PR target/83628 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef __SIZE_TYPE__ size_t; + +int +get_int (int *p, size_t idx) +{ + return p[idx]; +} + +long +get_long (long *p, size_t idx) +{ + return p[idx]; +} + +/* { dg-final { scan-assembler-not "\[ \t\]add\[ql\]" } } */ diff --git a/gcc/testsuite/gcc.target/alpha/pr83628-2.c b/gcc/testsuite/gcc.target/alpha/pr83628-2.c new file mode 100644 index 00000000000..2f02181d28b --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr83628-2.c @@ -0,0 +1,29 @@ +/* PR target/83628 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int +s4l (int a, int b) +{ + return a * 4 + b; +} + +int +s8l (int a, int b) +{ + return a * 8 + b; +} + +long +s4q (long a, long b) +{ + return a * 4 + b; +} + +long +s8q (long a, long b) +{ + return a * 8 + b; +} + +/* { dg-final { scan-assembler-not "\[ \t\]add\[ql\]" } } */ diff --git a/gcc/testsuite/gcc.target/alpha/pr83628-3.c b/gcc/testsuite/gcc.target/alpha/pr83628-3.c new file mode 100644 index 00000000000..5bec89f8047 --- /dev/null +++ b/gcc/testsuite/gcc.target/alpha/pr83628-3.c @@ -0,0 +1,29 @@ +/* PR target/83628 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int +s4l (int a, int b) +{ + return a * 4 - b; +} + +int +s8l (int a, int b) +{ + return a * 8 - b; +} + +long +s4q (long a, long b) +{ + return a * 4 - b; +} + +long +s8q (long a, long b) +{ + return a * 8 - b; +} + +/* { dg-final { scan-assembler-not "\[ \t\]sub\[ql\]" } } */ diff --git a/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c new file mode 100644 index 00000000000..09adddfd57c --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/armv8_2-fp16-move-2.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */ +/* { dg-options "-O2 -mfpu=fp-armv8 -march=armv8.2-a+fp16 -marm -mfloat-abi=hard" } */ + +__fp16 +test_select (__fp16 a, __fp16 b, __fp16 c) +{ + return (a < b) ? b : c; +} +/* { dg-final { scan-assembler "bpl" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr80631.c b/gcc/testsuite/gcc.target/i386/avx2-pr80631.c new file mode 100644 index 00000000000..5af1b0feb2c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx2-pr80631.c @@ -0,0 +1,23 @@ +/* PR tree-optimization/80631 */ +/* { dg-do run } */ +/* { dg-options "-O2 -ftree-vectorize -mavx2 -fno-vect-cost-model" } */ +/* { dg-require-effective-target avx2 } */ + +#include "avx2-check.h" + +#define N 8 + +static void +avx2_test (void) +{ + int v[N], k; + for(k = 0; k < N; k++) + v[k] = k; + v[0] = 77; + int found_index = -1; + for (k = 0; k < N; k++) + if (v[k] == 77) + found_index = k; + if (found_index != 0) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/pr80583.c b/gcc/testsuite/gcc.target/i386/pr80583.c new file mode 100644 index 00000000000..6fe3212b65c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr80583.c @@ -0,0 +1,13 @@ +/* PR target/80583 */ +/* { dg-do compile } */ +/* { dg-options "-O0 -mno-avx" } */ + +typedef int V __attribute__((__vector_size__(32))); +struct S { V a; }; + +V __attribute__((target ("avx"))) +foo (struct S *b) +{ + V x = b->a; + return x; +} diff --git a/gcc/testsuite/gcc.target/i386/pr80819-1.c b/gcc/testsuite/gcc.target/i386/pr80819-1.c new file mode 100644 index 00000000000..f06c3628e02 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr80819-1.c @@ -0,0 +1,13 @@ +/* PR target/80819 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -msse4 -mno-avx -mtune=haswell -masm=att" } */ + +typedef unsigned long long V __attribute__((vector_size (16))); + +V +foo (unsigned long long x, unsigned long long y) +{ + return (V) { x, y }; +} + +/* { dg-final { scan-assembler-not "movq\[ \t]*%rsi, \[-0-9]*\\(" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr80819-2.c b/gcc/testsuite/gcc.target/i386/pr80819-2.c new file mode 100644 index 00000000000..7571e8160cb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr80819-2.c @@ -0,0 +1,13 @@ +/* PR target/80819 */ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-O2 -msse4 -mno-avx -mtune=generic -masm=att" } */ + +typedef unsigned long long V __attribute__((vector_size (16))); + +V +foo (unsigned long long x, unsigned long long y) +{ + return (V) { x, y }; +} + +/* { dg-final { scan-assembler-not "movq\[ \t]*%rsi, \[-0-9]*\\(" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr81906.c b/gcc/testsuite/gcc.target/i386/pr81906.c new file mode 100644 index 00000000000..6c71bec41c0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr81906.c @@ -0,0 +1,37 @@ +/* PR target/81906 */ +/* { dg-do run { target *-*-linux* *-*-gnu* } } +/* { dg-options "-O2 -frounding-math" } */ + +#include <fenv.h> + +int +main () +{ + #define N 12 + double a[N] = { 2.0, 2.25, 2.5, 2.75, 3.5, -2.0, -2.25, -2.5, -2.75, -3.5, 0x2.0p53, -0x2.0p53 }; + double b[N], c[N], d[N], e[N]; + double be[N] = { 2.0, 2.0, 2.0, 3.0, 4.0, -2.0, -2.0, -2.0, -3.0, -4.0, 0x2.0p53, -0x2.0p53 }; + double ce[N] = { 2.0, 2.0, 2.0, 2.0, 3.0, -2.0, -3.0, -3.0, -3.0, -4.0, 0x2.0p53, -0x2.0p53 }; + double de[N] = { 2.0, 3.0, 3.0, 3.0, 4.0, -2.0, -2.0, -2.0, -2.0, -3.0, 0x2.0p53, -0x2.0p53 }; + double ee[N] = { 2.0, 2.0, 2.0, 2.0, 3.0, -2.0, -2.0, -2.0, -2.0, -3.0, 0x2.0p53, -0x2.0p53 }; + asm volatile ("" : : "g" (a), "g" (be), "g" (ce), "g" (de), "g" (ee) : "memory"); + + int i; + fesetround (FE_TONEAREST); + for (i = 0; i < N; ++i) + b[i] = __builtin_rint (a[i]); + fesetround (FE_DOWNWARD); + for (i = 0; i < N; ++i) + c[i] = __builtin_rint (a[i]); + fesetround (FE_UPWARD); + for (i = 0; i < N; ++i) + d[i] = __builtin_rint (a[i]); + fesetround (FE_TOWARDZERO); + for (i = 0; i < N; ++i) + e[i] = __builtin_rint (a[i]); + fesetround (FE_TONEAREST); + for (i = 0; i < N; ++i) + if (b[i] != be[i] || c[i] != ce[i] || d[i] != de[i] || e[i] != ee[i]) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr82941-1.c b/gcc/testsuite/gcc.target/i386/pr82941-1.c new file mode 100644 index 00000000000..d7e530d5116 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82941-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=skylake-avx512" } */ + +#include <immintrin.h> + +extern __m512d y, z; + +void +pr82941 () +{ + z = y; +} + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82941-2.c b/gcc/testsuite/gcc.target/i386/pr82941-2.c new file mode 100644 index 00000000000..db2f8589ab6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82941-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=knl" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82942-1.c b/gcc/testsuite/gcc.target/i386/pr82942-1.c new file mode 100644 index 00000000000..9cdf81a9d60 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82942-1.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -mno-avx512er -O2" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82942-2.c b/gcc/testsuite/gcc.target/i386/pr82942-2.c new file mode 100644 index 00000000000..ddb4e689659 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82942-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -mavx512er -mtune=knl -O2" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-1.c b/gcc/testsuite/gcc.target/i386/pr82990-1.c new file mode 100644 index 00000000000..ff1d6d40eb2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=knl -mvzeroupper" } */ + +#include <immintrin.h> + +extern __m512d y, z; + +void +pr82941 () +{ + z = y; +} + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-2.c b/gcc/testsuite/gcc.target/i386/pr82990-2.c new file mode 100644 index 00000000000..0d3cb2333dd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=skylake-avx512 -mno-vzeroupper" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-3.c b/gcc/testsuite/gcc.target/i386/pr82990-3.c new file mode 100644 index 00000000000..201fa98d8d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-3.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -mavx512er -mvzeroupper -O2" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-4.c b/gcc/testsuite/gcc.target/i386/pr82990-4.c new file mode 100644 index 00000000000..09f161c7291 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-4.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-mavx512f -mno-avx512er -mno-vzeroupper -O2" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-5.c b/gcc/testsuite/gcc.target/i386/pr82990-5.c new file mode 100644 index 00000000000..9932bdc5375 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-5.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512f -mtune=generic" } */ + +#include <immintrin.h> + +extern __m512d y, z; + +void +pr82941 () +{ + z = y; +} + +/* { dg-final { scan-assembler-times "vzeroupper" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-6.c b/gcc/testsuite/gcc.target/i386/pr82990-6.c new file mode 100644 index 00000000000..063a61c111d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-6.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=skylake-avx512 -mtune=knl" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr82990-7.c b/gcc/testsuite/gcc.target/i386/pr82990-7.c new file mode 100644 index 00000000000..dedde8b854b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr82990-7.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=skylake-avx512 -mtune=generic -mtune-ctrl=^emit_vzeroupper" } */ + +#include "pr82941-1.c" + +/* { dg-final { scan-assembler-not "vzeroupper" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr83467-1.c b/gcc/testsuite/gcc.target/i386/pr83467-1.c new file mode 100644 index 00000000000..b5cf17edec2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr83467-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -flive-range-shrinkage -m8bit-idiv" } */ +/* { dg-require-effective-target int128 } */ + +unsigned a; + +__int128 +b (unsigned c, short d, int e, long f, unsigned __int128 g, char h, + int i, __int128 j) +{ + j %= 5; + c *= i; + e = e >> (g & 31); + h &= e /= d; + g <<= 0 <= 0; + g &= h < j; + return c + d + f + g + h + i + a + j; +} diff --git a/gcc/testsuite/gcc.target/i386/pr83467-2.c b/gcc/testsuite/gcc.target/i386/pr83467-2.c new file mode 100644 index 00000000000..1b424fec2cb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr83467-2.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -flive-range-shrinkage" } */ +/* { dg-require-effective-target int128 } */ + +int +a (int b, short c, int d, long e, __int128 f, short g, long h, __int128 i) +{ + d <<= f & 31; + f >>= 127; + g *= d > c; + f >>= g; + return b + e + f + h + i; +} diff --git a/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c b/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c index 8a1f7c86013..928131b52ce 100644 --- a/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c +++ b/gcc/testsuite/gcc.target/powerpc/cpu-builtin-1.c @@ -73,6 +73,7 @@ use_cpu_supports_builtins (unsigned int *p) p[37] = __builtin_cpu_supports ("vsx"); p[38] = __builtin_cpu_supports ("darn"); p[39] = __builtin_cpu_supports ("scv"); + p[40] = __builtin_cpu_supports ("htm-no-suspend"); #else p[0] = 0; #endif diff --git a/gcc/testsuite/gcc.target/powerpc/pr77687.c b/gcc/testsuite/gcc.target/powerpc/pr77687.c new file mode 100644 index 00000000000..95b27ae99e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr77687.c @@ -0,0 +1,20 @@ +/* { dg-options "-std=gnu99 -O2" } */ +/* { dg-final { scan-assembler-not {\mmr r?1,r?11\M.*11.*\mblr\M} } } */ + +/* PR77687: We used to do stack accesses (via r11) after restoring r1. */ + +void g(int, char *); +const char * dum = "hello"; + +void f(int x) +{ + char big[200000]; + start: + g(x, big); + g(x, big); + register void *p asm("r11") = &&start; + asm("" : : "r"(p)); + asm("" : : :"r28"); + asm("" : : :"r29"); + asm("" : : :"r30"); +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr80101-1.c b/gcc/testsuite/gcc.target/powerpc/pr80101-1.c new file mode 100644 index 00000000000..45011d54ac2 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr80101-1.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power6" } } */ +/* { dg-require-effective-target dfp_hw } */ +/* { dg-options "-mcpu=power6 -mno-sched-epilog -Ofast" } */ + +/* Prior to resolving PR 80101, this test case resulted in an internal + compiler error. The role of this test program is to assure that + dejagnu's "test for excess errors" does not find any. */ + +int b; + +void e (); + +int c () +{ + struct + { + int a[b]; + } d; + if (d.a[0]) + e (); +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr80210-2.c b/gcc/testsuite/gcc.target/powerpc/pr80210-2.c new file mode 100644 index 00000000000..455f7d6e31f --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr80210-2.c @@ -0,0 +1,11 @@ +/* Test for ICE arising from GCC target pragma. */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#pragma GCC target "no-powerpc-gpopt" +double +foo (double a) +{ + return __builtin_sqrt (a); +} +/* { dg-final { scan-assembler-not "fsqrt" } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr81959.c b/gcc/testsuite/gcc.target/powerpc/pr81959.c new file mode 100644 index 00000000000..c4cc3733841 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr81959.c @@ -0,0 +1,25 @@ +/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-mpower9-vector -O2 -mfloat128" } */ + +/* PR 81959, the compiler raised on unrecognizable insn message in converting + int to __float128, where the int had a PRE_INC in the address. */ + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE 1024 +#endif + +void +convert_int_to_float128 (__float128 * __restrict__ p, + int * __restrict__ q) +{ + unsigned long i; + + for (i = 0; i < ARRAY_SIZE; i++) + p[i] = (__float128)q[i]; +} + +/* { dg-final { scan-assembler {\mlfiwax\M|\mlxsiwax\M} } } */ +/* { dg-final { scan-assembler {\mxscvsdqp\M} } } */ +/* { dg-final { scan-assembler-not {\mmtvsrd\M} } } */ +/* { dg-final { scan-assembler-not {\mmtvsrw[sz]\M} } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr83677.c b/gcc/testsuite/gcc.target/powerpc/pr83677.c new file mode 100644 index 00000000000..a1a760df811 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr83677.c @@ -0,0 +1,166 @@ +/* { dg-do run { target { powerpc*-*-* && { lp64 && p9vector_hw } } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* { dg-options "-mcpu=power9 -O2 " } */ + +/* PR83677: This test case used to fail due to mis-generation of the + xxpermr instruction. It requires inlining to create enough register + pressure that we generate xxpermr rather than vpermr. */ + +#include <altivec.h> + +void v_expand_u8(vector unsigned char* a, vector unsigned short* b0, vector unsigned short* b1) +{ + *b0 = (vector unsigned short)vec_mergeh(*a, vec_splats((unsigned char)0)); + *b1 = (vector unsigned short)vec_mergel(*a, vec_splats((unsigned char)0)); +} + +void v_expand_u16(vector unsigned short* a, vector unsigned int* b0, vector unsigned int* b1) +{ + *b0 = (vector unsigned int)vec_mergeh(*a, vec_splats((unsigned short)0)); + *b1 = (vector unsigned int)vec_mergel(*a, vec_splats((unsigned short)0)); +} + +void v_load_deinterleave_u8(unsigned char *ptr, vector unsigned char* a, vector unsigned char* b, vector unsigned char* c) +{ + vector unsigned char v1 = vec_xl( 0, ptr); + vector unsigned char v2 = vec_xl(16, ptr); + vector unsigned char v3 = vec_xl(32, ptr); + + static const vector unsigned char a12_perm = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 0, 0, 0, 0, 0}; + static const vector unsigned char a123_perm = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 20, 23, 26, 29}; + *a = vec_perm(vec_perm(v1, v2, a12_perm), v3, a123_perm); + + static const vector unsigned char b12_perm = {1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 0, 0, 0, 0, 0}; + static const vector unsigned char b123_perm = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18, 21, 24, 27, 30}; + *b = vec_perm(vec_perm(v1, v2, b12_perm), v3, b123_perm); + + static const vector unsigned char c12_perm = {2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 0, 0, 0, 0, 0, 0}; + static const vector unsigned char c123_perm = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 19, 22, 25, 28, 31}; + *c = vec_perm(vec_perm(v1, v2, c12_perm), v3, c123_perm); +} + +void v_load_deinterleave_f32(float *ptr, vector float* a, vector float* b, vector float* c) +{ + vector float v1 = vec_xl( 0, ptr); + vector float v2 = vec_xl(16, ptr); + vector float v3 = vec_xl(32, ptr); + + static const vector unsigned char flp = {0, 1, 2, 3, 12, 13, 14, 15, 16, 17, 18, 19, 28, 29, 30, 31}; + *a = vec_perm(v1, vec_sld(v3, v2, 8), flp); + + static const vector unsigned char flp2 = {28, 29, 30, 31, 0, 1, 2, 3, 12, 13, 14, 15, 16, 17, 18, 19}; + *b = vec_perm(v2, vec_sld(v1, v3, 8), flp2); + + *c = vec_perm(vec_sld(v2, v1, 8), v3, flp); +} + +void v_store_interleave_f32(float *ptr, vector float a, vector float b, vector float c) +{ + vector float hbc = vec_mergeh(b, c); + + static const vector unsigned char ahbc = {0, 1, 2, 3, 16, 17, 18, 19, 20, 21, 22, 23, 4, 5, 6, 7}; + vec_xst(vec_perm(a, hbc, ahbc), 0, ptr); + + vector float lab = vec_mergel(a, b); + vec_xst(vec_sld(lab, hbc, 8), 16, ptr); + + static const vector unsigned char clab = {8, 9, 10, 11, 24, 25, 26, 27, 28, 29, 30, 31, 12, 13, 14, 15}; + vec_xst(vec_perm(c, lab, clab), 32, ptr); +} + +vector float v_cvt_f32(vector unsigned int a) +{ + return (vector float)vec_ctf(a, 0); +} + +void acc_simd_(const unsigned char* src, float* dst, const unsigned char* mask, int len) +{ + int x = 0; + const int cVectorWidth = 16; + + for ( ; x <= len - cVectorWidth; x += cVectorWidth) + { + vector unsigned char v_mask = vec_xl(0, mask + x); + v_mask = (vector unsigned char)vec_cmpeq(vec_splats((unsigned char)0), v_mask); + v_mask = (vector unsigned char)vec_nor(v_mask, v_mask); + vector unsigned char v_src0, v_src1, v_src2; + v_load_deinterleave_u8((unsigned char *)(src + (x * 3)), &v_src0, &v_src1, &v_src2); + v_src0 = v_src0 & v_mask; + v_src1 = v_src1 & v_mask; + v_src2 = v_src2 & v_mask; + + /* expand 16 uchar to 4 vectors which contains 4 uint */ + vector unsigned short v_src00, v_src01, v_src10, v_src11, v_src20, v_src21; + v_expand_u8(&v_src0, &v_src00, &v_src01); + v_expand_u8(&v_src1, &v_src10, &v_src11); + v_expand_u8(&v_src2, &v_src20, &v_src21); + vector unsigned int v_src000, v_src001, v_src010, v_src011; + vector unsigned int v_src100, v_src101, v_src110, v_src111; + vector unsigned int v_src200, v_src201, v_src210, v_src211; + v_expand_u16(&v_src00, &v_src000, &v_src001); + v_expand_u16(&v_src01, &v_src010, &v_src011); + v_expand_u16(&v_src10, &v_src100, &v_src101); + v_expand_u16(&v_src11, &v_src110, &v_src111); + v_expand_u16(&v_src20, &v_src200, &v_src201); + v_expand_u16(&v_src21, &v_src210, &v_src211); + + vector float v_dst000, v_dst001, v_dst010, v_dst011; + vector float v_dst100, v_dst101, v_dst110, v_dst111; + vector float v_dst200, v_dst201, v_dst210, v_dst211; + v_load_deinterleave_f32(dst + (x * 3), &v_dst000, &v_dst100, &v_dst200); + v_load_deinterleave_f32(dst + ((x + 4) * 3), &v_dst001, &v_dst101, &v_dst201); + v_load_deinterleave_f32(dst + ((x + 8) * 3), &v_dst010, &v_dst110, &v_dst210); + v_load_deinterleave_f32(dst + ((x + 12) * 3), &v_dst011, &v_dst111, &v_dst211); + + v_store_interleave_f32(dst + (x * 3), vec_add(v_dst000, v_cvt_f32(v_src000)), vec_add(v_dst100, v_cvt_f32(v_src100)), vec_add(v_dst200, v_cvt_f32(v_src200))); + v_store_interleave_f32(dst + ((x + 4) * 3), vec_add(v_dst001, v_cvt_f32(v_src001)), vec_add(v_dst101, v_cvt_f32(v_src101)), vec_add(v_dst201, v_cvt_f32(v_src201))); + v_store_interleave_f32(dst + ((x + 8) * 3), vec_add(v_dst010, v_cvt_f32(v_src010)), vec_add(v_dst110, v_cvt_f32(v_src110)), vec_add(v_dst210, v_cvt_f32(v_src210))); + v_store_interleave_f32(dst + ((x + 12) * 3), vec_add(v_dst011, v_cvt_f32(v_src011)), vec_add(v_dst111, v_cvt_f32(v_src111)), vec_add(v_dst211, v_cvt_f32(v_src211))); + } + return; +} + +void acc_(const unsigned char* src, float* dst, const unsigned char* mask, int len) +{ + int x = 0; + src += (x * 3); + dst += (x * 3); + for( ; x < len; x++, src += 3, dst += 3 ) + { + if( mask[x] ) /* if mask, R/G/B dst[] += src[] */ + { + for( int k = 0; k < 3; k++ ) + { + dst[k] += src[k]; + } + } + } + return; +} + +#define N 16 + +int main(int argc, char *argv[]) +{ + unsigned char __attribute__ ((aligned (16) )) mask[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1}; + unsigned char __attribute__ ((aligned (16) )) src[3*N]; + float __attribute__ ((aligned (16) )) dst[3*N]; + float __attribute__ ((aligned (16) )) exp[3*N]; + + int i; + + /* initialize src and dst */ + for (i=0; i<3*N; i++) src[i] = (unsigned char)(i*3); + for (i=0; i<3*N; i++) {dst[i] = i * 1.0f; exp[i] = dst[i];} + + acc_(src, exp, mask, N); + acc_simd_(src, dst, mask, N); + + for (i=0; i<N; i++) + { + if ((dst[3*i] != exp[3*i]) || (dst[3*i+1] != exp[3*i+1]) || (dst[3*i+2] != exp[3*i+2])) + __builtin_abort (); + } + + return 0; +} diff --git a/gcc/testsuite/gcc.target/riscv/riscv.exp b/gcc/testsuite/gcc.target/riscv/riscv.exp new file mode 100644 index 00000000000..6a141964d22 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/riscv.exp @@ -0,0 +1,41 @@ +# Copyright (C) 2017-2018 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with 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 a RISC-V target. +if ![istarget riscv*-*-*] then { + return +} + +# Load support procs. +load_lib gcc-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ + "" $DEFAULT_CFLAGS + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.target/riscv/save-restore-1.c b/gcc/testsuite/gcc.target/riscv/save-restore-1.c new file mode 100644 index 00000000000..35b08b96760 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/save-restore-1.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -msave-restore -fomit-frame-pointer" } */ + +#include <stdlib.h> + +__attribute__((noinline)) int g(void) { return 42; } + +__attribute__((noinline)) int f(void) { + asm volatile ("li s0, 0x87654321" ::: "s0"); + return g(); +} + +int main(void) { + asm volatile ("li s0, 0x12345678" ::: "s0"); + + f(); + + long s0; + asm volatile ("mv %0, s0" : "=r"(s0)); + + if (s0 == 0x12345678) + exit (0); + else + abort(); +} diff --git a/gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 b/gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 new file mode 100644 index 00000000000..feb6c8c16cf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_with_typespec_7.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! PR Fortran/83093 +! Contributed by Gerhard Steinmetz <gscfq at t-online dot de> +program p + integer, parameter :: n(2) = [1,2] + real :: x = 2 + character(:), allocatable :: z, zz, zzz + character(:), allocatable :: y, yy + allocate (character(a) :: z) ! { dg-error "Scalar INTEGER expression" } + allocate (character(x) :: zz) ! { dg-error "Scalar INTEGER expression" } + allocate (character((1.0)) :: z) ! { dg-error "Scalar INTEGER expression" } + allocate (character(y) :: y) ! { dg-error "Scalar INTEGER expression" } + allocate (character(n(1:2)) :: y)! { dg-error "Scalar INTEGER expression" } +end diff --git a/gcc/testsuite/gfortran.dg/array_constructor_type_22.f03 b/gcc/testsuite/gfortran.dg/array_constructor_type_22.f03 new file mode 100644 index 00000000000..75130df7ec1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/array_constructor_type_22.f03 @@ -0,0 +1,29 @@ +! { dg-do compile } +! PR Fortran/83548 +program foo + + implicit none + + logical, parameter :: t = .true., f = .false. + logical, parameter :: a1(2) = [t, f] + logical(kind=1), parameter :: a2(2) = [logical(kind=1) :: t, f] + logical(kind=4), parameter :: a3(2) = [logical(kind=4) :: t, f] + logical(kind=1), parameter :: a4(2) = [logical(t, 1), logical(f, 1)] + logical(kind=4), parameter :: a5(2) = [logical(t, 4), logical(f, 4)] + logical(kind=1) b(2) + logical(kind=4) c(2) + + real, parameter :: x = 1, y = 2 + real, parameter :: r1(2) = [x, y] + real(kind=4), parameter :: r2(2) = [real(kind=4) :: x, y] + real(kind=8), parameter :: r3(2) = [real(kind=8) :: x, y] + real(kind=4), parameter :: r4(2) = [real(x, 4), real(y, 4)] + real(kind=8), parameter :: r5(2) = [real(x, 8), real(y, 8)] + real(kind=4) p(2) + real(kind=8) q(2) + + p = [real(kind=4) :: x, y] + q = [real(kind=8) :: x, y] + if (any(p .ne. r2)) call abort + if (any(q .ne. r3)) call aborts +end program foo diff --git a/gcc/testsuite/gfortran.dg/class_result_5.f90 b/gcc/testsuite/gfortran.dg/class_result_5.f90 new file mode 100644 index 00000000000..c557ed37180 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_result_5.f90 @@ -0,0 +1,38 @@ +! { dg-do run } +! +! Test the fix for PR79072. The original problem was that an ICE +! would occur in the select type construct. On fixing that, it was +! found that the string length was not being transferred in the +! pointer assignment in the main program. +! +! Contributed by Neil Carlson <neil.n.carlson@gmail.com> +! +function foo(string) + class(*), pointer :: foo + character(3), target :: string + foo => string + select type (foo) + type is (character(*)) + if (foo .ne. 'foo') call abort + foo = 'bar' + end select +end function + + interface + function foo(string) + class(*), pointer :: foo + character(3), target :: string + end function + end interface + + class(*), pointer :: res + character(3), target :: string = 'foo' + + res => foo (string) + + select type (res) + type is (character(*)) + if (res .ne. 'bar') call abort + end select + if (string .ne. 'bar') call abort +end diff --git a/gcc/testsuite/gfortran.dg/class_result_6.f90 b/gcc/testsuite/gfortran.dg/class_result_6.f90 new file mode 100644 index 00000000000..44e17a22025 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_result_6.f90 @@ -0,0 +1,24 @@ +! { dg-do run } +! +! Test the fix for PR79072 comment #12. A description of the problem +! is to be found in class_result_5.f90. +! +! Contributed by Neil Carlson <neil.n.carlson@gmail.com> +! + character(3), target :: a = 'foo' + class(*), pointer :: b + b => ptr() + select type (b) + type is (character(*)) + if (a .ne. "bar") call abort + end select +contains + function ptr() + class(*), pointer :: ptr + ptr => a + select type (ptr) + type is (character(*)) + ptr = "bar" + end select + end function +end diff --git a/gcc/testsuite/gfortran.dg/deferred_character_18.f90 b/gcc/testsuite/gfortran.dg/deferred_character_18.f90 new file mode 100644 index 00000000000..1b1457fa293 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/deferred_character_18.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +! PR Fortran/82367 +! Contributed by Walter Spector <w6ws at earthlink dot net> +module cls_allocmod + implicit none + +contains + + subroutine cls_alloc (n, str) + integer, intent(in) :: n + character(*), allocatable, intent(out) :: str +! Note: Star ^ should have been a colon (:) + + allocate (character(n)::str) + + end subroutine + +end module + +program cls + use cls_allocmod + implicit none + + character(:), allocatable :: s + + call cls_alloc(42, s) ! { dg-error "allocatable or pointer dummy argument" } + print *, 'string len =', len(s) + +end program diff --git a/gcc/testsuite/gfortran.dg/fmt_e.f90 b/gcc/testsuite/gfortran.dg/fmt_e.f90 new file mode 100644 index 00000000000..a85506b0929 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/fmt_e.f90 @@ -0,0 +1,10 @@ +! { dg-do run } +! PR83811 fortran 'e' format broken for single digit exponents +program test + character(25) :: s + write(s, '(1pe5.0e1)') 1.e-4 + if (s.ne."1.E-4") call abort + write(s, '(e5.1e1)') 1.e12 + if (s.ne."*****") call abort +end + diff --git a/gcc/testsuite/gfortran.dg/interface_40.f90 b/gcc/testsuite/gfortran.dg/interface_40.f90 new file mode 100644 index 00000000000..085c6b30f39 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_40.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/78814 +! Code contributed by Gerhard Steinmetz +program p + class(*) :: x ! { dg-error " must be dummy, allocatable or pointer" } + print *, f(x) +end + diff --git a/gcc/testsuite/gfortran.dg/internal_readwrite_4.f90 b/gcc/testsuite/gfortran.dg/internal_readwrite_4.f90 new file mode 100644 index 00000000000..cd2e684a456 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/internal_readwrite_4.f90 @@ -0,0 +1,30 @@ +! { dg-do run } +! PR 83436 - this used to cause an error. +! Original test case by Daan van Vugt. +module mod_random_seed + implicit none +contains + !> Read an int from /dev/urandom + subroutine read_urandom_int(seed, ierr) + implicit none + integer, intent(out) :: seed + integer, intent(out) :: ierr + integer :: un + character(len=80) :: restart_file + write(restart_file,'(A,A)') 'jorek', '_restart.h5' + + open(newunit=un, file="/dev/urandom", access="stream", & + form="unformatted", action="read", status="old", iostat=ierr) + if (ierr == 0) then + read(un) seed + close(un) + end if + end subroutine read_urandom_int +end module mod_random_seed + +program test_random_seed + use mod_random_seed + implicit none + integer :: seed, ierr + call read_urandom_int(seed, ierr) +end program test_random_seed diff --git a/gcc/testsuite/gfortran.dg/namelist_95.f90 b/gcc/testsuite/gfortran.dg/namelist_95.f90 new file mode 100644 index 00000000000..59566480865 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/namelist_95.f90 @@ -0,0 +1,23 @@ +! { dg-do run } +! PR83191 Writing a namelist with repeated complex + +program test + +implicit none + +integer, parameter :: UNIT = 1 +character(len=8), parameter :: FILE = "namelist" + +complex, dimension(3) :: a = (/ (0.0, 0.0), (0.0, 0.0), (3.0, 4.0) /) + +namelist /complex_namelist/ a + +open(UNIT, file=FILE) +write(UNIT, nml=complex_namelist) +close(UNIT) + +open(UNIT, file=FILE) +read(UNIT, nml=complex_namelist) +close(UNIT, status="delete") +if (any(a.ne.(/ (0.0, 0.0), (0.0, 0.0), (3.0, 4.0) /))) call abort +end program test diff --git a/gcc/testsuite/gfortran.dg/pr78686.f90 b/gcc/testsuite/gfortran.dg/pr78686.f90 new file mode 100644 index 00000000000..b17fe4192c8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr78686.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! +! Test the fix for PR78686, which used to ICE. +! +! Contributed by Gerhard Steinmetz <gerhard.steinmetz.fortran@t-online.de> +! +program p + type t + character :: c(1) = [t()] ! { dg-error "is being used before it is defined" } + end type +end diff --git a/gcc/testsuite/gfortran.dg/pr82253.f90 b/gcc/testsuite/gfortran.dg/pr82253.f90 new file mode 100644 index 00000000000..4dc681012a0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr82253.f90 @@ -0,0 +1,40 @@ +! PR middle-end/82253 +! { dg-do compile { target fortran_real_16 } } +! { dg-options "-Og" } + +module pr82253 + implicit none + private + public :: static_type + type, public :: T + procedure(), nopass, pointer :: testProc => null() + end type + type, public :: S + complex(kind=16), pointer :: ptr + end type + type(T), target :: type_complex32 + interface static_type + module procedure foo + end interface + interface + subroutine bar (testProc) + procedure(), optional :: testProc + end subroutine + end interface + contains + function foo (self) result(res) + complex(kind=16) :: self + type(T), pointer :: res + call bar (testProc = baz) + end function + subroutine baz (buffer, status) + character(len=*) :: buffer + integer(kind=4) :: status + complex(kind=16), target :: obj + type(S) :: self + integer(kind=1), parameter :: zero(storage_size(obj)/8) = 0 + obj = transfer (zero, obj) + self%ptr => obj + write (buffer, *, iostat=status) self%ptr, '#' + end subroutine +end module pr82253 diff --git a/gcc/testsuite/gfortran.dg/simplify_cshift_1.f90 b/gcc/testsuite/gfortran.dg/simplify_cshift_1.f90 index dbe67f4c8e9..3eb5adb49c8 100644 --- a/gcc/testsuite/gfortran.dg/simplify_cshift_1.f90 +++ b/gcc/testsuite/gfortran.dg/simplify_cshift_1.f90 @@ -23,12 +23,12 @@ program foo v = cshift(c, 2) if (any(b /= v)) call abort - ! Special cases shift = 0, size(a), 1-size(a) + ! Special cases shift = 0, size(a), size(a) b = cshift([1, 2, 3, 4, 5], 0) if (any(b /= a)) call abort b = cshift([1, 2, 3, 4, 5], size(a)) if (any(b /= a)) call abort - b = cshift([1, 2, 3, 4, 5], 1-size(a)) + b = cshift([1, 2, 3, 4, 5], -size(a)) if (any(b /= a)) call abort ! simplification of array arg. diff --git a/gcc/testsuite/gfortran.dg/transfer_simplify_11.f90 b/gcc/testsuite/gfortran.dg/transfer_simplify_11.f90 new file mode 100644 index 00000000000..ce7a4ad5e56 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/transfer_simplify_11.f90 @@ -0,0 +1,8 @@ +! { dg-do run } +! PR Fortran/82841 +! + integer, parameter :: N = 2 + character(len=1) :: chr(N) + chr = transfer(repeat("x",ncopies=N),[character(len=1) ::], N) + if (chr(1) /= 'x' .and. chr(2) /= 'x') call abort +end diff --git a/gcc/testsuite/gnat.dg/alignment13.adb b/gcc/testsuite/gnat.dg/alignment13.adb new file mode 100644 index 00000000000..dd0b25425f0 --- /dev/null +++ b/gcc/testsuite/gnat.dg/alignment13.adb @@ -0,0 +1,21 @@ +-- { dg-do run } +-- { dg-options "-gnatws" } + +procedure Alignment13 is + + type Rec is record + I1 : aliased Short_Integer; + I2 : Integer; + end record; + + for Rec use record + I1 at 0 range 0 .. 15; + end record; + + R : Rec; + +begin + if R.I2'Bit_Position /= 32 then + raise Program_Error; + end if; +end; diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index bac9b5383f6..677230c1406 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1136,8 +1136,8 @@ proc check_effective_target_pie { } { return 1; } if { [istarget *-*-solaris2.1\[1-9\]*] } { - # Full PIE support was added in Solaris 11.x and Solaris 12, but gcc - # errors out if missing, so check for that. + # Full PIE support was added in Solaris 11.3, but gcc errors out + # if missing, so check for that. return [check_no_compiler_messages pie executable { int main (void) { return 0; } } "-pie -fpie"] |