diff options
Diffstat (limited to 'gcc/testsuite')
188 files changed, 4424 insertions, 105 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6b9060000d6..c15f694e7bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,765 @@ +2019-11-20 Jakub Jelinek <jakub@redhat.com> + + PR c++/90767 + * g++.dg/diagnostic/pr90767-1.C: New test. + * g++.dg/diagnostic/pr90767-2.C: New test. + + PR middle-end/90840 + * gcc.c-torture/compile/pr90840.c: New test. + + PR target/90867 + * gcc.target/i386/pr90867.c: New test. + + PR c/90898 + * gcc.dg/pr90898.c: New test. + + Backported from mainline + 2019-11-19 Jakub Jelinek <jakub@redhat.com> + + PR c++/92504 + * g++.dg/gomp/pr92504.C: New test. + +2019-11-19 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/91450 + * gcc.c-torture/execute/pr91450-1.c: New test. + * gcc.c-torture/execute/pr91450-2.c: New test. + +2019-11-15 Ilya Leoshkevich <iii@linux.ibm.com> + + Backport from mainline + PR rtl-optimization/92430 + * gcc.dg/pr92430.c: New test (from Arseny Solokha). + +2019-11-13 Claudiu Zissulescu <claziss@gmail.com> + + Backport from mainline + * gcc.target/arc/delay-slot-limm.c: New test. + * gcc.target/arc/pic-2.c: New file. + +2019-11-13 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/92470 + PR fortran/92500 + * gfortran.dg/ISO_Fortran_binding_17.c: Include + ISO_Fortran_binding.h with relative path. + +2019-11-13 Tobias Burnus <tobias@codesourcery.com> + + Backport from mainline + 2019-11-13 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/92470 + * gfortran.dg/ISO_Fortran_binding_1.c (establish_c): Add assert for + lower_bound == 0. + + 2019-11-12 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/92470 + * gfortran.dg/ISO_Fortran_binding_17.c: New. + * gfortran.dg/ISO_Fortran_binding_17.f90: New. + * gfortran.dg/ISO_Fortran_binding_1.c (elemental_mult_c, allocate_c, + section_c, select_part_c): Update for CFI_{address} changes; + add asserts. + +2019-11-11 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2019-06-25 Richard Biener <rguenther@suse.de> + + PR tree-optimization/90930 + * gcc.dg/tree-ssa/reassoc-24.c: Adjust. + * gcc.dg/tree-ssa/reassoc-25.c: Likewise. + +2019-11-10 Thomas Koenig <tkoenig@gcc.gnu.org> + + Backport from trunk + PR fortran/92321 + * gfortran.dg/matmul_blas_2.f90: New test. + +2019-11-08 Jakub Jelinek <jakub@redhat.com> + + PR c++/92384 + * g++.dg/torture/pr92384.C: New test. + + Backported from mainline + 2019-11-05 Jakub Jelinek <jakub@redhat.com> + + PR c++/92343 + * g++.dg/cpp2a/attr-likely6.C: New test. + + 2019-10-31 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/92296 + * c-c++-common/cpp/pr92296-1.c: New test. + * c-c++-common/cpp/pr92296-2.c: New test. + + PR middle-end/92231 + * gcc.c-torture/compile/pr92231.c: New test. + + 2019-10-21 Jakub Jelinek <jakub@redhat.com> + + PR c++/92015 + * g++.dg/cpp0x/constexpr-92015.C: New test. + +2019-11-08 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.c-torture/compile/20191108-1.c: New test. + * gcc.target/sparc/overflow-1.c: Add -fno-pie to the options. + * gcc.target/sparc/overflow-2.c: Likewise. + * gcc.target/sparc/overflow-3.c: Likewise. + * gcc.target/sparc/overflow-4.c: Likewise. + * gcc.target/sparc/overflow-5.c: Likewise. + +2019-11-06 Ilya Leoshkevich <iii@linux.ibm.com> + + Backport from mainline + * gcc.target/s390/sigfpe-eh.c: New test. + +2019-11-05 Andreas Krebbel <krebbel@linux.ibm.com> + + Backport from mainline + 2019-11-05 Andreas Krebbel <krebbel@linux.ibm.com> + + * gcc.dg/tree-ssa/gen-vect-26.c: Disable loop peeling check for + IBM Z. + * gcc.dg/tree-ssa/gen-vect-28.c: Likewise. + +2019-11-05 Andreas Krebbel <krebbel@linux.ibm.com> + + Backport from mainline + 2019-11-05 Andreas Krebbel <krebbel@linux.ibm.com> + + * gcc.dg/tree-ssa/gen-vect-11.c: Add --param min-vect-loop-bound=0 + for IBM Z. + * gcc.dg/tree-ssa/gen-vect-32.c: Likewise. + +2019-11-05 Andreas Krebbel <krebbel@linux.ibm.com> + + Backport from mainline + 2019-11-05 Andreas Krebbel <krebbel@linux.ibm.com> + + * gcc.target/s390/s390.exp + (check_effective_target_s390_useable_hw): Add inline asm for z14 + and z15. Replace instruction for z13 with lochiz. Add register + clobbers. Check also for __zarch__ when doing the __VX__ test. + +2019-11-04 Iain Sandoe <iain@sandoe.co.uk> + + Backport from mainline. + 2019-06-20 Iain Sandoe <iain@sandoe.co.uk> + + * obj-c++.dg/stubify-1.mm: Adjust options and scan-asm checks. + * obj-c++.dg/stubify-2.mm: Likewise. + * objc.dg/stubify-1.m: Likewise. + * objc.dg/stubify-2.m: Likewise. + +2019-11-04 Tobias Burnus <tobias@codesourcery.com> + + Backport from mainline + 2019-10-30 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/92208 + * gfortran.dg/pr92208.f90: New. + +2019-11-04 Tobias Burnus <tobias@codesourcery.com> + + Backport from mainline + 2019-10-31 Jakub Jelinek <jakub@redhat.com> + + PR fortran/92284 + * gfortran.dg/bind_c_array_params_3_aux.c: Include + ../../../libgfortran/ISO_Fortran_binding.h rather than + ISO_Fortran_binding.h. + + 2019-10-31 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/92284 + * gfortran.dg/bind-c-intent-out.f90: Update expected dump; + extend comment. + * gfortran.dg/bind_c_array_params_3.f90: New. + * gfortran.dg/bind_c_array_params_3_aux.c: New. + + 2019-10-31 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/92277 + * fortran.dg/pr92277.f90: New. + + +2019-10-30 Iain Sandoe <iain@sandoe.co.uk> + + Backport from mainline. + 2019-10-22 Iain Sandoe <iain@sandoe.co.uk> + + * gcc.dg/Wnonnull.c: Provide prototypes for strlen and memcpy. + Use __SIZE_TYPE__ instead of size_t. + + Backport from mainline. + 2019-10-19 Iain Sandoe <iain@sandoe.co.uk> + + * gcc.dg/Wnonnull.c: Add attributed function declarations for + memcpy and strlen for Darwin. + +2019-10-30 Iain Sandoe <iain@sandoe.co.uk> + + Backport from mainline. + 2019-10-13 Iain Sandoe <iain@sandoe.co.uk> + + * gcc.target/i386/indirect-thunk-1.c: Allow 'l' or 'L' in + indirection label prefix, for Darwin. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/pr32219-2.c: Likewise. + * gcc.target/i386/pr32219-3.c: Likewise. + * gcc.target/i386/pr32219-4.c: Likewise. + * gcc.target/i386/pr32219-7.c: Likewise. + * gcc.target/i386/pr32219-8.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Likewise. + +2019-10-30 Iain Sandoe <iain@sandoe.co.uk> + + Backport from mainline. + 2019-08-13 Iain Sandoe <iain@sandoe.co.uk> + + * obj-c++.dg/stubify-1.mm: Rename symbol stub option. + * obj-c++.dg/stubify-2.mm: Likewise. + * objc.dg/stubify-1.m: Likewise. + * objc.dg/stubify-2.m: Likewise. + +2019-10-30 Dragan Mladjenovic <dmladjenovic@wavecomp.com> + + Backport from mainline + 2019-07-09 Dragan Mladjenovic <dmladjenovic@wavecomp.com> + + * gcc.target/mips/cfgcleanup-jalr1.c: New test. + * gcc.target/mips/cfgcleanup-jalr2.c: New test. + * gcc.target/mips/cfgcleanup-jalr3.c: New test. + +2019-10-29 Jakub Jelinek <jakub@redhat.com> + + PR c++/92201 + * g++.dg/other/pr92201.C: New test. + +2019-10-28  Paul Thomas  <pault@gcc.gnu.org> + + Backport from trunk + PR fortran/91926 + * gfortran.dg/ISO_Fortran_binding_13.f90: New test. + * gfortran.dg/ISO_Fortran_binding_13.c: Additional source. + * gfortran.dg/ISO_Fortran_binding_14.f90: New test. + +2019-10-28 Jiufu Guo <guojiufu@linux.ibm.com> + + Backport from mainline + PR target/70010 + * gcc.target/powerpc/pr70010.c: Add -Wno-psabi. + * gcc.target/powerpc/pr70010-1.c: Require LTO. + * gcc.target/powerpc/pr70010-2.c: Require LTO. + +2019-10-28 UroÅ¡ Bizjak <ubizjak@gmail.com> + + PR target/92225 + * gcc.target/i386/pr92225.c: New test. + +2019-10-28 Ilya Leoshkevich <iii@linux.ibm.com> + + Backport from mainline + PR rtl-optimization/92007 + * g++.dg/opt/pr92007.C: New test (from Arseny Solokha). + +2019-10-28 Peter Bergner <bergner@linux.ibm.com> + Jiufu Guo <guojiufu@linux.ibm.com> + + PR target/70010 + * gcc.target/powerpc/pr70010.c: New test. + * gcc.target/powerpc/pr70010-1.c: New test. + * gcc.target/powerpc/pr70010-2.c: New test. + * gcc.target/powerpc/pr70010-3.c: New test. + * gcc.target/powerpc/pr70010-4.c: New test. + +2019-10-28 Tobias Burnus <tobias@codesourcery.com> + + Backport from mainline + 2019-10-28 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/91863 + * gfortran.dg/bind-c-intent-out.f90: New. + +2019-10-27 Paul Thomas <pault@gcc.gnu.org> + + Backport from mainline + PR fortran/86248 + * gfortran.dg/char_result_19.f90: New test. + * gfortran.dg/char_result_mod_19.f90: Module for the new test. + +2019-10-25 Richard Earnshaw <rearnsha@arm.com> + + Backport from mainline + 2019-05-08 Mihail Ionescu <mihail.ionescu@arm.com> + Richard Earnshaw <rearnsha@arm.com> + PR target/88167 + * gcc.target/arm/pr88167-1.c: New test. + * gcc.target/arm/pr88167-2.c: New test. + +2019-10-24 Mihail Ionescu <mihail.ionescu@arm.com> + + Backport from mainline + 2019-10-18 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * gcc.target/arm/multilib.exp: Add extra tests. + +2019-10-23 Martin Liska <mliska@suse.cz> + + Backport from mainline + 2019-09-27 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/91885 + * gcc.dg/pr91885.c (__int64_t): Change from long to long long. + (__uint64_t): Change from unsigned long to unsigned long long. + +2019-10-23 Martin Liska <mliska@suse.cz> + + Backport from mainline + 2019-09-26 Martin Liska <mliska@suse.cz> + + PR tree-optimization/91885 + * gcc.dg/pr91885.c: New test. + +2019-10-23 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.c-torture/execute/20191023-1.c: New test. + +2019-10-23 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2019-10-17 Richard Biener <rguenther@suse.de> + + PR debug/91887 + * g++.dg/debug/dwarf2/pr91887.C: New testcase. + +2019-10-21 Jakub Jelinek <jakub@redhat.com> + + Backported from mainline + 2019-10-17 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/92056 + * gcc.c-torture/compile/pr92056.c: New test. + + PR fortran/87752 + * gfortran.dg/gomp/pr87752.f90: New test. + + 2019-10-05 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/91734 + * gcc.dg/pr91734.c: New test. + + 2019-10-04 Jakub Jelinek <jakub@redhat.com> + + PR c++/91974 + * g++.dg/cpp1z/eval-order5.C: New test. + + 2019-10-01 Jakub Jelinek <jakub@redhat.com> + + PR c++/91925 + * g++.dg/conversion/packed2.C: New test. + + 2019-09-27 Jakub Jelinek <jakub@redhat.com> + + PR c++/88203 + * c-c++-common/gomp/pr88203-1.c: New test. + * c-c++-common/gomp/pr88203-2.c: New test. + * c-c++-common/gomp/pr88203-3.c: New test. + + PR middle-end/91920 + * c-c++-common/gomp/pr91920.c: New test. + + 2019-09-11 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/89435 + PR rtl-optimization/89795 + PR rtl-optimization/91720 + * gcc.dg/pr89435.c: New test. + * gcc.dg/pr89795.c: New test. + * gcc.dg/pr91720.c: New test. + + PR tree-optimization/91723 + * gcc.dg/vect/vect-fma-3.c: New test. + + 2019-09-07 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/91665 + * gcc.dg/vect/pr91665.c: New test. + + 2019-09-05 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/91001 + PR middle-end/91105 + PR middle-end/91106 + * gcc.c-torture/compile/pr91001.c: New test. + + 2019-09-02 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/91632 + * gcc.c-torture/execute/pr91632.c: New test. + + 2019-09-01 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/91623 + * gcc.target/i386/pr91623.c: New test. + + PR lto/91572 + * g++.dg/lto/pr91572_0.C: New test. + + 2019-08-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/91351 + * g++.dg/opt/pr91351.C: New test. + + 2019-08-09 Jakub Jelinek <jakub@redhat.com> + + PR c/91401 + * c-c++-common/gomp/pr91401-1.c: New test. + * c-c++-common/gomp/pr91401-2.c: New test. + +2019-10-18 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/69455 + * gfortran.dg/pr69455_1.f90: New test. + * gfortran.dg/pr69455_2.f90: Ditto. + +2019-10-18 Tobias Burnus <tobias@codesourcery.com> + + Backport from mainline + 2019-10-18 Tobias Burnus <tobias@codesourcery.com> + + PR fortran/91586 + * gfortran.dg/class_71.f90: New. + +2019-10-17 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/83113 + PR fortran/89943 + * gfortran.dg/pr89943_1.f90: New test. + * gfortran.dg/pr89943_2.f90: Ditto. + * gfortran.dg/pr89943_3.f90: Ditto. + * gfortran.dg/pr89943_4.f90: Ditto. + +2019-10-17 Bill Schmidt <wschmidt@linux.ibm.com> + + Backport from mainline + 2019-10-15 Bill Schmidt <wschmidt@linux.ibm.com> + + PR target/92093 + * gcc.target/powerpc/pr91275.c: Fix type and endian issues. + +2019-10-16 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2019-10-02 Richard Biener <rguenther@suse.de> + + PR c++/91606 + * g++.dg/torture/pr91606.C: New testcase. + + 2019-09-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/91812 + * gcc.dg/torture/pr91812.c: New testcase. + +2019-10-14 Will Schmidt <will_schmidt@vnet.ibm.com> + + Backport from trunk. + 2019-09-26 Will Schmidt <will_schmidt@vnet.ibm.com> + + * gcc.target/powerpc/pure-builtin-redundant-load.c: New. + +2019-10-11 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91715 + * gfortran.dg/function_kinds_5.f90: Prune run-on error. + * gfortran.dg/pr85543.f90: Ditto. + * gfortran.dg/pr91715.f90: New test. + +2019-10-11 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91649 + * gfortran.dg/pr91649.f90: New test. + +2019-10-10 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91801 + * gfortran.dg/pr91801.f90: New test. + +2019-10-10 UroÅ¡ Bizjak <ubizjak@gmail.com> + + PR target/92022 + * g++.dg/pr92022.C: New test. + +2019-10-07 Thomas Koenig <tkoenig@gcc.gnu.org> + + Backport from trunk + PR fortran/84487 + * gfortran.dg/typebound_call_22.f03: xfail. + +2019-10-07 Bill Schmidt <wschmidt@linux.ibm.com> + + Backport from mainline + 2019-10-01 Bill Schmidt <wschmdit@linux.ibm.com> + + PR target/91275 + * gcc.target/powerpc/pr91275.c: New. + +2019-10-05 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/47054 + * gfortran.dg/pr47054_1.f90: New test + * gfortran.dg/pr47054_2.f90: Ditto. + +2019-10-05 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91942 + * gfortran.dg/pr91587.f90: Update dg-error regex. + * gfortran.dg/pr91942.f90: New test. + +2019-10-04 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91785 + * gfortran.dg/pr91785.f90: New test. + +2019-10-04 Dragan Mladjenovic <dmladjenovic@wavecomp.com> + + Backport from mainline + 2019-10-03 Dragan Mladjenovic <dmladjenovic@wavecomp.com> + + PR target/91769 + * gcc.target/mips/pr91769.c: New test. + +2019-10-02 Bernd Edlinger <bernd.edlinger@hotmail.de> + + Backport from mainline + + 2019-09-13 Bernd Edlinger <bernd.edlinger@hotmail.de> + + PR fortran/91716 + * gfortran.dg/pr91716.f90: New test. + +2019-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91864 + * gcc/testsuite/gfortran.dg/pr91864.f90 + +2019-10-01 Steven G. Kargl <kargl@gcc.ngu.org> + + PR fortran/91802 + * gfortran.dg/pr91802.f90: New test. + +2019-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91714 + * gfortran.dg/dec_type_print_3.f90: Update dg-error regex. + * gfortran.dg/pr91714.f90: New test. + +2019-10-01 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91641 + * gfortran.dg/pr91641.f90: New test. + +2019-10-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + Backport from mainline + 2019-09-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * gcc.target/aarch64/nosplit-di-const-volatile_1.c: New test. + +2019-09-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + Backport from mainline + 2019-08-22 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * gcc.target/arm/acle/crc_hf_1.c: New test. + +2019-09-21 Paul Thomas <pault@gcc.gnu.org> + + Backport from mainline + PR fortran/91588 + * gfortran.dg/associate_49.f90: New test. + +2019-09-20 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/pr91269.c: New test. + +2019-09-19 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91727 + * gfortran.dg/pr91727.f90: New test. + +2019-09-19 Kito Cheng <kito.cheng@sifive.com> + + Backport from mainline + 2019-09-05 Jakub Jelinek <jakub@redhat.com> + Jim Wilson <jimw@sifive.com> + + PR target/91635 + * gcc.c-torture/execute/pr91635.c: New test. + * gcc.target/riscv/shift-shift-4.c: New test. + * gcc.target/riscv/shift-shift-5.c: New test. + +2019-09-18 Thomas Koenig <tkoenig@gcc.gnu.org> + + Backport from trunk + PR fortran/91550 + * gfortran.dg/do_subscript_6.f90: New test. + +2019-09-15 Thomas Koenig <tkoenig@gcc.gnu.org> + + Backport from trunk + PR fortran/91557 + * gfortran.dg/warn_unused_dummy_argument_5.f90: New test. + +2019-09-14 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91553 + * gfortran.dg/pr91553.f90: New test. + +2019-09-14 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91566 + * gfortran.dg/pr91566.f90: New test. + +2019-09-14 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91642 + * gfortran.dg/pr91642.f90: New test. + +2019-09-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.target/sparc/20161111-1.c: XFAIL redundant zero-extension test. + +2019-09-09 Jakub Jelinek <jakub@redhat.com> + + PR target/87853 + * gcc.target/i386/pr87853.c: New test. + + PR target/91704 + * gcc.target/i386/pr91704.c: New test. + +2019-09-07 Paul Thomas <pault@gcc.gnu.org> + + Backport from mainline + PR fortran/91589 + * gfortran.dg/pr91589.f90: New test. + +2019-09-05 Harald Anlauf <anlauf@gmx.de> + + Backport from mainline + PR fortran/91496 + * gfortran.dg/pr91496.f90: New testcase. + + PR fortran/91496 + * gfortran.dg/directive_unroll_5.f90: Adjust error message. + +2019-09-05 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91660 + * gfortran.dg/pdt_4.f03: Fix invalid code. + * gfortran.dg/pr91660_1.f90: New test. + * gfortran.dg/pr91660_2.f90: Ditto. + +2019-09-04 Wilco Dijkstra <wdijkstr@arm.com> + + Backport from mainline + 2019-08-13 Wilco Dijkstra <wdijkstr@arm.com> + + PR target/81800 + * gcc.target/aarch64/no-inline-lrint_3.c: New test. + +2019-09-03 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/91597 + * gcc.c-torture/execute/pr91597.c: New test. + +2019-09-02 Steven G. Kargl <kargl@gc.gnu.org> + + PR fortran/91552 + * gfortran.dg/pr91552.f90: New test. + +2019-09-02 Martin Liska <mliska@suse.cz> + + Backport from mainline + 2019-09-02 Martin Liska <mliska@suse.cz> + + PR c++/91155 + * g++.dg/torture/pr91155.C: New test. + +2019-09-01 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.c-torture/execute/20190901-1.c: New test. + +2019-08-30 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91587 + * gfortran.dg/pr91587.f90: New test. + +2019-08-30 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91565 + * gfortran.dg/pr91565.f90: New test. + +2019-08-30 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91564 + * gfortran.dg/pr91564.f90: New test. + +2019-08-30 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/91551 + * gfortran.dg/allocated_3.f90 + +2019-08-30 Segher Boessenkool <segher@kernel.crashing.org> + + Backport from trunk + 2019-08-23 Segher Boessenkool <segher@kernel.crashing.org> + + PR target/91481 + * gcc.target/powerpc/darn-3.c: New testcase. + +2019-08-30 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2019-04-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/90278 + * gcc.dg/torture/pr90278.c: New testcase. + +2019-08-29 Richard Biener <rguenther@suse.de> + + PR tree-optimization/91568 + * gfortran.dg/pr91568.f: New testcase. + +2019-08-28 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2019-05-27 Richard Biener <rguenther@suse.de> + + PR tree-optimization/90637 + * gcc.dg/gomp/pr90637.c: New testcase. + 2019-08-23 Mihailo Stojanovic <mistojanovic@wavecomp.com> * gcc.target/mips/get-fcsr-3.c: New test. @@ -558,7 +1320,7 @@ Backport from mainline. 2019-05-15 Iain Sandoe <iain@sandoe.co.uk> - * lib/target-supports.exp + * lib/target-supports.exp (check_effective_target_powerpc_p8vector_ok): No support for Darwin. (check_effective_target_powerpc_p9vector_ok): Likewise. (check_effective_target_powerpc_float128_sw_ok): Likewise. @@ -851,7 +1613,7 @@ Backport from mainline PR fortran/91077 - * gfortran.dg/pointer_array_11.f90 : New test. + * gfortran.dg/pointer_array_11.f90: New test. 2019-07-05 Szabolcs Nagy <szabolcs.nagy@arm.com> @@ -1100,7 +1862,7 @@ * gcc.target/i386/pr82699-6.c: Likewise * gcc.target/i386/returninst1.c: Likewise * gcc.target/i386/returninst2.c: Likewise - * gcc.target/i386/returninst3.c : Likewise + * gcc.target/i386/returninst3.c: Likewise 2019-05-30 Iain Sandoe <iain@sandoe.co.uk> @@ -1262,7 +2024,7 @@ Backport from trunk PR fortran/90498 - * gfortran.dg/associate_48.f90 : New test. + * gfortran.dg/associate_48.f90: New test. 2019-05-17 Jakub Jelinek <jakub@redhat.com> @@ -3932,21 +4694,21 @@ 2019-02-23 Paul Thomas <pault@gcc.gnu.org> PR fortran/88117 - * gfortran.dg/deferred_character_32.f90 : New test + * gfortran.dg/deferred_character_32.f90: New test 2019-02-23 Paul Thomas <pault@gcc.gnu.org> PR fortran/89385 - * gfortran.dg/ISO_Fortran_binding_1.f90 : Correct test for + * gfortran.dg/ISO_Fortran_binding_1.f90: Correct test for previously incorrect lbound for allocatable expressions. Also correct stop values to avoid repetition. - * gfortran.dg/ISO_Fortran_binding_5.f90 : New test - * gfortran.dg/ISO_Fortran_binding_5.c : Support previous test. + * gfortran.dg/ISO_Fortran_binding_5.f90: New test + * gfortran.dg/ISO_Fortran_binding_5.c: Support previous test. PR fortran/89366 - * gfortran.dg/ISO_Fortran_binding_6.f90 : New test - * gfortran.dg/ISO_Fortran_binding_6.c : Support previous test. - * gfortran.dg/pr32599.f03 : Set standard to F2008. + * gfortran.dg/ISO_Fortran_binding_6.f90: New test + * gfortran.dg/ISO_Fortran_binding_6.c: Support previous test. + * gfortran.dg/pr32599.f03: Set standard to F2008. 2019-02-22 David Malcolm <dmalcolm@redhat.com> @@ -4575,7 +5337,7 @@ 2019-02-09 Paul Thomas <pault@gcc.gnu.org> PR fortran/89200 - * gfortran.dg/array_reference_2.f90 : New test. + * gfortran.dg/array_reference_2.f90: New test. 2019-02-09 Jakub Jelinek <jakub@redhat.com> @@ -4835,17 +5597,17 @@ 2019-02-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/88393 - * gfortran.dg/alloc_comp_assign_16.f03 : New test. + * gfortran.dg/alloc_comp_assign_16.f03: New test. 2019-02-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/88980 - * gfortran.dg/realloc_on_assign_32.f90 : New test. + * gfortran.dg/realloc_on_assign_32.f90: New test. 2019-02-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/88685 - * gfortran.dg/pointer_array_component_3.f90 : New test. + * gfortran.dg/pointer_array_component_3.f90: New test. 2019-02-02 Jakub Jelinek <jakub@redhat.com> diff --git a/gcc/testsuite/c-c++-common/cpp/pr92296-1.c b/gcc/testsuite/c-c++-common/cpp/pr92296-1.c new file mode 100644 index 00000000000..4bd69c8be87 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/pr92296-1.c @@ -0,0 +1,32 @@ +/* PR preprocessor/92296 */ +/* { dg-do preprocess } */ + +#pragma push_macro("__TIMESTAMP__") +#pragma pop_macro("__TIMESTAMP__") + +#pragma push_macro("__TIME__") +#pragma pop_macro("__TIME__") + +#pragma push_macro("__DATE__") +#pragma pop_macro("__DATE__") + +#pragma push_macro("__FILE__") +#pragma pop_macro("__FILE__") + +#pragma push_macro("__BASE_FILE__") +#pragma pop_macro("__BASE_FILE__") + +#pragma push_macro("__LINE__") +#pragma pop_macro("__LINE__") + +#pragma push_macro("__INCLUDE_LEVEL__") +#pragma pop_macro("__INCLUDE_LEVEL__") + +#pragma push_macro("__COUNTER__") +#pragma pop_macro("__COUNTER__") + +#pragma push_macro("__has_attribute") +#pragma pop_macro("__has_attribute") + +#pragma push_macro("__has_cpp_attribute") +#pragma pop_macro("__has_cpp_attribute") diff --git a/gcc/testsuite/c-c++-common/cpp/pr92296-2.c b/gcc/testsuite/c-c++-common/cpp/pr92296-2.c new file mode 100644 index 00000000000..15362a4bdc3 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/pr92296-2.c @@ -0,0 +1,73 @@ +/* PR preprocessor/92296 */ +/* { dg-do preprocess } */ +/* { dg-options "-Wno-builtin-macro-redefined" } */ + +#pragma push_macro("__TIMESTAMP__") +#undef __TIMESTAMP__ +#define __TIMESTAMP__ "Thu Oct 31 12:00:00 2019" +timestamp1 = __TIMESTAMP__ +#pragma pop_macro("__TIMESTAMP__") +timestamp2 = __TIMESTAMP__ + +#pragma push_macro("__TIME__") +#undef __TIME__ +#define __TIME__ "12:00:00" +time1 = __TIME__ +#pragma pop_macro("__TIME__") +time2 = __TIME__ + +#pragma push_macro("__DATE__") +#undef __DATE__ +#define __DATE__ "Oct 31 2019" +date1 = __DATE__ +#pragma pop_macro("__DATE__") +date2 = __DATE__ + +#pragma push_macro("__FILE__") +#undef __FILE__ +#define __FILE__ "pr92296-3.c" +file1 = __FILE__ /* { dg-final { scan-file pr92296-2.i "file1 = \"pr92296-3.c\"" } } */ +#pragma pop_macro("__FILE__") +file2 = __FILE__ /* { dg-final { scan-file-not pr92296-2.i "file2 = \"pr92296-3.c\"" } } */ + +#pragma push_macro("__BASE_FILE__") +#undef __BASE_FILE__ +#define __BASE_FILE__ "pr92296-4.c" +filebase1 = __BASE_FILE__ /* { dg-final { scan-file pr92296-2.i "filebase1 = \"pr92296-4.c\"" } } */ +#pragma pop_macro("__BASE_FILE__") +filebase2 = __BASE_FILE__ /* { dg-final { scan-file-not pr92296-2.i "filebase2 = \"pr92296-4.c\"" } } */ + +#pragma push_macro("__LINE__") +#undef __LINE__ /* { dg-warning "undefining" } */ +#define __LINE__ 142 +line1 = __LINE__ /* { dg-final { scan-file pr92296-2.i "line1 = 142" } } */ +#pragma pop_macro("__LINE__") +line2 = __LINE__ /* { dg-final { scan-file pr92296-2.i "line2 = 45" } } */ + +#pragma push_macro("__INCLUDE_LEVEL__") +#undef __INCLUDE_LEVEL__ /* { dg-warning "undefining" } */ +#define __INCLUDE_LEVEL__ 42 +includelevel1 = __INCLUDE_LEVEL__ /* { dg-final { scan-file pr92296-2.i "includelevel1 = 42" } } */ +#pragma pop_macro("__INCLUDE_LEVEL__") +includelevel2 = __INCLUDE_LEVEL__ /* { dg-final { scan-file pr92296-2.i "includelevel2 = 0" } } */ + +#pragma push_macro("__COUNTER__") +#undef __COUNTER__ /* { dg-warning "undefining" } */ +#define __COUNTER__ 172 +counter1 = __COUNTER__ /* { dg-final { scan-file pr92296-2.i "counter1 = 172" } } */ +#pragma pop_macro("__COUNTER__") +counter2 = __COUNTER__ /* { dg-final { scan-file-not pr92296-2.i "counter2 = 172" } } */ + +#pragma push_macro("__has_attribute") +#undef __has_attribute /* { dg-warning "undefining" } */ +#define __has_attribute(x) 0 +hasattr1 = __has_attribute(noreturn) /* { dg-final { scan-file pr92296-2.i "hasattr1 = 0" } } */ +#pragma pop_macro("__has_attribute") +hasattr2 = __has_attribute(noreturn) /* { dg-final { scan-file-not pr92296-2.i "hasattr2 = 0" } } */ + +#pragma push_macro("__has_cpp_attribute") +#undef __has_cpp_attribute /* { dg-warning "undefining" } */ +#define __has_cpp_attribute(x) 0 +hasattrcpp1 = __has_cpp_attribute(noreturn) /* { dg-final { scan-file pr92296-2.i "hasattrcpp1 = 0" } } */ +#pragma pop_macro("__has_cpp_attribute") +hasattrcpp2 = __has_cpp_attribute(noreturn) /* { dg-final { scan-file-not pr92296-2.i "hasattrcpp2 = 0" } } */ diff --git a/gcc/testsuite/c-c++-common/gomp/pr88203-1.c b/gcc/testsuite/c-c++-common/gomp/pr88203-1.c new file mode 100644 index 00000000000..54a686487c9 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr88203-1.c @@ -0,0 +1,61 @@ +/* PR c++/88203 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=c99" { target c } } */ +/* { dg-additional-options "-std=c++11" { target c++ } } */ + +void foo (const char *); +#pragma omp declare target to (foo) + +void +f1 (void) +{ + #pragma omp parallel default(none) + foo (__func__); +} + +void +f2 (void) +{ + #pragma omp parallel default(none) shared(__func__) + foo (__func__); +} + +void +f3 (void) +{ + #pragma omp parallel default(none) firstprivate(__func__) + foo (__func__); +} + +void +f4 (void) +{ + foo (__func__); + #pragma omp parallel default(none) + foo (__func__); +} + +void +f5 (void) +{ + foo (__func__); + #pragma omp parallel default(none) shared(__func__) + foo (__func__); +} + +void +f6 (void) +{ + foo (__func__); + #pragma omp parallel default(none) firstprivate(__func__) + foo (__func__); +} + +void +f7 (void) +{ + #pragma omp target map(to: __func__) + foo (__func__); + #pragma omp task depend(inout:__func__) + foo (__func__); +} diff --git a/gcc/testsuite/c-c++-common/gomp/pr88203-2.c b/gcc/testsuite/c-c++-common/gomp/pr88203-2.c new file mode 100644 index 00000000000..90c4a720774 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr88203-2.c @@ -0,0 +1,65 @@ +/* PR c++/88203 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=gnu99" { target c } } */ +/* { dg-additional-options "-std=gnu++11" { target c++ } } */ + +void foo (const char *, const char *); +#pragma omp declare target to (foo) + +void +f1 (void) +{ + #pragma omp parallel default(none) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f2 (void) +{ + #pragma omp parallel default(none) shared(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) shared(__FUNCTION__) firstprivate(__PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f3 (void) +{ + #pragma omp parallel default(none) firstprivate(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) firstprivate(__FUNCTION__), shared(__PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f4 (void) +{ + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f5 (void) +{ + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) shared(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f6 (void) +{ + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) firstprivate(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f7 (void) +{ + #pragma omp target map(to: __FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp task depend(inout:__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} diff --git a/gcc/testsuite/c-c++-common/gomp/pr88203-3.c b/gcc/testsuite/c-c++-common/gomp/pr88203-3.c new file mode 100644 index 00000000000..6a9585d3281 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr88203-3.c @@ -0,0 +1,28 @@ +/* PR c++/88203 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=c99" { target c } } */ +/* { dg-additional-options "-std=c++11" { target c++ } } */ + +void foo (const char *); +#pragma omp declare target to (foo) + +void +f1 (void) +{ + #pragma omp parallel for lastprivate (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'lastprivate'" } */ + for (int i = 0; i < 2; i++) + foo (__func__); + #pragma omp parallel private (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'private'" } */ + foo (__func__); +} + +void +f2 (void) +{ + foo (__func__); + #pragma omp parallel default(none) private (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'private'" } */ + foo (__func__); + #pragma omp parallel for default(none) lastprivate (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'lastprivate'" } */ + for (int i = 0; i < 2; i++) + foo (__func__); +} diff --git a/gcc/testsuite/c-c++-common/gomp/pr91401-1.c b/gcc/testsuite/c-c++-common/gomp/pr91401-1.c new file mode 100644 index 00000000000..f588bf6f16c --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr91401-1.c @@ -0,0 +1,10 @@ +/* PR c/91401 */ + +void +foo (void) +{ + int i; + #pragma omp distribute parallel for schedule (static) dist_schedule (static) + for (i = 0; i < 64; i++) + ; +} diff --git a/gcc/testsuite/c-c++-common/gomp/pr91401-2.c b/gcc/testsuite/c-c++-common/gomp/pr91401-2.c new file mode 100644 index 00000000000..f537e66e27c --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr91401-2.c @@ -0,0 +1,15 @@ +#pragma omp declare target +void f0 (void); + +void +f1 (void) +{ + int i; + #pragma omp distribute dist_schedule(static) dist_schedule(static) /* { dg-warning "too many 'dist_schedule' clauses" } */ + for (i = 0; i < 8; ++i) + f0 (); + #pragma omp distribute dist_schedule(static,2) dist_schedule(static,4) /* { dg-warning "too many 'dist_schedule' clauses" } */ + for (i = 0; i < 8; ++i) + f0 (); +} +#pragma omp end declare target diff --git a/gcc/testsuite/c-c++-common/gomp/pr91920.c b/gcc/testsuite/c-c++-common/gomp/pr91920.c new file mode 100644 index 00000000000..604fd5986f8 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr91920.c @@ -0,0 +1,19 @@ +/* PR middle-end/91920 */ + +void bar (float *); + +void +foo (void) +{ + int i; + float f[3] = { 0.0f, 0.0f, 0.0f }; +#pragma omp parallel for default(none) reduction(+:f[:3]) + for (i = 0; i < 1000; i++) + { + int j; + float k[3] = { 0.25f, 0.5f, 0.75f }; + for (j = 0; j < 3; j++) + f[j] += k[j]; + } + bar (f); +} diff --git a/gcc/testsuite/g++.dg/conversion/packed2.C b/gcc/testsuite/g++.dg/conversion/packed2.C new file mode 100644 index 00000000000..7df74dc110b --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/packed2.C @@ -0,0 +1,15 @@ +// PR c++/91925 +// { dg-do compile { target c++11 } } +// { dg-options "-fpack-struct" } + +struct A {}; +int foo (A); +struct B { + A a; + decltype (foo (a)) p; +}; +template <typename T> T bar (T); +class C { + A a; + decltype (bar (a)) p; +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C new file mode 100644 index 00000000000..60f288ee993 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C @@ -0,0 +1,7 @@ +// PR c++/92015 +// { dg-do compile { target c++11 } } + +struct S1 { char c[6] {'h', 'e', 'l', 'l', 'o', 0}; }; +struct S2 { char c[6] = "hello"; }; +static_assert (S1{}.c[0] == 'h', ""); +static_assert (S2{}.c[0] == 'h', ""); diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-odr1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-odr1.C new file mode 100644 index 00000000000..cf3f95f0565 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-odr1.C @@ -0,0 +1,19 @@ +// PR c++/92062 - ODR-use ignored for static member of class template. +// { dg-do run { target c++11 } } + +template<int> struct A { + static const bool x; + static_assert(&x, ""); // odr-uses A<...>::x +}; + +int g; + +template<int I> +const bool A<I>::x = (g = 42, false); + +void f(A<0>) {} // A<0> must be complete, so is instantiated +int main() +{ + if (g != 42) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-odr2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-odr2.C new file mode 100644 index 00000000000..0927488e569 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-odr2.C @@ -0,0 +1,19 @@ +// PR c++/92062 - ODR-use ignored for static member of class template. +// { dg-do run { target c++11 } } + +template<int> struct A { + static const bool x; + enum { force_instantiation =! &x}; // odr-uses A<...>::x +}; + +int g; + +template<int I> +const bool A<I>::x = (g = 42, false); + +void f(A<0>) {} // A<0> must be complete, so is instantiated +int main() +{ + if (g != 42) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/nontype5.C b/gcc/testsuite/g++.dg/cpp0x/nontype5.C new file mode 100644 index 00000000000..c31134581aa --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/nontype5.C @@ -0,0 +1,17 @@ +// PR c++/91923 - failure-to-SFINAE with class type NTTP in C++17. +// { dg-do compile { target c++11 } } + +template<typename T> +constexpr bool is_integral_(...) { + return false; +} +template<typename T, T = 1> +constexpr bool is_integral_(long) { + return true; +} + +static_assert(is_integral_<int>(42), ""); +static_assert(!is_integral_<void>(42), ""); + +struct S {}; +static_assert(!is_integral_<S>(42), ""); diff --git a/gcc/testsuite/g++.dg/cpp0x/overload-conv-4.C b/gcc/testsuite/g++.dg/cpp0x/overload-conv-4.C new file mode 100644 index 00000000000..6fcdbbaa6a4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/overload-conv-4.C @@ -0,0 +1,23 @@ +// PR c++/90998 - ICE with copy elision in init by ctor and -Wconversion. +// { dg-do compile { target c++11 } } +// { dg-options "-Wconversion" } + +struct B; + +struct A { + operator B(); +}; + +struct B { + B(A const &rs); + B(B const &rs); +}; + +B +f (A x) +{ + // C++14: we call B::B(A const &) + // C++17: we call A::operator B() + return B(x); // { dg-warning "choosing .A::operator B\\(\\). over .B::B\\(const A&\\)" "" { target c++17 } } + // { dg-warning "for conversion from .A. to .B." "" { target c++17 } .-1 } +} diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C new file mode 100644 index 00000000000..0d22851e4b2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C @@ -0,0 +1,66 @@ +// PR c++/91705 - constexpr evaluation rejects ++/-- on floats. +// { dg-do compile { target c++14 } } + +#define SA(X) static_assert((X),#X) + +template <class T> +constexpr T fn1(T t) +{ + return ++t; +} + +constexpr float fn2(float t) +{ + return ++t; +} + +template <class T> +constexpr T fn3(T t) +{ + return --t; +} + +constexpr float fn4(float t) +{ + return --t; +} + +template <class T> +constexpr T fn5(T t) +{ + return t++; +} + +constexpr float fn6(float t) +{ + return t++; +} + +template <class T> +constexpr T fn7(T t) +{ + return t--; +} + +constexpr float fn8(float t) +{ + return t--; +} + +constexpr double r1 = fn1(2.0f); +SA(r1 == 3); +constexpr double r2 = fn2(2.0f); +SA(r2 == 3); +constexpr double r3 = fn3(2.0f); +SA(r3 == 1); +constexpr double r4 = fn4(2.0f); +SA(r4 == 1); + +constexpr double r5 = fn5(2.0f); +SA(r5 == 2); +constexpr double r6 = fn6(2.0f); +SA(r6 == 2); +constexpr double r7 = fn7(2.0f); +SA(r7 == 2); +constexpr double r8 = fn8(2.0f); +SA(r8 == 2); diff --git a/gcc/testsuite/g++.dg/cpp1y/nontype1.C b/gcc/testsuite/g++.dg/cpp1y/nontype1.C new file mode 100644 index 00000000000..a37e996a3ff --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/nontype1.C @@ -0,0 +1,42 @@ +// PR c++/91129 - wrong error with binary op in template argument. +// { dg-do compile { target c++14 } } + +template<class T, T v> +struct C +{ + constexpr operator T() const { return v; } + constexpr auto operator()() const { return v; } +}; + +template<class T, int N> +struct A +{ +}; + +template<int N> +void foo () +{ + A<int, C<int, 6>{}> a0; + A<int, !C<int, 6>{}> a1; + A<int, N / C<int, 6>{}> a2; + A<int, N % C<int, 6>{}> a3; + A<int, N * C<int, 6>{}> a4; + A<int, N ^ C<int, 6>{}> a5; + A<int, N | C<int, 6>{}> a6; + A<int, N & C<int, 6>{}> a7; + A<int, N + C<int, 6>{}> a8; + A<int, N - C<int, 6>{}> a9; + A<int, -C<int, 6>{}> a10; + A<int, (N >> C<int, 6>{})> a11; + A<int, N << C<int, 6>{}> a12; + A<int, ~C<int, 6>{}> a13; + A<int, N || C<int, 6>{}> a14; + A<int, N && C<int, 6>{}> a15; + A<int, N == C<int, 6>{}> a16; + A<int, N != C<int, 6>{}> a17; +} + +int main() +{ + foo<10>(); +} diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ63.C b/gcc/testsuite/g++.dg/cpp1y/var-templ63.C new file mode 100644 index 00000000000..a65f53b2963 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ63.C @@ -0,0 +1,5 @@ +// PR c++/91740 - ICE with constexpr call and ?: in ARRAY_REF. +// { dg-do compile { target c++14 } } + +constexpr bool f(const char*) { return true; } +template<typename T> const char c = "FOO"[f("BAR") ? 1 : 0]; diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp50.C b/gcc/testsuite/g++.dg/cpp1z/decomp50.C new file mode 100644 index 00000000000..5400a826948 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/decomp50.C @@ -0,0 +1,51 @@ +// PR c++/92106 - ICE with structured bindings and -Wreturn-local-addr. +// { dg-do compile { target c++17 } } + +template <typename> struct B; +template <typename _Tp> struct B<_Tp *> { typedef _Tp& reference; }; +struct C { + template <typename _Up> using rebind = _Up *; +}; +template <typename _Iterator, typename> class D { +public: + typename B<_Iterator>::reference operator*(); + void operator++(); +}; + +template <typename _Iterator, typename _Container> +bool operator!=(D<_Iterator, _Container>, D<_Iterator, _Container>); +template <typename _Tp> class F { +public: + typedef _Tp value_type; +}; + +template <typename _Alloc> struct G { + template <typename _Tp> struct H { using type = C::rebind<_Tp>; }; + using const_pointer = typename H<typename _Alloc::value_type>::type; +}; +template <typename _Tp, typename _Alloc = F<_Tp>> class I { + typedef D<typename G<_Alloc>::const_pointer, int> const_iterator; + +public: + const_iterator begin(); + const_iterator end(); +}; + +struct A { + struct J { + int name; + int value; + }; + I<J> members; + template <typename Key> const int *find(Key) { + for (const auto &[name, value] : members) + // See <https://gcc.gnu.org/ml/gcc-patches/2019-10/msg01107.html> + // for why we don't warn here. + return &value; // { dg-bogus "address of local variable" } + return nullptr; + } +}; +int main() { + A a; + a.find(""); +} diff --git a/gcc/testsuite/g++.dg/cpp1z/eval-order5.C b/gcc/testsuite/g++.dg/cpp1z/eval-order5.C new file mode 100644 index 00000000000..a8f06ed421a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/eval-order5.C @@ -0,0 +1,31 @@ +// PR c++/91974 +// { dg-do run } +// { dg-options "-fstrong-eval-order" } + +extern "C" void abort (); + +bool ok = false; + +void +foo (int x) +{ + if (x != 0) + abort (); + ok = true; +} + +void +bar (int) +{ + abort (); +} + +int +main () +{ + typedef void (*T) (int); + T fn = foo; + fn ((fn = bar, 0)); + if (fn != bar || !ok) + abort (); +} diff --git a/gcc/testsuite/g++.dg/cpp2a/attr-likely6.C b/gcc/testsuite/g++.dg/cpp2a/attr-likely6.C new file mode 100644 index 00000000000..a04021e5037 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/attr-likely6.C @@ -0,0 +1,14 @@ +// PR c++/92343 +// { dg-do compile { target c++14 } } + +constexpr bool +foo (bool x) +{ + if (x) + [[unlikely]] return true; + else + [[likely]] return false; +} + +static_assert (foo (true), ""); +static_assert (!foo (false), ""); diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C new file mode 100644 index 00000000000..6cd99cc9bb8 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C @@ -0,0 +1,12 @@ +// { dg-do compile } +// { dg-require-effective-target c++11 } +// { dg-options "-g -fdebug-types-section" } +class A { +public: + A(); + template <typename U> A(U); +}; +template <class> struct B { typedef A type; }; +template <class R, typename... Args> +int Bind(R(Args...), typename B<Args>::type...) { return 0; } +void KeepBufferRefs(A, A) { A a, b(Bind(KeepBufferRefs, a, b)); } diff --git a/gcc/testsuite/g++.dg/diagnostic/pr90767-1.C b/gcc/testsuite/g++.dg/diagnostic/pr90767-1.C new file mode 100644 index 00000000000..7d1cd3db398 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/pr90767-1.C @@ -0,0 +1,15 @@ +// PR c++/90767 +// { dg-do compile } + +struct X { + int n; + void foo (); // { dg-message "initializing argument 'this'" } + + template<typename T> + operator T () const + { + if (n == 0) + foo (); // { dg-error "cannot convert 'const X\\*' to 'X\\*'" } + return n; + } +}; diff --git a/gcc/testsuite/g++.dg/diagnostic/pr90767-2.C b/gcc/testsuite/g++.dg/diagnostic/pr90767-2.C new file mode 100644 index 00000000000..550762b2db9 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/pr90767-2.C @@ -0,0 +1,15 @@ +// PR c++/90767 +// { dg-do compile } + +struct A { + struct B { B (int) {} }; + + template <typename T> + void foo () + { + int x = 0; + bar (x); // { dg-error "cannot convert 'int' to 'A::B&'" } + } + + void bar (B &arg) {} // { dg-message "initializing argument 1" } +}; diff --git a/gcc/testsuite/g++.dg/ext/is_final.C b/gcc/testsuite/g++.dg/ext/is_final.C index b3875ad04ae..20e5d629ff5 100644 --- a/gcc/testsuite/g++.dg/ext/is_final.C +++ b/gcc/testsuite/g++.dg/ext/is_final.C @@ -43,3 +43,17 @@ static_assert( __is_final (Ff<int>), "Ff<int> is final" ); static_assert( __is_final (Ff<A>), "Ff<A> is final" ); static_assert( __is_final (Ff<Af>), "Ff<Af> is final" ); +// PR 85254 + +template <class T> struct final_trait_wrap{ typedef T type; }; + +template <class T> struct my_is_final +{ + static const bool value = __is_final(typename final_trait_wrap<T>::type); +}; + +struct final1 final {}; +template <typename T> struct final2 final {}; + +static_assert( my_is_final<final1>::value, "final1 is final" ); +static_assert( my_is_final<final2<int>>::value, "final2<int> is final" ); diff --git a/gcc/testsuite/g++.dg/gomp/pr92504.C b/gcc/testsuite/g++.dg/gomp/pr92504.C new file mode 100644 index 00000000000..8df67621532 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr92504.C @@ -0,0 +1,29 @@ +// PR c++/92504 +// { dg-do compile { target c++11 } } +// { dg-additional-options "-O2" } + +namespace std { + typedef __SIZE_TYPE__ size_t; + typedef __PTRDIFF_TYPE__ ptrdiff_t; +} + +struct A { + A (); + A (const A &); + A & operator++ (); + bool operator != (const A &) const; + std::ptrdiff_t operator - (const A &); + A & operator += (std::size_t); + int a; + A & begin (); + A & end (); // { dg-message "declared here" } +}; + +void +bar () +{ + A a; + #pragma omp for + for (auto b = a; b != a.end; ++b) // { dg-error "invalid use of non-static member function" } + ; +} diff --git a/gcc/testsuite/g++.dg/init/array54.C b/gcc/testsuite/g++.dg/init/array54.C new file mode 100644 index 00000000000..f6be350ba72 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array54.C @@ -0,0 +1,13 @@ +// PR c++/90947 +// { dg-do run { target c++11 } } + +#include <atomic> + +static std::atomic<int> a[1] { {1} }; + +int +main () +{ + if (a[0].load () != 1) + __builtin_abort (); +} diff --git a/gcc/testsuite/g++.dg/lto/pr91572_0.C b/gcc/testsuite/g++.dg/lto/pr91572_0.C new file mode 100644 index 00000000000..95a7e9fabf5 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr91572_0.C @@ -0,0 +1,12 @@ +// PR lto/91572 +// { dg-lto-do link } +// { dg-lto-options { { -O -fPIC -flto } } } +// { dg-require-effective-target shared } +// { dg-require-effective-target fpic } +// { dg-extra-ld-options "-shared" } + +void foo (char); +namespace N { + class A { A (); }; + A::A () { asm ("" : : "g" (0)); } +} diff --git a/gcc/testsuite/g++.dg/opt/pr91351.C b/gcc/testsuite/g++.dg/opt/pr91351.C new file mode 100644 index 00000000000..f793a2f1b11 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr91351.C @@ -0,0 +1,38 @@ +// PR tree-optimization/91351 +// { dg-do run } +// { dg-options "-O2 -fstrict-enums" } + +enum E { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, + e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25 }; + +__attribute__((noipa)) void +foo () +{ + __builtin_abort (); +} + +__attribute__((noipa)) void +bar () +{ +} + +__attribute__((noipa)) void +baz (E e) +{ + switch (e) + { + case e11: + case e12: + case e13: foo (); break; + case e24: break; + case e14: + case e15: break; + default: bar (); break; + } +} + +int +main () +{ + baz (e3); +} diff --git a/gcc/testsuite/g++.dg/opt/pr92007.C b/gcc/testsuite/g++.dg/opt/pr92007.C new file mode 100644 index 00000000000..9434cc929dd --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr92007.C @@ -0,0 +1,32 @@ +// PR rtl-optimization/92007 +// { dg-do compile } +// { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-forwprop --param max-cse-insns=0 -Wno-return-type -std=gnu++98 -freorder-blocks-and-partition" } + +void +sb (int *); + +class d4 { +public: + ~d4(); + void gb (); + int op () { return no; } + int wl () { return tf; } + bool ee () try { gb (); } catch (...) { return false; } + bool b1 () { return (tf == no) ? false : ee (); } + +private: + int no, tf; +}; + +void +hs (int *v9) +{ + d4 p6; + + p6.gb (); + if (p6.op () > p6.wl ()) + { + p6.b1 (); + sb (v9); + } +} diff --git a/gcc/testsuite/g++.dg/other/pr92201.C b/gcc/testsuite/g++.dg/other/pr92201.C new file mode 100644 index 00000000000..15ba1a12525 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr92201.C @@ -0,0 +1,7 @@ +// PR c++/92201 + +int +foo (void (*p) ()) +{ + return (*reinterpret_cast<int (*)()> (p)) (); +} diff --git a/gcc/testsuite/g++.dg/pr92022.C b/gcc/testsuite/g++.dg/pr92022.C new file mode 100644 index 00000000000..066d984ffc5 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr92022.C @@ -0,0 +1,13 @@ +// { dg-do compile { target alpha*-*-* } } +// { dg-options "-O1 -g -fno-var-tracking -mcpu=ev4 -mieee" } + +struct a { + a(long); +}; +long b; +void c() { + a d(1); + double e = b; + for (; b;) + d = e; +} diff --git a/gcc/testsuite/g++.dg/torture/pr91155.C b/gcc/testsuite/g++.dg/torture/pr91155.C new file mode 100644 index 00000000000..04e4f7ab41b --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr91155.C @@ -0,0 +1,18 @@ +/* PR c++/91155. */ + +template< char C > struct dummy {}; + +template< typename T > const char *test() +{ + __builtin_printf ("test: %s\n", __PRETTY_FUNCTION__); + return __PRETTY_FUNCTION__; +} + +int main() +{ + if (__builtin_strcmp ("const char* test() [with T = dummy<\'\\000\'>]", test< dummy< '\0' > > ()) != 0) + {};// __builtin_abort (); + if (__builtin_strcmp ("const char* test() [with T = dummy<\'\\\'\'>]", test< dummy< '\'' > > ()) != 0) + {};// __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/torture/pr91606.C b/gcc/testsuite/g++.dg/torture/pr91606.C new file mode 100644 index 00000000000..37a05a5e3a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr91606.C @@ -0,0 +1,109 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fstrict-aliasing" } */ + +#include <cstdlib> +#include <array> +#include <type_traits> + +template <typename T1, typename T2> +struct variant +{ + constexpr variant(T1 arg) + : f1(arg), + index(0) + {} + + constexpr variant(T2 arg) + : f2(arg), + index(1) + {} + + union + { + T1 f1; + T2 f2; + }; + std::size_t index = 0; +}; + +template <typename T1, typename T2> +constexpr const T1* get_if(const variant<T1, T2>* v) +{ + if (v->index != 0) + { + return nullptr; + } + return &v->f1; +} + +template <typename T2, typename T1> +constexpr const T2* get_if(const variant<T1, T2>* v) +{ + if (v->index != 1) + { + return nullptr; + } + return &v->f2; +} + +template <typename T, size_t N> +struct my_array +{ + constexpr const T* begin() const + { + return data; + } + + constexpr const T* end() const + { + return data + N; + } + + T data[N]; +}; + +template <typename ...Ts> +constexpr auto get_array_of_variants(Ts ...ptrs) +{ + return std::array<variant<std::decay_t<Ts>...>, sizeof...(Ts)>{ ptrs... }; +} + +template <typename T> +constexpr auto get_member_functions(); + +template <typename Member, typename Class> +constexpr int getFuncId(Member (Class::*memFuncPtr)) +{ + int idx = 0u; + for (auto &anyFunc : get_member_functions<Class>()) + { + if (auto *specificFunc = get_if<Member (Class::*)>(&anyFunc)) + { + if (*specificFunc == memFuncPtr) + { + return idx; + } + } + ++idx; + } + std::abort(); +} + +struct MyStruct +{ + void fun1(int /*a*/) {} + + int fun2(char /*b*/, short /*c*/, bool /*d*/) { return 0; } + +}; + +template <> +constexpr auto get_member_functions<MyStruct>() +{ + return get_array_of_variants(&MyStruct::fun1, &MyStruct::fun2); +} + +int main() +{ + return getFuncId(&MyStruct::fun1); +} diff --git a/gcc/testsuite/g++.dg/torture/pr92384.C b/gcc/testsuite/g++.dg/torture/pr92384.C new file mode 100644 index 00000000000..049a45a0154 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr92384.C @@ -0,0 +1,38 @@ +// PR c++/92384 +// { dg-do run } + +struct S {}; +struct T : public S { S a, b, c, d, e, f, g, h, i, j, k, l, m; }; +struct U { long long a, b, c; }; + +U +foo (S, S, S, T, T, T, U g) +{ + return g; +} + +__attribute__((noipa)) bool +bar (S a, S b, S c, T d, T e, T f, U g, void **h) +{ + h[0] = (void *) &a; + h[1] = (void *) &b; + h[2] = (void *) &c; + h[3] = (void *) &d; + h[4] = (void *) &e; + h[5] = (void *) &f; + h[6] = (void *) &g; + asm volatile ("" : : "r" (h) : "memory"); + return (h[0] != h[1] && h[1] != h[2] && h[2] != h[3] + && h[3] != h[4] && h[4] != h[5] && h[5] != h[6]); +} + +int +main () +{ + S a; + T b; + U c = { 1, 2, 3 }; + void *d[7]; + if (!bar (a, a, a, b, b, b, c, d)) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20191108-1.c b/gcc/testsuite/gcc.c-torture/compile/20191108-1.c new file mode 100644 index 00000000000..7929751bb06 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20191108-1.c @@ -0,0 +1,14 @@ +/* PR target/92095 */ +/* Testcase by Sergei Trofimovich <slyfox@inbox.ru> */ + +typedef union { + double a; + int b[2]; +} c; + +double d(int e) +{ + c f; + (&f)->b[0] = 15728640; + return e ? -(&f)->a : (&f)->a; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr90840.c b/gcc/testsuite/gcc.c-torture/compile/pr90840.c new file mode 100644 index 00000000000..94a6f3f4baf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr90840.c @@ -0,0 +1,19 @@ +/* PR middle-end/90840 */ +struct S { long long a; int b; }; +struct S foo (void); +struct __attribute__((packed)) T { long long a; char b; }; +struct T baz (void); + +void +bar (void) +{ + _Complex long double c; + *(struct S *) &c = foo (); +} + +void +qux (void) +{ + _Complex long double c; + *(struct T *) &c = baz (); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr91001.c b/gcc/testsuite/gcc.c-torture/compile/pr91001.c new file mode 100644 index 00000000000..4b6a017c860 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr91001.c @@ -0,0 +1,31 @@ +/* PR middle-end/91001 */ +/* PR middle-end/91105 */ +/* PR middle-end/91106 */ + +struct __attribute__((packed)) S { short b; char c; }; +struct T { short b, c, d; }; +struct __attribute__((packed)) R { int b; char c; }; +union __attribute__((aligned(128), transparent_union)) U { struct S c; } u; +union __attribute__((aligned(32), transparent_union)) V { struct T c; } v; +union __attribute__((aligned(32), transparent_union)) W { struct R c; } w; +void foo (union U); +void bar (union V); +void baz (union W); + +void +qux (void) +{ + foo (u); +} + +void +quux (void) +{ + bar (v); +} + +void +corge (void) +{ + baz (w); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr92056.c b/gcc/testsuite/gcc.c-torture/compile/pr92056.c new file mode 100644 index 00000000000..d04da763e15 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr92056.c @@ -0,0 +1,18 @@ +/* PR tree-optimization/92056 */ + +const char *d; + +void +foo (int c, char *e, const char *a, const char *b) +{ + switch (c) + { + case 33: + for (;; d++) + if (__builtin_strcmp (b ? : "", d)) + return; + break; + case 4: + __builtin_sprintf (e, a); + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr92231.c b/gcc/testsuite/gcc.c-torture/compile/pr92231.c new file mode 100644 index 00000000000..1813add63c6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr92231.c @@ -0,0 +1,9 @@ +/* PR middle-end/92231 */ + +extern int bar (void); + +int +foo (void) +{ + return (&bar + 4096) (); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20190901-1.c b/gcc/testsuite/gcc.c-torture/execute/20190901-1.c new file mode 100644 index 00000000000..c78715ef2c1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20190901-1.c @@ -0,0 +1,36 @@ +/* PR target/91472 */ +/* Reported by John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> */ + +typedef unsigned int gmp_uint_least32_t; + +union ieee_double_extract +{ + struct + { + gmp_uint_least32_t sig:1; + gmp_uint_least32_t exp:11; + gmp_uint_least32_t manh:20; + gmp_uint_least32_t manl:32; + } s; + double d; +}; + +double __attribute__((noipa)) +tests_infinity_d (void) +{ + union ieee_double_extract x; + x.s.exp = 2047; + x.s.manl = 0; + x.s.manh = 0; + x.s.sig = 0; + return x.d; +} + +int +main (void) +{ + double x = tests_infinity_d (); + if (x == 0.0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20191023-1.c b/gcc/testsuite/gcc.c-torture/execute/20191023-1.c new file mode 100644 index 00000000000..3811ebca151 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20191023-1.c @@ -0,0 +1,73 @@ +/* PR tree-optimization/92131 */ +/* Testcase by Armin Rigo <arigo@tunes.org> */ + +long b, c, d, e, f, i; +char g, h, j, k; +int *aa; + +static void error (void) __attribute__((noipa)); +static void error (void) { __builtin_abort(); } + +static void see_me_here (void) __attribute__((noipa)); +static void see_me_here (void) {} + +static void aaa (void) __attribute__((noipa)); +static void aaa (void) {} + +static void a (void) __attribute__((noipa)); +static void a (void) { + long am, ao; + if (aa == 0) { + aaa(); + if (j) + goto ay; + } + return; +ay: + aaa(); + if (k) { + aaa(); + goto az; + } + return; +az: + if (i) + if (g) + if (h) + if (e) + goto bd; + return; +bd: + am = 0; + while (am < e) { + switch (c) { + case 8: + goto bh; + case 4: + return; + } + bh: + if (am >= 0) + b = -am; + ao = am + b; + f = ao & 7; + if (f == 0) + see_me_here(); + if (ao >= 0) + am++; + else + error(); + } +} + +int main (void) +{ + j++; + k++; + i++; + g++; + h++; + e = 1; + a(); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr91450-1.c b/gcc/testsuite/gcc.c-torture/execute/pr91450-1.c new file mode 100644 index 00000000000..9aafc5f791a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr91450-1.c @@ -0,0 +1,88 @@ +/* PR middle-end/91450 */ + +__attribute__((noipa)) unsigned long long +foo (int a, int b) +{ + unsigned long long r; + if (!__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + return r; +} + +__attribute__((noipa)) unsigned long long +bar (int a, int b) +{ + unsigned long long r; + if (a >= 0) + return 0; + if (!__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + return r; +} + +__attribute__((noipa)) unsigned long long +baz (int a, int b) +{ + unsigned long long r; + if (b >= 0) + return 0; + if (!__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + return r; +} + +__attribute__((noipa)) unsigned long long +qux (int a, int b) +{ + unsigned long long r; + if (a >= 0) + return 0; + if (b < 0) + return 0; + if (!__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + return r; +} + +__attribute__((noipa)) unsigned long long +quux (int a, int b) +{ + unsigned long long r; + if (a < 0) + return 0; + if (b >= 0) + return 0; + if (!__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + return r; +} + +int +main () +{ + if (foo (-4, 2) != -8ULL) + __builtin_abort (); + if (foo (2, -4) != -8ULL) + __builtin_abort (); + if (bar (-4, 2) != -8ULL) + __builtin_abort (); + if (baz (2, -4) != -8ULL) + __builtin_abort (); + if (qux (-4, 2) != -8ULL) + __builtin_abort (); + if (quux (2, -4) != -8ULL) + __builtin_abort (); + if (foo (-2, 1) != -2ULL) + __builtin_abort (); + if (foo (1, -2) != -2ULL) + __builtin_abort (); + if (bar (-2, 1) != -2ULL) + __builtin_abort (); + if (baz (1, -2) != -2ULL) + __builtin_abort (); + if (qux (-2, 1) != -2ULL) + __builtin_abort (); + if (quux (1, -2) != -2ULL) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr91450-2.c b/gcc/testsuite/gcc.c-torture/execute/pr91450-2.c new file mode 100644 index 00000000000..bfaabbb5ac6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr91450-2.c @@ -0,0 +1,76 @@ +/* PR middle-end/91450 */ + +__attribute__((noipa)) void +foo (int a, int b) +{ + unsigned long long r; + if (__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + if (r != 0) + __builtin_abort (); +} + +__attribute__((noipa)) void +bar (int a, int b) +{ + unsigned long long r; + if (a >= 0) + return; + if (__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + if (r != 0) + __builtin_abort (); +} + +__attribute__((noipa)) void +baz (int a, int b) +{ + unsigned long long r; + if (b >= 0) + return; + if (__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + if (r != 0) + __builtin_abort (); +} + +__attribute__((noipa)) void +qux (int a, int b) +{ + unsigned long long r; + if (a >= 0) + return; + if (b < 0) + return; + if (__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + if (r != 0) + __builtin_abort (); +} + +__attribute__((noipa)) void +quux (int a, int b) +{ + unsigned long long r; + if (a < 0) + return; + if (b >= 0) + return; + if (__builtin_mul_overflow (a, b, &r)) + __builtin_abort (); + if (r != 0) + __builtin_abort (); +} + +int +main () +{ + foo (-4, 0); + foo (0, -4); + foo (0, 0); + bar (-4, 0); + baz (0, -4); + qux (-4, 0); + quux (0, -4); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr91597.c b/gcc/testsuite/gcc.c-torture/execute/pr91597.c new file mode 100644 index 00000000000..6a917cb58af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr91597.c @@ -0,0 +1,48 @@ +/* PR tree-optimization/91597 */ + +enum E { A, B, C }; +struct __attribute__((aligned (4))) S { enum E e; }; + +enum E +foo (struct S *o) +{ + if (((__UINTPTR_TYPE__) (o) & 1) == 0) + return o->e; + else + return A; +} + +int +bar (struct S *o) +{ + return foo (o) == B || foo (o) == C; +} + +static inline void +baz (struct S *o, int d) +{ + if (__builtin_expect (!bar (o), 0)) + __builtin_abort (); + if (d > 2) return; + baz (o, d + 1); +} + +void +qux (struct S *o) +{ + switch (o->e) + { + case A: return; + case B: baz (o, 0); break; + case C: baz (o, 0); break; + } +} + +struct S s = { C }; + +int +main () +{ + qux (&s); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr91632.c b/gcc/testsuite/gcc.c-torture/execute/pr91632.c new file mode 100644 index 00000000000..c16c3da4efd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr91632.c @@ -0,0 +1,30 @@ +/* PR tree-optimization/91632 */ +/* { dg-additional-options "-fwrapv" } */ + +static int +__attribute__((noipa)) +foo (char x) +{ + switch (x) + { + case '"': + case '<': + case '>': + case '\\': + case '^': + case '`': + case '{': + case '|': + case '}': + return 0; + } + return 1; +} + +int +main () +{ + if (foo ('h') == 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr91635.c b/gcc/testsuite/gcc.c-torture/execute/pr91635.c new file mode 100644 index 00000000000..878a491fc36 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr91635.c @@ -0,0 +1,57 @@ +/* PR target/91635 */ + +#if __CHAR_BIT__ == 8 && __SIZEOF_SHORT__ == 2 \ + && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 +unsigned short b, c; +int u, v, w, x; + +__attribute__ ((noipa)) int +foo (unsigned short c) +{ + c <<= __builtin_add_overflow (-c, -1, &b); + c >>= 1; + return c; +} + +__attribute__ ((noipa)) int +bar (unsigned short b) +{ + b <<= -14 & 15; + b = b >> -~1; + return b; +} + +__attribute__ ((noipa)) int +baz (unsigned short e) +{ + e <<= 1; + e >>= __builtin_add_overflow (8719476735, u, &v); + return e; +} + +__attribute__ ((noipa)) int +qux (unsigned int e) +{ + c = ~1; + c *= e; + c = c >> (-15 & 5); + return c + w + x; +} +#endif + +int +main () +{ +#if __CHAR_BIT__ == 8 && __SIZEOF_SHORT__ == 2 \ + && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 + if (foo (0xffff) != 0x7fff) + __builtin_abort (); + if (bar (5) != 5) + __builtin_abort (); + if (baz (~0) != 0x7fff) + __builtin_abort (); + if (qux (2) != 0x7ffe) + __builtin_abort (); +#endif + return 0; +} diff --git a/gcc/testsuite/gcc.dg/Wnonnull.c b/gcc/testsuite/gcc.dg/Wnonnull.c index be89a5a755c..0ed06aabe68 100644 --- a/gcc/testsuite/gcc.dg/Wnonnull.c +++ b/gcc/testsuite/gcc.dg/Wnonnull.c @@ -2,7 +2,10 @@ { dg-do compile } { dg-options "-O2 -Wall" } */ -#include <string.h> +extern __SIZE_TYPE__ strlen (const char *__s) + __attribute ((pure)) __attribute ((nonnull (1))); +extern void *memcpy (void *__restrict __dest, const void *__restrict __src, + __SIZE_TYPE__ __n) __attribute ((nonnull (1, 2))); char buf[100]; @@ -14,9 +17,9 @@ struct Test __attribute ((nonnull (1, 2))) inline char* -my_strcpy (char *restrict dst, const char *restrict src, size_t size) +my_strcpy (char *restrict dst, const char *restrict src, __SIZE_TYPE__ size) { - size_t len = strlen (src); /* { dg-warning "argument 1 null where non-null expected" } */ + __SIZE_TYPE__ len = strlen (src); /* { dg-warning "argument 1 null where non-null expected" } */ if (len < size) memcpy (dst, src, len + 1); /* { dg-warning "argument 2 null where non-null expected" } */ else diff --git a/gcc/testsuite/gcc.dg/gomp/pr90637.c b/gcc/testsuite/gcc.dg/gomp/pr90637.c new file mode 100644 index 00000000000..983e03e7574 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr90637.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/90637 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp -O1 --param sink-frequency-threshold=90" } */ + +int v; + +void +foo (int c) +{ + int i; +#pragma omp for simd if (c) lastprivate (v) schedule (static, 16) + for (i = 0; i < 64; ++i) + v = i; +} diff --git a/gcc/testsuite/gcc.dg/pr89435.c b/gcc/testsuite/gcc.dg/pr89435.c new file mode 100644 index 00000000000..d72d087f5ce --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr89435.c @@ -0,0 +1,21 @@ +/* PR rtl-optimization/89435 */ +/* { dg-do run } */ +/* { dg-options "-O1 -fno-forward-propagate -fno-tree-forwprop -fno-tree-ccp" } */ + +unsigned short a; +unsigned int b, c, d, e, f; + +int +main () +{ +#if __CHAR_BIT__ == 8 && __SIZEOF_INT__ == 4 + unsigned char g = e = __builtin_mul_overflow_p (5, 542624702, 0); + d = __builtin_bswap64 (a); + b = __builtin_sub_overflow ((unsigned char) -e, (unsigned int) d, &g); + e = __builtin_mul_overflow (b, c, &a); + f = g + e; + if (f != 0xff) + __builtin_abort (); +#endif + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr89795.c b/gcc/testsuite/gcc.dg/pr89795.c new file mode 100644 index 00000000000..4ceaa433f3c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr89795.c @@ -0,0 +1,25 @@ +/* PR rtl-optimization/89795 */ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-dce -fno-forward-propagate -fno-sched-pressure" } */ + +unsigned char a; +unsigned b, c, d; + +int +main () +{ +#if __CHAR_BIT__ == 8 + unsigned x; + int e, f; + unsigned char g; + e = __builtin_bswap32 (a); + f = __builtin_ffs (~(unsigned short) e); + a = __builtin_mul_overflow ((unsigned char) 0xf7, f, &g); + a |= __builtin_sub_overflow_p (c, 0, (unsigned char) 0); + d = g + b; + x = d; + if (x != 0xf7) + __builtin_abort (); +#endif + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr90898.c b/gcc/testsuite/gcc.dg/pr90898.c new file mode 100644 index 00000000000..e992ea34cd9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr90898.c @@ -0,0 +1,16 @@ +/* PR c/90898 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +void *p; +int bar (void); +void baz (int *); + +void +foo (void) +{ + p = __builtin_stack_save (); + int a[(bar (), 2)]; + baz (a); + __builtin_stack_restore (p); +} diff --git a/gcc/testsuite/gcc.dg/pr91269.c b/gcc/testsuite/gcc.dg/pr91269.c new file mode 100644 index 00000000000..8c03ba8dab2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr91269.c @@ -0,0 +1,70 @@ +/* PR target/91269 */ +/* Testcase by Sergei Trofimovich <slyfox@inbox.ru> */ + +/* { dg-do assemble } */ +/* { dg-options "-O2 -Wno-int-conversion" } */ +/* { dg-additional-options "-fcall-used-g6 -fPIE -mcpu=niagara4" { target sparc*-*-* } } */ + +struct m; + +enum { a = 2 }; +int b[1]; +int d[2715]; +int e, f, h; +enum { i = 2 } j; +inline int c(int k) { + char *cp; + if (k >= 62 && k <= 247) + cp = b[k]; + if (cp) + return 65533; + return 2; +} +inline int g(int k) { + if (k < sizeof(d)) + return e; + return 0; +} + +int u(struct m*, char*, char*); + +int l(struct m *k, char n, long o, int *p) { + int q, flags = j, r, s, lasttwo = *p; + char inptr, outptr; + while (inptr) { + if (__builtin_expect(h, 0)) + break; + unsigned ch = inptr; + if (lasttwo) { + long need = lasttwo >> 3; + if (__builtin_expect(need > n, 0)) + break; + } else if (s == i) { + long t = c(ch); + if (t != 65533) { + int jch = g(ch); + if (jch & 8) + continue; + } + } + if (ch <= 5) + ; + else { + long t = c(ch); + if (t != 65533) + ; + else { + switch (f >> 8) + case 79: + q = f == 20308 || f == 20350; + if (q) + if (j) + r = u(k, &inptr, &outptr); + s = *p; + if (r) + if (o && flags & a) + break; + } + } + } +} diff --git a/gcc/testsuite/gcc.dg/pr91720.c b/gcc/testsuite/gcc.dg/pr91720.c new file mode 100644 index 00000000000..4abdace94da --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr91720.c @@ -0,0 +1,22 @@ +/* PR rtl-optimization/91720 */ +/* { dg-do run } */ +/* { dg-options "-Og -fno-forward-propagate -frerun-cse-after-loop -fno-tree-fre" } */ + +unsigned a, b; + +int +main () +{ +#if __CHAR_BIT__ == 8 + unsigned c = 1; + unsigned long long d = 0; + unsigned char e = 0; + e = __builtin_sub_overflow (d, e, &a) ? 0 : 0x80; + e = e << 7 | e >> c; + __builtin_memmove (&d, &a, 2); + b = e; + if (b != 0x40) + __builtin_abort (); +#endif + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr91734.c b/gcc/testsuite/gcc.dg/pr91734.c new file mode 100644 index 00000000000..1cc3e40ccbc --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr91734.c @@ -0,0 +1,97 @@ +/* PR tree-optimization/91734 */ +/* { dg-do run } */ +/* { dg-add-options ieee } */ +/* { dg-additional-options "-O2 -std=gnu99" } */ + +__attribute__((noipa, optimize ("Ofast"))) int +f1 (float x) +{ + return __builtin_sqrtf (x) < __FLT_MIN__; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f2 (float x) +{ + return __builtin_sqrtf (x) < 0x1.2dd3d0p-65f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f3 (float x) +{ + return __builtin_sqrtf (x) >= 0x1.2dd3d0p-65f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f4 (float x) +{ + return __builtin_sqrtf (x) >= 0x1.5642e6p+54f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f5 (float x) +{ + return __builtin_sqrtf (x) > 0x1.5642e6p+54f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f6 (float x) +{ + return __builtin_sqrtf (x) < 0x1.4da1cp-19f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f7 (float x) +{ + return __builtin_sqrtf (x) <= 0x1.4da1cp-19f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f8 (float x) +{ + return __builtin_sqrtf (x) < 0x1.50cb62p-65f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f9 (float x) +{ + return __builtin_sqrtf (x) <= 0x1.4fc00cp-73f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f10 (float x) +{ + return __builtin_sqrtf (x) < 0x1.001002p+0f; +} + +int +main () +{ + if (__FLT_RADIX__ != 2 + || __FLT_MANT_DIG__ != 24 + || __FLT_MIN_EXP__ != -125 + || __FLT_MAX_EXP__ != 128 + || __FLT_HAS_DENORM__ != 1 + || __FLT_HAS_INFINITY__ != 1) + return 0; + if (!f1 (0.0f) || f1 (0x1.0p-149f)) + __builtin_abort (); + if (!f2 (0x1.63dbc0p-130f)) + __builtin_abort (); + if (f3 (0x1.63dbc0p-130f)) + __builtin_abort (); + if (!f4 (0x1.c996d0p+108f) || !f4 (0x1.c996cep+108f) || f4 (0x1.c996ccp+108f)) + __builtin_abort (); + if (f5 (0x1.c996d0p+108f) || f5 (0x1.c996d2p+108f) || !f5 (0x1.c996d4p+108f)) + __builtin_abort (); + if (!f6 (0x1.b2ce3p-38f) || f6 (0x1.b2ce32p-38f) || f6 (0x1.b2ce34p-38f)) + __builtin_abort (); + if (!f7 (0x1.b2ce3p-38f) || !f7 (0x1.b2ce34p-38f) || !f7 (0x1.b2ce36p-38f) || f7 (0x1.b2ce38p-38f)) + __builtin_abort (); + if (!f8 (0x1.bb166p-130f) || !f8 (0x1.bb168p-130f) || f8 (0x1.bb16ap-130f) || f8 (0x1.bb16cp-130f)) + __builtin_abort (); + if (!f9 (0x1.8p-146f) || !f9 (0x1.ap-146f) || f9 (0x1.cp-146f) || f9 (0x1.ep-146f)) + __builtin_abort (); + if (f10 (0x1.002004p+0f)) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr91885.c b/gcc/testsuite/gcc.dg/pr91885.c new file mode 100644 index 00000000000..35be32be559 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr91885.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fprofile-generate" } */ +/* { dg-require-profiling "-fprofile-generate" } */ + +typedef signed long long int __int64_t; +typedef unsigned long long int __uint64_t; +typedef __int64_t int64_t; +typedef __uint64_t uint64_t; +inline void +BLI_endian_switch_int64 (int64_t *val) +{ + uint64_t tval = *val; + *val = ((tval >> 56)) | ((tval << 40) & 0x00ff000000000000ll) + | ((tval << 24) & 0x0000ff0000000000ll) + | ((tval << 8) & 0x000000ff00000000ll) + | ((tval >> 8) & 0x00000000ff000000ll) + | ((tval >> 24) & 0x0000000000ff0000ll) + | ((tval >> 40) & 0x000000000000ff00ll) | ((tval << 56)); +} +typedef struct anim_index_entry +{ + unsigned long long seek_pos_dts; + unsigned long long pts; +} anim_index_entry; +extern struct anim_index_entry * +MEM_callocN (int); +struct anim_index +{ + int num_entries; + struct anim_index_entry *entries; +}; +struct anim_index * +IMB_indexer_open (const char *name) +{ + char header[13]; + struct anim_index *idx; + int i; + idx->entries = MEM_callocN (8); + if (((1 == 0) != (header[8] == 'V'))) + { + for (i = 0; i < idx->num_entries; i++) + { + BLI_endian_switch_int64 ((int64_t *) &idx->entries[i].seek_pos_dts); + BLI_endian_switch_int64 ((int64_t *) &idx->entries[i].pts); + } + } +} diff --git a/gcc/testsuite/gcc.dg/pr92430.c b/gcc/testsuite/gcc.dg/pr92430.c new file mode 100644 index 00000000000..915606893ba --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr92430.c @@ -0,0 +1,25 @@ +// PR rtl-optimization/92430 +// { dg-do compile } +// { dg-options "-Os -fno-if-conversion -fno-tree-dce -fno-tree-loop-optimize -fno-tree-vrp" } + +int eb, ko; + +void +e9 (int pe, int lx) +{ + int ir; + + for (ir = 0; ir < 1; ++ir) + { + for (ko = 0; ko < 1; ++ko) + { + for (eb = 0; eb < 1; ++eb) + ko += pe; + + for (ko = 0; ko < 1; ++ko) + ; + } + + pe = ir = lx; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr90278.c b/gcc/testsuite/gcc.dg/torture/pr90278.c new file mode 100644 index 00000000000..617246a6d4c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr90278.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fexceptions -fnon-call-exceptions" } */ + +double +hc (void) +{ + double dp = 0.0; + double ek[1]; + + ek[0] = 1.0 / dp < 0.0; + + return ek[0]; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr91812.c b/gcc/testsuite/gcc.dg/torture/pr91812.c new file mode 100644 index 00000000000..ebc67a01e33 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr91812.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ +/* { dg-options "-fdump-tree-optimized-blocks" } */ + +unsigned register1; +unsigned register2; + +void busy_wait_for_register (int x) +{ + volatile unsigned* ptr; + switch(x) { + case 0x1111: + ptr = ®ister1; + break; + + case 0x2222: + ptr = ®ister2; + break; + + default: + return; + } + while (*ptr) {} +} + +/* { dg-final { scan-tree-dump "loop depth 1" "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c index 650e73a5ee8..dd1c0ac3eba 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c @@ -1,6 +1,10 @@ /* { dg-do run { target vect_cmdline_needed } } */ /* { dg-options "-O2 -ftree-vectorize -fwrapv -fdump-tree-vect-details -fvect-cost-model=dynamic" } */ -/* { dg-options "-O2 -ftree-vectorize -fwrapv -fdump-tree-vect-details -fvect-cost-model=dynamic -mno-sse" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */ +/* The IBM Z backend sets the min-vect-loop-bound param to 2 to avoid + awkward epilogue code generation in some cases. This line needs to + be removed after finding an alternate way to fix this. */ +/* { dg-additional-options "--param min-vect-loop-bound=0" { target { s390*-*-* } } } */ #include <stdlib.h> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c index 8e5f1410612..b0933831ca6 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c @@ -30,5 +30,6 @@ int main () /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! avr-*-* } } } } */ +/* IBM Z does not require special alignment for vectorization. */ +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c index ce97e0970b5..e35b41d03b1 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c @@ -38,5 +38,6 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! avr-*-* } } } } */ +/* IBM Z does not require special alignment for vectorization. */ +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c index 8fce4385d0b..2ec698968a9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c @@ -1,6 +1,10 @@ /* { dg-do run { target vect_cmdline_needed } } */ /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -fno-vect-cost-model" } */ /* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */ +/* The IBM Z backend sets the min-vect-loop-bound param to 2 to avoid + awkward epilogue code generation in some cases. This line needs to + be removed after finding an alternate way to fix this. */ +/* { dg-additional-options "--param min-vect-loop-bound=0" { target { s390*-*-* } } } */ #include <stdlib.h> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c index 4503cd74009..c320d1cb71b 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 --param tree-reassoc-width=2 -fdump-tree-reassoc1" } */ +/* { dg-options "-O2 --param tree-reassoc-width=2 -fdump-tree-reassoc2" } */ unsigned int foo (void) @@ -21,4 +21,4 @@ foo (void) /* Verify there are two pairs of __asm__ statements with no intervening stmts. */ -/* { dg-final { scan-tree-dump-times "__asm__\[^;\n]*;\n *__asm__" 2 "reassoc1"} } */ +/* { dg-final { scan-tree-dump-times "__asm__\[^;\n]*;\n *__asm__" 2 "reassoc2"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c index 553736bc391..dbb02683778 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 --param tree-reassoc-width=3 -fdump-tree-reassoc1-details" } */ +/* { dg-options "-O2 --param tree-reassoc-width=3 -fdump-tree-reassoc2-details" } */ unsigned int foo (int a, int b, int c, int d) @@ -15,4 +15,4 @@ foo (int a, int b, int c, int d) } /* Verify reassociation width was chosen to be 2. */ -/* { dg-final { scan-tree-dump-times "Width = 2" 1 "reassoc1"} } */ +/* { dg-final { scan-tree-dump-times "Width = 2" 1 "reassoc2"} } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr91665.c b/gcc/testsuite/gcc.dg/vect/pr91665.c new file mode 100644 index 00000000000..6b69ea030b1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr91665.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/91665 */ +/* { dg-do compile } */ +/* { dg-additional-options "-Ofast" } */ + +short int v; + +void +foo (short int x, short int y) +{ + short int *p = &v; + + x = 1; + while (x != 0) + x += ++y || (*p = x); +} diff --git a/gcc/testsuite/gcc.dg/vect/vect-fma-3.c b/gcc/testsuite/gcc.dg/vect/vect-fma-3.c new file mode 100644 index 00000000000..b231a328fa5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-fma-3.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/91723 */ +/* { dg-do compile { target { scalar_all_fma || { i?86-*-* x86_64-*-* } } } } */ +/* { dg-additional-options "-mfma" { target { i?86-*-* x86_64-*-* } } } */ + +void +foo (double *restrict r, const double *restrict a, + const double *restrict b, const double *restrict c) +{ + for (int i = 0; i < 1024; i++) + { + double x = __builtin_fma (a[i], b[i], c[i]); + x = __builtin_fma (a[i], b[i], x); + r[i] = x; + } +} + +/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target vect_double } } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c b/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c new file mode 100644 index 00000000000..ca772cb999e --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-options "-O3 -fno-math-errno -fno-fp-int-builtin-inexact" } */ + +#define TEST(name, float_type, int_type, fn) void f_##name (float_type x) \ +{ \ + volatile int_type b = __builtin_##fn (x); \ +} + +TEST (dld, double, long, lrint) +TEST (flf, float , long, lrintf) + +TEST (did, double, int, lrint) +TEST (fif, float , int, lrintf) + +/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\]+, \[d,s\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler-times "bl\tlrint" 2 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c b/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c new file mode 100644 index 00000000000..da5975ad165 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c @@ -0,0 +1,15 @@ +/* Check that storing the 64-bit immediate to a volatile location is done + with a single store. */ + +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef unsigned long long u64; + +void bar (u64 *x) +{ + *(volatile u64 *)x = 0xabcdef10abcdef10ULL; +} + +/* { dg-final { scan-assembler-times "str\tx..?, .*" 1 } } */ +/* { dg-final { scan-assembler-not "str\tw..?, .*" } } */ diff --git a/gcc/testsuite/gcc.target/arc/delay-slot-limm.c b/gcc/testsuite/gcc.target/arc/delay-slot-limm.c new file mode 100644 index 00000000000..e5de3c4badd --- /dev/null +++ b/gcc/testsuite/gcc.target/arc/delay-slot-limm.c @@ -0,0 +1,52 @@ +/* We have encountered an issue that a "mov_s.ne" instruction * + * with an immediate value was put in the delay slot of a * + * branch: * + * * + * bne.d @.L1 # 33 [c=20 l=4] *branch_insn * + * mov_s.ne r0,7 # 35 [c=0 l=6] *movsi_ne/2 * + * * + * This is not sanctioned and must not happen. The test below * + * is a reduced version of the source code leading to the * + * problem. */ + +/* { dg-do compile } */ +/* { dg-skip-if "" { ! { clmcpu } } } */ +/* { dg-options "-mcpu=archs -Og" } */ +typedef struct +{ + struct + { + int length; + } table; +} room; + +struct house +{ + room *r; +}; + +int glob; + +_Bool bar(); + +int func(struct house *h, int i, int whatever) +{ + for (;;) + { + _Bool a; + if (h && h->r[i].table.length == glob) + { + if (whatever) + { + a = bar(); + if (__builtin_expect(!a, 0)) + return 7; + } + break; + } + } + return 0; +} + +/* no 'mov_s.ne r,limm' in a delay slot */ +/* { dg-final { scan-assembler-not "bne.d\.*\n\\s\+mov_s.ne\\s+r\[0-9\]+,7" } } */ diff --git a/gcc/testsuite/gcc.target/arc/pic-2.c b/gcc/testsuite/gcc.target/arc/pic-2.c new file mode 100644 index 00000000000..4b0e17126e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/arc/pic-2.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-skip-if "PIC not available for ARC6xx" { arc6xx } } */ +/* { dg-options "-mno-sdata -O2 -fpic -fno-builtin" } */ + +/* Check if we resolve correctly complex PIC addresses. */ + +char *foo (unsigned size) +{ + static char buf[32]; + register int i; + + if (size > 31) + size = 31; + + for (i = 0; i < size; i++) + { + buf[i] = ' '; + } + buf[size] = '\0'; + return buf; +} + +/* { dg-final { scan-assembler "@buf.\[0-9\]\+@pcl-1" } } */ diff --git a/gcc/testsuite/gcc.target/arm/acle/crc_hf_1.c b/gcc/testsuite/gcc.target/arm/acle/crc_hf_1.c new file mode 100644 index 00000000000..e6cbfc0b33e --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/acle/crc_hf_1.c @@ -0,0 +1,14 @@ +/* Test that using an Armv8-a hard-float target doesn't + break CRC intrinsics. */ + +/* { dg-do compile } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-options "-mfloat-abi=hard -march=armv8-a+simd+crc" } */ + +#include <arm_acle.h> + +uint32_t +foo (uint32_t a, uint32_t b) +{ + return __crc32cw (a, b); +} diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp index d82306ed630..dcea829965e 100644 --- a/gcc/testsuite/gcc.target/arm/multilib.exp +++ b/gcc/testsuite/gcc.target/arm/multilib.exp @@ -753,6 +753,28 @@ if {[multilib_config "rmprofile"] } { {-march=armv8-m.main+fp.dp -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" {-march=armv8-m.main+fp+dsp -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" {-march=armv8-m.main+fp.dp+dsp -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" + {-march=armv7-r+fp -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+fp -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+fp+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+fp+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+vfpv3-d16-fp16 -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+vfpv3-d16-fp16 -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+vfpv3-d16-fp16+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+vfpv3-d16-fp16+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+fp.sp+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+fp.sp+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+vfpv3xd -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+vfpv3xd -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+vfpv3xd+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+vfpv3xd+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+vfpv3xd-fp16+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+vfpv3xd-fp16+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" } { check_multi_dir $opts $dir } diff --git a/gcc/testsuite/gcc.target/arm/pr88167-1.c b/gcc/testsuite/gcc.target/arm/pr88167-1.c new file mode 100644 index 00000000000..517a86d6e4b --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr88167-1.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_thumb1_ok } */ +/* { dg-options "-O2 -mthumb" } */ + +void *retaddr; + +void foo (void) { + retaddr = __builtin_return_address (0); + + /* Used for enforcing registers stacking. */ + asm volatile ("" : : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12"); +} + +/* { dg-final { scan-assembler-not "mov\tlr," } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr88167-2.c b/gcc/testsuite/gcc.target/arm/pr88167-2.c new file mode 100644 index 00000000000..6a303345eb9 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr88167-2.c @@ -0,0 +1,18 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-skip-if "" { ! { arm_thumb1 } } } */ + +int __attribute__((noclone, noinline)) +foo (int a, long long b) { + /* Used for enforcing registers stacking. */ + asm volatile ("" : : : "r0", "r1", "r2", "r3", + "r8", "r9", "r10", "r11", "r12"); + return (int) b; +} + +int main () +{ + if (foo (1, 0x1000000000000003LL) != 3) + __builtin_abort (); + __builtin_exit (0); +} diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c index 052d24dabdf..e2914a8333c 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c @@ -14,7 +14,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c index 2cfbd728b4b..d2b7c74b143 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c @@ -14,7 +14,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c index 59bb08613b7..129fb2125f0 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c @@ -15,7 +15,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c index 59640fab8f1..01996fb029f 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c @@ -15,7 +15,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c index 8620bf1d836..1493e18243b 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c @@ -17,7 +17,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c index 42e83416965..3ddd4980b69 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c @@ -15,7 +15,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c index 6a9c51337d9..43d5f95b4fb 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c @@ -17,7 +17,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler {\tpause} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c index 85ec57b5a8d..bf62636c63c 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c @@ -16,7 +16,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler {\tpause} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c index db1d8fb9979..27ba82932e4 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c @@ -17,7 +17,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c index 24fc43b3ba5..bdf15d36bac 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c @@ -16,7 +16,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c index 3dc02f80ff5..c30c331c23b 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c @@ -14,7 +14,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c index c4adae23dd3..7edd7313027 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c @@ -14,7 +14,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c index b800b40b055..8e391797c5e 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c @@ -15,7 +15,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c index f68902ddc25..6033d13e8a7 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c @@ -15,6 +15,6 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c index 7301490d49c..ef3577d2934 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c @@ -14,7 +14,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {\tpause} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c index ef1ba02978d..f26a5fb9015 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c @@ -14,7 +14,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {\tpause} } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c index 58de8f0393e..3b8a1eeaffb 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c @@ -15,7 +15,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {\tpause} 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c index 3be3ce07527..40d31803a2e 100644 --- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c +++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c @@ -15,7 +15,7 @@ male_indirect_jump (long offset) /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {\tpause} 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-2.c b/gcc/testsuite/gcc.target/i386/pr32219-2.c index cb587db47aa..b6212f7dd4c 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-2.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-2.c @@ -20,5 +20,5 @@ foo () /* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 defaults to PIC but common symbols need to be indirected. */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-3.c b/gcc/testsuite/gcc.target/i386/pr32219-3.c index f9cfca7d72c..a1b0df28d0d 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-3.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-3.c @@ -24,4 +24,4 @@ foo () /* For Darwin, we need PIC to allow PIE, but also we must indirect weak symbols so that they can be indirected. Again, dyld knows how to deal with this. */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-4.c b/gcc/testsuite/gcc.target/i386/pr32219-4.c index 0ac0674ae17..31d0710b7ed 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-4.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-4.c @@ -21,4 +21,4 @@ foo () /* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 equivalent (indirect and PIC). */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-7.c b/gcc/testsuite/gcc.target/i386/pr32219-7.c index 469e9e38b07..20fef8dd063 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-7.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-7.c @@ -23,4 +23,4 @@ foo () /* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 equivalent (indirect and PIC). */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr32219-8.c b/gcc/testsuite/gcc.target/i386/pr32219-8.c index 75eb287fc59..767928f049e 100644 --- a/gcc/testsuite/gcc.target/i386/pr32219-8.c +++ b/gcc/testsuite/gcc.target/i386/pr32219-8.c @@ -21,4 +21,4 @@ foo () /* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 default to PIC but needs indirection for the weak symbol. */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr87853.c b/gcc/testsuite/gcc.target/i386/pr87853.c new file mode 100644 index 00000000000..9a288879679 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr87853.c @@ -0,0 +1,20 @@ +/* PR target/87853 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -funsigned-char -msse2 -mno-sse3 -masm=att" } */ +/* { dg-final { scan-assembler-times "\tpcmpgtb\t%xmm" 2 } } */ +/* { dg-final { scan-assembler-not "\tpsubusb\t" } } */ +/* { dg-final { scan-assembler-not "\tpcmpeqb\t" } } */ + +#include <x86intrin.h> + +__m128i +foo (__m128i x, __m128i y) +{ + return _mm_cmpgt_epi8 (x, y); +} + +__m128i +bar (__m128i x, __m128i y) +{ + return _mm_cmplt_epi8 (x, y); +} diff --git a/gcc/testsuite/gcc.target/i386/pr90867.c b/gcc/testsuite/gcc.target/i386/pr90867.c new file mode 100644 index 00000000000..1ed96b582ed --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr90867.c @@ -0,0 +1,30 @@ +/* PR target/90867 */ +/* { dg-do run { target lp64 } } */ +/* { dg-options "-O2 -msse2" } */ + +unsigned long long freq = 3600000000UL; /* 3.6 GHz = 3600.0 MHz */ + +__attribute__((noipa)) void +bar (double x) +{ + static double d = 3600000000.0; + if (x != d) + __builtin_abort (); + d /= 1000.0; +} + +__attribute__ ((target ("arch=x86-64"))) int +foo () +{ + bar ((double) freq); + bar (1e-3 * freq); + bar (1e-6 * freq); + bar (1e-9 * freq); + return 0; +} + +int +main () +{ + return foo (); +} diff --git a/gcc/testsuite/gcc.target/i386/pr91623.c b/gcc/testsuite/gcc.target/i386/pr91623.c new file mode 100644 index 00000000000..94de4f91c6d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr91623.c @@ -0,0 +1,32 @@ +/* PR middle-end/91623 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse4.1 -mno-sse4.2" } */ + +typedef long long V __attribute__((__vector_size__(16))); +V e, h; +int d; +const int i; + +void foo (void); + +void +bar (int k, int l) +{ + if (d && 0 <= k - 1 && l) + foo (); +} + +void +baz (void) +{ + V n = (V) { 1 }; + V g = (V) {}; + V o = g; + for (int f = 0; f < i; ++f) + { + V a = o == n; + h = a; + bar (f, i); + o = e; + } +} diff --git a/gcc/testsuite/gcc.target/i386/pr91704.c b/gcc/testsuite/gcc.target/i386/pr91704.c new file mode 100644 index 00000000000..b996e24ad74 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr91704.c @@ -0,0 +1,14 @@ +/* PR target/91704 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -funsigned-char -mavx2 -mavx512f -masm=att" } */ +/* { dg-final { scan-assembler-times "\tvpcmpgtb\t%ymm" 1 } } */ +/* { dg-final { scan-assembler-not "\tvpsubusb\t" } } */ +/* { dg-final { scan-assembler-not "\tvpcmpeqb\t" } } */ + +#include <x86intrin.h> + +__m256i +foo (__m256i x, __m256i y) +{ + return _mm256_cmpgt_epi8 (x, y); +} diff --git a/gcc/testsuite/gcc.target/i386/pr92225.c b/gcc/testsuite/gcc.target/i386/pr92225.c new file mode 100644 index 00000000000..b1232195b45 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr92225.c @@ -0,0 +1,19 @@ +/* PR target/92225 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-vectorize -msse2 -mno-sse4" } */ + +void a (long); + +unsigned *b; + +void +c () +{ + long d = 2; + int e = 0; + + for (; e < 1024; e++) + if (b[e] > d) + d = b[e]; + a (d); +} diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c index 3eaddee8c34..881f541772c 100644 --- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c @@ -19,6 +19,6 @@ foo (void) /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c index 2793f72cdc1..5687440bf31 100644 --- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c @@ -19,6 +19,6 @@ foo (void) /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c index 63af6741e05..3d4497000dc 100644 --- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c +++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c @@ -17,7 +17,7 @@ foo (void) /* { dg-final { scan-assembler "_?__x86_return_thunk:" } } */ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {\tpause} 2 } } */ /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ diff --git a/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr1.c b/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr1.c new file mode 100644 index 00000000000..24c18262b1a --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr1.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */ +/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */ + +extern void foo (void*); + +extern void bar (void*); + +void +test (void* p) +{ + if (!p) + foo(p); + else + bar(p); +} + +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */ +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */ diff --git a/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr2.c b/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr2.c new file mode 100644 index 00000000000..9fd75c98773 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr2.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */ +/* { dg-additional-options "-fno-inline -fipa-ra -mcompact-branches=never" } */ +/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */ + +static int foo (void* p) { __asm__ (""::"r"(p):"$t0"); return 0; } + +static int bar (void* p) { return 1; } + +int +test (void* p) +{ + int res = !p ? foo(p) : bar(p); + + register int tmp __asm__("$t0") = -1; + __asm__ (""::"r"(tmp)); + + return res; +} + +/* { dg-final { scan-assembler "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */ +/* { dg-final { scan-assembler "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */ +/* { dg-final { scan-assembler-not "\\.set\tnomacro\n\tjalr\t\\\$25" } } */ diff --git a/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr3.c b/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr3.c new file mode 100644 index 00000000000..580c6ec069d --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr3.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */ +/* { dg-additional-options "-fno-inline -fipa-ra -mcompact-branches=never" } */ +/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */ + +static int foo (void* p) { return 0; } + +static int bar (void* p) { return 1; } + +int +test (void* p) +{ + int res = !p ? foo(p) : bar(p); + + register int tmp __asm__("$t0") = -1; + __asm__ (""::"r"(tmp)); + + return res; +} + +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */ +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */ +/* { dg-final { scan-assembler "\\.set\tnomacro\n\tjalr\t\\\$25" } } */ diff --git a/gcc/testsuite/gcc.target/mips/pr91769.c b/gcc/testsuite/gcc.target/mips/pr91769.c new file mode 100644 index 00000000000..c9ad70d7f75 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/pr91769.c @@ -0,0 +1,19 @@ +/* PR target/91769 */ +/* { dg-do compile } */ +/* { dg-skip-if "naming registers makes this a code quality test" { *-*-* } { "-O0" "-g" } { "" } } */ +/* { dg-options "-EL -mgp32 -mhard-float" } */ + +NOCOMPRESSION double +foo (void) +{ + register double* pf __asm__ ("$a1"); + __asm__ __volatile__ ("":"=r"(pf)); + double f = *pf; + + if (f != f) + f = -f; + return f; +} + +/* { dg-final { scan-assembler-not "lw\t\\\$4,0\\(\\\$5\\)\n\tlw\t\\\$5,4\\(\\\$5\\)\n\tldc1\t\\\$.*,0\\(\\\$5\\)" } } */ +/* { dg-final { scan-assembler "lw\t\\\$4,0\\(\\\$5\\)\n\tlw\t\\\$5,4\\(\\\$5\\)\n\tmtc1\t\\\$4,\\\$.*\n\tmthc1\t\\\$5,\\\$.*" } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/darn-3.c b/gcc/testsuite/gcc.target/powerpc/darn-3.c new file mode 100644 index 00000000000..477901fde70 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/darn-3.c @@ -0,0 +1,16 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-aix* } } */ +/* { dg-options "-O2 -mdejagnu-cpu=power9" } */ + +static int darn32(void) { return __builtin_darn_32(); } + +int four(void) +{ + int sum = 0; + int i; + for (i = 0; i < 4; i++) + sum += darn32(); + return sum; +} + +/* { dg-final { scan-assembler-times {(?n)\mdarn .*,0\M} 4 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr70010-1.c b/gcc/testsuite/gcc.target/powerpc/pr70010-1.c new file mode 100644 index 00000000000..4b3abb7d8fe --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr70010-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -flto -mvsx" } */ +/* { dg-require-effective-target lto } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () /* { dg-error "inlining failed in call to .* target specific option mismatch" } */ +{ + c = a + b; +} + +int +main () +{ + foo (); /* { dg-message "called from here" } */ + c = a + b; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr70010-2.c b/gcc/testsuite/gcc.target/powerpc/pr70010-2.c new file mode 100644 index 00000000000..0c04c5390db --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr70010-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -flto -mno-vsx" } */ +/* { dg-require-effective-target lto } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () +{ + c = a + b; +} + +int +main () +{ + foo (); + c = a + b; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr70010-3.c b/gcc/testsuite/gcc.target/powerpc/pr70010-3.c new file mode 100644 index 00000000000..bca31875632 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr70010-3.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mno-vsx" } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () +{ + c = a + b; +} + +int +main () +{ + foo (); + c = a + b; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr70010-4.c b/gcc/testsuite/gcc.target/powerpc/pr70010-4.c new file mode 100644 index 00000000000..c575cff1b52 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr70010-4.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mvsx" } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () /* { dg-error "inlining failed in call to .* target specific option mismatch" } */ +{ + c = a + b; +} + +int +main () +{ + foo (); /* { dg-message "called from here" } */ + c = a + b; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr70010.c b/gcc/testsuite/gcc.target/powerpc/pr70010.c new file mode 100644 index 00000000000..679034fae43 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr70010.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -finline-functions -Wno-psabi -mvsx" } */ +/* { dg-final { scan-assembler {\mbl \.?vadd_no_vsx\M} } } */ + +typedef int vec_t __attribute__((vector_size(16))); + +static vec_t +__attribute__((__target__("no-vsx"))) +vadd_no_vsx (vec_t a, vec_t b) +{ + return a + b; +} + +vec_t +__attribute__((__target__("vsx"))) +call_vadd_no_vsx (vec_t x, vec_t y, vec_t z) +{ + return vadd_no_vsx (x, y) - z; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pr91275.c b/gcc/testsuite/gcc.target/powerpc/pr91275.c new file mode 100644 index 00000000000..cd461158af7 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr91275.c @@ -0,0 +1,26 @@ +/* Test that we generate vpmsumd correctly without a swap error. */ + +/* { dg-do run { target { p8vector_hw } } } */ +/* { dg-options "-O2 -std=gnu11" } */ + +#include <altivec.h> + +int main() { + + const unsigned long long r0l = 0x8e7dfceac070e3a0; + vector unsigned long long r0 = (vector unsigned long long) {r0l, 0}, v; + const vector unsigned long long pd + = (vector unsigned long long) {0xc2LLU << 56, 0}; + + v = __builtin_crypto_vpmsumd ((vector unsigned long long) {r0[0], 0}, pd); + +#if __LITTLE_ENDIAN__ + if (v[0] != 0x4000000000000000 || v[1] != 0x65bd7ab605a4a8ff) + __builtin_abort (); +#else + if (v[1] != 0x4000000000000000 || v[0] != 0x65bd7ab605a4a8ff) + __builtin_abort (); +#endif + + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/pure-builtin-redundant-load.c b/gcc/testsuite/gcc.target/powerpc/pure-builtin-redundant-load.c new file mode 100644 index 00000000000..16ab6abfc3b --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pure-builtin-redundant-load.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -fdump-tree-fre-all -mvsx" } */ + +/* Verify we remove a redundant load that occurs both before and after +we call a vector load builtin. +This testcase is introduced as we updated a number of our vector load +built-ins with the attribute of PURE instead of MEM, to indicate that +those builtins only read from memory, versus reading from and writing +to the same. +This means we can identify the redundant load instructions in an earlier +pass, and optimize them away. */ + +#include <altivec.h> + +vector signed short load_data; + +vector signed short foo() +{ + vector signed short r11,r12,r13; + r11 = load_data; + r12 = vec_xl (0, &load_data[0]); + r13 = load_data; + return (r11 + r12 + r13); +} + +vector signed short biz() +{ + vector signed short r21,r22,r23; + r21 = load_data; + r22 = vec_lvehx (0, &load_data[0]); + r23 = load_data; + return (r21 + r22 + r23); +} + +vector signed short bar() +{ + vector signed short r31,r32,r33; + r31 = load_data; + r32 = vec_lvx (0, &load_data[0]); + r33 = load_data; + return (r31 + r32 + r33); +} + +/* { dg-final { scan-tree-dump-times "Removing dead stmt r13_. = load_data;" 1 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Removing dead stmt r23_. = load_data;" 1 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Removing dead stmt r33_. = load_data;" 1 "fre1" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/shift-shift-4.c b/gcc/testsuite/gcc.target/riscv/shift-shift-4.c new file mode 100644 index 00000000000..72a45ee87ae --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/shift-shift-4.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32i -mabi=ilp32 -O2" } */ + +/* One zero-extend shift can be eliminated by modifying the constant in the + greater than test. Started working after modifying the splitter + lshrsi3_zero_extend_3+1 to use a temporary reg for the first split dest. */ +int +sub (int i) +{ + i &= 0x7fffffff; + return i > 0x7f800000; +} +/* { dg-final { scan-assembler-not "srli" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/shift-shift-5.c b/gcc/testsuite/gcc.target/riscv/shift-shift-5.c new file mode 100644 index 00000000000..5b2ae89a471 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/shift-shift-5.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O2" } */ + +/* Fails if lshrsi3_zero_extend_3+1 uses a temp reg which has no REG_DEST + note. */ +unsigned long +sub (long l) +{ + union u { + struct s { int a : 19; unsigned int b : 13; int x; } s; + long l; + } u; + u.l = l; + return u.s.b; +} +/* { dg-final { scan-assembler "srliw" } } */ diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp index 86f7e4398eb..ee94a806766 100644 --- a/gcc/testsuite/gcc.target/s390/s390.exp +++ b/gcc/testsuite/gcc.target/s390/s390.exp @@ -86,18 +86,22 @@ proc check_effective_target_s390_useable_hw { } { int main (void) { asm (".machinemode zarch" : : ); - #if __ARCH__ >= 11 - asm ("lcbb %%r2,0(%%r15),0" : : ); + #if __ARCH__ >= 13 + asm ("ncrk %%r2,%%r2,%%r2" : : : "r2"); + #elif __ARCH__ >= 12 + asm ("agh %%r2,0(%%r15)" : : : "r2"); + #elif __ARCH__ >= 11 + asm ("lochiz %%r2,42" : : : "r2"); #elif __ARCH__ >= 10 - asm ("risbgn %%r2,%%r2,0,0,0" : : ); + asm ("risbgn %%r2,%%r2,0,0,0" : : : "r2"); #elif __ARCH__ >= 9 - asm ("sgrk %%r2,%%r2,%%r2" : : ); + asm ("sgrk %%r2,%%r2,%%r2" : : : "r2"); #elif __ARCH__ >= 8 - asm ("rosbg %%r2,%%r2,0,0,0" : : ); + asm ("rosbg %%r2,%%r2,0,0,0" : : : "r2"); #elif __ARCH__ >= 7 - asm ("nilf %%r2,0" : : ); + asm ("nilf %%r2,0" : : : "r2"); #elif __ARCH__ >= 6 - asm ("lay %%r2,0(%%r15)" : : ); + asm ("lay %%r2,0(%%r15)" : : : "r2"); #elif __ARCH__ >= 5 asm ("tam" : : ); #endif @@ -107,8 +111,8 @@ proc check_effective_target_s390_useable_hw { } { asm ("etnd %0" : "=d" (nd)); } #endif - #ifdef __VX__ - asm ("vzero %%v0" : : ); + #if defined (__VX__) && defined (__zarch__) + asm ("vzero %%v0" : : : "v0"); #endif return 0; } diff --git a/gcc/testsuite/gcc.target/s390/sigfpe-eh.c b/gcc/testsuite/gcc.target/s390/sigfpe-eh.c new file mode 100644 index 00000000000..52b0bf39d9e --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/sigfpe-eh.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=z196 -O2 -fexceptions -fnon-call-exceptions" } */ + +extern float f (void); +extern float g (void); + +float h (float x, float y) +{ + return x < y ? f () : g (); +} diff --git a/gcc/testsuite/gcc.target/sparc/20161111-1.c b/gcc/testsuite/gcc.target/sparc/20161111-1.c index eda8b0a9f12..8195fec8990 100644 --- a/gcc/testsuite/gcc.target/sparc/20161111-1.c +++ b/gcc/testsuite/gcc.target/sparc/20161111-1.c @@ -14,4 +14,4 @@ unsigned char ee_isdigit2(unsigned int i) return retval; } -/* { dg-final { scan-assembler-not "and\t%" } } */ +/* { dg-final { scan-assembler-not "and\t%" { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/sparc/overflow-1.c b/gcc/testsuite/gcc.target/sparc/overflow-1.c index e3fa0d04573..75f69ba4f9d 100644 --- a/gcc/testsuite/gcc.target/sparc/overflow-1.c +++ b/gcc/testsuite/gcc.target/sparc/overflow-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -mcpu=v8" } */ +/* { dg-options "-O -fno-pie -mcpu=v8" } */ /* { dg-require-effective-target ilp32 } */ #include <stdbool.h> diff --git a/gcc/testsuite/gcc.target/sparc/overflow-2.c b/gcc/testsuite/gcc.target/sparc/overflow-2.c index 9e42bd214de..feb3f194828 100644 --- a/gcc/testsuite/gcc.target/sparc/overflow-2.c +++ b/gcc/testsuite/gcc.target/sparc/overflow-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -mcpu=v8" } */ +/* { dg-options "-O -fno-pie -mcpu=v8" } */ /* { dg-require-effective-target ilp32 } */ #include <stdbool.h> diff --git a/gcc/testsuite/gcc.target/sparc/overflow-3.c b/gcc/testsuite/gcc.target/sparc/overflow-3.c index 86dddfb09e6..52d6ab2b688 100644 --- a/gcc/testsuite/gcc.target/sparc/overflow-3.c +++ b/gcc/testsuite/gcc.target/sparc/overflow-3.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O" } */ +/* { dg-options "-O -fno-pie" } */ #include <stdbool.h> #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/sparc/overflow-4.c b/gcc/testsuite/gcc.target/sparc/overflow-4.c index 019feee335c..c6121b958c3 100644 --- a/gcc/testsuite/gcc.target/sparc/overflow-4.c +++ b/gcc/testsuite/gcc.target/sparc/overflow-4.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O -mno-vis3 -mno-vis4" } */ +/* { dg-options "-O -fno-pie -mno-vis3 -mno-vis4" } */ #include <stdbool.h> #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/sparc/overflow-5.c b/gcc/testsuite/gcc.target/sparc/overflow-5.c index 67d4ac38095..f00283f6e7b 100644 --- a/gcc/testsuite/gcc.target/sparc/overflow-5.c +++ b/gcc/testsuite/gcc.target/sparc/overflow-5.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O -mvis3" } */ +/* { dg-options "-O -fno-pie -mvis3" } */ #include <stdbool.h> #include <stdint.h> diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c index a6353c7cca6..a5714593c52 100644 --- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c @@ -1,6 +1,7 @@ /* Test F2008 18.5: ISO_Fortran_binding.h functions. */ #include "../../../libgfortran/ISO_Fortran_binding.h" +#include <assert.h> #include <stdio.h> #include <stdlib.h> #include <complex.h> @@ -33,13 +34,34 @@ int elemental_mult_c(CFI_cdesc_t * a_desc, CFI_cdesc_t * b_desc, || c_desc->rank != 2) return err; - for (idx[0] = 0; idx[0] < a_desc->dim[0].extent; idx[0]++) - for (idx[1] = 0; idx[1] < a_desc->dim[1].extent; idx[1]++) - { - res_addr = CFI_address (a_desc, idx); - *res_addr = *(int*)CFI_address (b_desc, idx) - * *(int*)CFI_address (c_desc, idx); - } + if (a_desc->attribute == CFI_attribute_other) + { + assert (a_desc->dim[0].lower_bound == 0); + assert (a_desc->dim[1].lower_bound == 0); + for (idx[0] = 0; idx[0] < a_desc->dim[0].extent; idx[0]++) + for (idx[1] = 0; idx[1] < a_desc->dim[1].extent; idx[1]++) + { + res_addr = CFI_address (a_desc, idx); + *res_addr = *(int*)CFI_address (b_desc, idx) + * *(int*)CFI_address (c_desc, idx); + } + } + else + { + assert (a_desc->attribute == CFI_attribute_allocatable + || a_desc->attribute == CFI_attribute_pointer); + for (idx[0] = a_desc->dim[0].lower_bound; + idx[0] < a_desc->dim[0].extent + a_desc->dim[0].lower_bound; + idx[0]++) + for (idx[1] = a_desc->dim[1].lower_bound; + idx[1] < a_desc->dim[1].extent + a_desc->dim[1].lower_bound; + idx[1]++) + { + res_addr = CFI_address (a_desc, idx); + *res_addr = *(int*)CFI_address (b_desc, idx) + * *(int*)CFI_address (c_desc, idx); + } + } return 0; } @@ -57,15 +79,16 @@ int allocate_c(CFI_cdesc_t * da, CFI_index_t lower[], CFI_index_t upper[]) CFI_index_t idx[2]; int *res_addr; + if (da->attribute == CFI_attribute_other) return err; if (CFI_allocate(da, lower, upper, 0)) return err; + assert (da->dim[0].lower_bound == lower[0]); + assert (da->dim[1].lower_bound == lower[1]); - - for (idx[0] = 0; idx[0] < da->dim[0].extent; idx[0]++) - for (idx[1] = 0; idx[1] < da->dim[1].extent; idx[1]++) + for (idx[0] = lower[0]; idx[0] < da->dim[0].extent + lower[0]; idx[0]++) + for (idx[1] = lower[1]; idx[1] < da->dim[1].extent + lower[1]; idx[1]++) { res_addr = CFI_address (da, idx); - *res_addr = (int)((idx[0] + da->dim[0].lower_bound) - * (idx[1] + da->dim[1].lower_bound)); + *res_addr = (int)(idx[0] * idx[1]); } return 0; @@ -86,6 +109,7 @@ int establish_c(CFI_cdesc_t * desc) CFI_attribute_pointer, CFI_type_struct, sizeof(t), 1, extent); + assert (desc->dim[0].lower_bound == 0); for (idx[0] = 0; idx[0] < extent[0]; idx[0]++) { res_addr = (t*)CFI_address (desc, idx); @@ -118,10 +142,11 @@ float section_c(int *std_case, CFI_cdesc_t * source, int *low, int *str) CFI_type_float, 0, 1, NULL); if (ind) return -1.0; ind = CFI_section((CFI_cdesc_t *)§ion, source, lower, NULL, strides); + assert (section.dim[0].lower_bound == lower[0]); if (ind) return -2.0; /* Sum over the section */ - for (idx[0] = 0; idx[0] < section.dim[0].extent; idx[0]++) + for (idx[0] = lower[0]; idx[0] < section.dim[0].extent + lower[0]; idx[0]++) ans += *(float*)CFI_address ((CFI_cdesc_t*)§ion, idx); return ans; } @@ -138,10 +163,12 @@ float section_c(int *std_case, CFI_cdesc_t * source, int *low, int *str) if (ind) return -1.0; ind = CFI_section((CFI_cdesc_t *)§ion, source, lower, upper, strides); + assert (section.rank == 1); + assert (section.dim[0].lower_bound == lower[0]); if (ind) return -2.0; /* Sum over the section */ - for (idx[0] = 0; idx[0] < section.dim[0].extent; idx[0]++) + for (idx[0] = lower[0]; idx[0] < section.dim[0].extent + lower[0]; idx[0]++) ans += *(float*)CFI_address ((CFI_cdesc_t*)§ion, idx); return ans; } @@ -166,6 +193,8 @@ double select_part_c (CFI_cdesc_t * source) CFI_type_double_Complex, sizeof(double _Complex), 2, extent); (void)CFI_select_part(comp_cdesc, source, offsetof(t,y), 0); + assert (comp_cdesc->dim[0].lower_bound == 0); + assert (comp_cdesc->dim[1].lower_bound == 0); /* Sum over comp_cdesc[4,:] */ size = comp_cdesc->dim[1].extent; diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c new file mode 100644 index 00000000000..1ac9fc89eb1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c @@ -0,0 +1,12 @@ +/* Test the fix for PR91926. */ + +/* Contributed by José Rui Faustino de Sousa <jrfsousa@hotmail.com> */ + +#include <stdlib.h> + +int ifb_echo(void*); + +int ifb_echo(void *this) +{ + return this == NULL ? 1 : 2; +} diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90 b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90 new file mode 100644 index 00000000000..132a97cd4c4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90 @@ -0,0 +1,39 @@ +! { dg-do run { target c99_runtime } } +! { dg-additional-sources ISO_Fortran_binding_13.c } +! +! Test the fix for PR91926. The additional source is the main program. +! +! Contributed by José Rui Faustino de Sousa <jrfsousa@hotmail.com> +! +program ifb_p + + implicit none + + integer :: i = 42 + + interface + integer function ifb_echo_aux(this) bind(c, name="ifb_echo") + implicit none + type(*), dimension(..), & ! removing assumed rank solves segmentation fault + optional, intent(in) :: this + end function ifb_echo_aux + end interface + + if (ifb_echo_aux() .ne. 1) STOP 1 ! worked + if (ifb_echo() .ne. 1) stop 2 ! segmentation fault + if (ifb_echo_aux(i) .ne. 2) stop 3 ! worked + if (ifb_echo(i) .ne. 2) stop 4 ! worked + + stop + +contains + + integer function ifb_echo(this) + type(*), dimension(..), & + optional, intent(in) :: this + + ifb_echo = ifb_echo_aux(this) + return + end function ifb_echo + +end program ifb_p diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 new file mode 100644 index 00000000000..388c5438252 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 @@ -0,0 +1,41 @@ +! { dg-do run } +! +! Correct an error in the eveluation of the CFI descriptor attribute for +! the case where the bind_C formal argument is not an assumed shape array +! and not allocatable or pointer. +! +! Contributed by Gilles Gouaillardet <gilles@rist.or.jp> +! +MODULE FOO +INTERFACE +SUBROUTINE dummy(buf) BIND(C, name="sync") +type(*), dimension(..) :: buf +END SUBROUTINE +END INTERFACE +END MODULE + +PROGRAM main + USE FOO + IMPLICIT NONE + integer(8) :: before, after + + INTEGER, parameter :: n = 1 + + INTEGER, ALLOCATABLE :: buf(:) + INTEGER :: buf2(n) + INTEGER :: i + + ALLOCATE(buf(n)) + before = LOC(buf(1)) + CALL dummy (buf) + after = LOC(buf(1)) + + if (before .NE. after) stop 1 + + before = LOC(buf2(1)) + CALL dummy (buf) + after = LOC(buf2(1)) + + if (before .NE. after) stop 2 + +END PROGRAM diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c new file mode 100644 index 00000000000..14dfcc90c4e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c @@ -0,0 +1,25 @@ +/* PR fortran/92470 - to be used with ISO_Fortran_binding_17.f90 */ + +#include <stdio.h> +#include <assert.h> +#include "../../../libgfortran/ISO_Fortran_binding.h" + +void Csub(const CFI_cdesc_t *, size_t, CFI_index_t invalid); + +void Csub(const CFI_cdesc_t * dv, size_t locd, CFI_index_t invalid) { + + CFI_index_t lb[1]; + lb[0] = dv->dim[0].lower_bound; + size_t ld = (size_t)CFI_address(dv, lb); + + if (ld != locd) + printf ("In C function: CFI_address of dv = %I64x\n", ld); + assert( ld == locd ); + + lb[0] = invalid; + /* Shall return NULL and produce stderr diagnostic with -fcheck=array. */ + ld = (size_t)CFI_address(dv, lb); + assert (ld == 0); + + return; +} diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.f90 b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.f90 new file mode 100644 index 00000000000..fa341a7f3d4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.f90 @@ -0,0 +1,77 @@ +! { dg-do run } +! { dg-additional-sources ISO_Fortran_binding_17.c } +! { dg-options "-fcheck=all" } +! { dg-warning "command line option '-fcheck=all' is valid for Fortran but not for C" "" { target *-*-* } 0 } +! +! PR fortran/92470 +! +! https://github.com/j3-fortran/fortran_proposals/issues/57#issuecomment-552680503 +! +! Unit Test #: Test-1.F2018-2.7.5 +! Author : FortranFan +! Reference : The New Features of Fortran 2018, John Reid, August 2, 2018 +! ISO/IEC JTC1/SC22/WG5 N2161 +! Description: +! Test item 2.7.5 Fortran subscripting +! void *CFI_address(const CFI_cdesc_t *dv, const CFI_index_t subscripts[]); +! that returns the C address of a scalar or of an element of an array using +! Fortran sub-scripting. +! + use, intrinsic :: iso_c_binding, only: c_int, c_size_t, c_loc + implicit none + + integer, parameter :: LB_A = -2 + integer, parameter :: UB_A = 1 + character(len=*), parameter :: fmtg = "(*(g0,1x))" + character(len=*), parameter :: fmth = "(g0,1x,z0)" + + blk1: block + interface + subroutine Csub(a, loc_a_1, invalid_idx) bind(C, name="Csub") + import :: c_size_t + type(*), intent(in) :: a(:) + integer(c_size_t), intent(in), value :: loc_a_1, invalid_idx + end subroutine + end interface + + integer(c_int), target :: a( LB_A:UB_A ) + integer(c_size_t) :: loc_a + + print fmtg, "Block 1" + + loc_a = transfer( c_loc(a(lbound(a,dim=1))), mold=loc_a) + print fmth, "Address of a: ", loc_a + + call Csub(a, loc_a, -1_c_size_t) ! LB starts at 0 + call Csub(a, loc_a, 5_c_size_t) ! 4 elements + 1 + print * + end block blk1 + + blk2: block + interface + subroutine Csub(a, loc_a_1, invalid_idx) bind(C, name="Csub") + import :: c_int, c_size_t + integer(kind=c_int), allocatable, intent(in) :: a(:) + integer(c_size_t), intent(in), value :: loc_a_1, invalid_idx + end subroutine + end interface + + integer(c_int), allocatable, target :: a(:) + integer(c_size_t) :: loc_a + + print fmtg, "Block 2" + + allocate( a( LB_A:UB_A ) ) + loc_a = transfer( c_loc(a(lbound(a,dim=1))), mold=loc_a ) + print fmth, "Address of a: ", loc_a + + call Csub(a, loc_a, LB_A-1_c_size_t) + call Csub(a, loc_a, UB_A+1_c_size_t) + print * + end block blk2 +end + +! { dg-output "CFI_address: subscripts\\\[0\\\] is out of bounds. For dimension = 0, subscripts = -1, lower_bound = 0, upper bound = 4, extend = 4(\n|\r\n|\r)" } +! { dg-output "CFI_address: subscripts\\\[0\\\] is out of bounds. For dimension = 0, subscripts = 5, lower_bound = 0, upper bound = 4, extend = 4(\n|\r\n|\r).*" } +! { dg-output "CFI_address: subscripts\\\[0\\\] is out of bounds. For dimension = 0, subscripts = -3, lower_bound = -2, upper bound = 6, extend = 4(\n|\r\n|\r)" } +! { dg-output "CFI_address: subscripts\\\[0\\\] is out of bounds. For dimension = 0, subscripts = 2, lower_bound = -2, upper bound = 6, extend = 4(\n|\r\n|\r)" } diff --git a/gcc/testsuite/gfortran.dg/allocated_3.f90 b/gcc/testsuite/gfortran.dg/allocated_3.f90 new file mode 100644 index 00000000000..66748d6142f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocated_3.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +! PR fortran/91551 +! Contributed by Gerhard Steinmetz +program p + if (allocated()) stop 1 ! { dg-error "requires an array or scalar allocatable" } +end diff --git a/gcc/testsuite/gfortran.dg/associate_49.f90 b/gcc/testsuite/gfortran.dg/associate_49.f90 new file mode 100644 index 00000000000..1b205950556 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_49.f90 @@ -0,0 +1,34 @@ +! { dg-do run } +! +! Test the fix for PR91588, in which the declaration of 'a' caused +! an ICE. +! +! Contributed by Gerhardt Steinmetz <gscfq@t-online.de> +! +program p + character(4), parameter :: parm = '7890' + associate (z => '1234') + block + integer(len(z)) :: a + if (kind(a) .ne. 4) stop 1 + end block + end associate + associate (z => '123') + block + integer(len(z)+1) :: a + if (kind(a) .ne. 4) stop 2 + end block + end associate + associate (z => 1_8) + block + integer(kind(z)) :: a + if (kind(a) .ne. 8) stop 3 + end block + end associate + associate (z => parm) + block + integer(len(z)) :: a + if (kind(a) .ne. 4) stop 4 + end block + end associate +end diff --git a/gcc/testsuite/gfortran.dg/bind-c-intent-out.f90 b/gcc/testsuite/gfortran.dg/bind-c-intent-out.f90 new file mode 100644 index 00000000000..39822c0753a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind-c-intent-out.f90 @@ -0,0 +1,42 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/91863 +! +! Contributed by G. Steinmetz +! + +subroutine sub(x) bind(c) + implicit none (type, external) + integer, allocatable, intent(out) :: x(:) + + allocate(x(3:5)) + x(:) = [1, 2, 3] +end subroutine sub + + +program p + implicit none (type, external) + interface + subroutine sub(x) bind(c) + integer, allocatable, intent(out) :: x(:) + end + end interface + integer, allocatable :: a(:) + + call sub(a) + if (.not.allocated(a)) stop 1 + if (any(shape(a) /= [3])) stop 2 + if (lbound(a,1) /= 3 .or. ubound(a,1) /= 5) stop 3 + if (any(a /= [1, 2, 3])) stop 4 +end program p + +! "cfi" only appears in context of "a" -> bind-C descriptor +! the intent(out) implies freeing in the callee (!), hence the "free" +! It is the only 'free' as 'a' is part of the main program and, hence, implicitly has the SAVE attribute. +! The 'cfi = 0' appears before the call due to the deallocate and when preparing the C descriptor +! As cfi (i.e. the descriptor itself) is allocated in libgomp, it has to be freed after the call. + +! { dg-final { scan-tree-dump-times "__builtin_free" 2 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_free \\(cfi\\.\[0-9\]+\\);" 2 "original" } } +! { dg-final { scan-tree-dump-times "cfi\\.\[0-9\]+ = 0B;" 2 "original" } } diff --git a/gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90 b/gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90 new file mode 100644 index 00000000000..d5bad7d03f2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90 @@ -0,0 +1,39 @@ +! { dg-do run } +! { dg-additional-sources bind_c_array_params_3_aux.c } +! +! PR fortran/92284 +! +! Contributed by José Rui Faustino de Sousa +! +program arr_p + use, intrinsic :: iso_c_binding, only: c_int + implicit none (type, external) + + integer(kind=c_int), pointer :: arr(:) + integer :: i + + nullify(arr) + call arr_set(arr) + + if (.not.associated(arr)) stop 1 + if (lbound(arr,dim=1) /= 1) stop 2 + if (ubound(arr,dim=1) /= 9) stop 3 + if (any (arr /= [(i, i=0,8)])) stop 4 + deallocate(arr) + +contains + + subroutine arr_set(this) !bind(c) + integer(kind=c_int), pointer, intent(out) :: this(:) + + interface + subroutine arr_set_c(this) bind(c) + use, intrinsic :: iso_c_binding, only: c_int + implicit none + integer(kind=c_int), pointer, intent(out) :: this(:) + end subroutine arr_set_c + end interface + + call arr_set_c(this) + end subroutine arr_set +end program arr_p diff --git a/gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c b/gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c new file mode 100644 index 00000000000..07d1a033c5a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c @@ -0,0 +1,26 @@ +/* Used by bind_c_array_params_3.f90. */ +/* PR fortran/92284. */ + +#include <assert.h> +#include <errno.h> +#include <stdio.h> + +#include "../../../libgfortran/ISO_Fortran_binding.h" + +void arr_set_c(CFI_cdesc_t*); + +void arr_set_c(CFI_cdesc_t *arr){ + int i, stat, *auxp = NULL; + CFI_index_t lb[] = {1}; + CFI_index_t ub[] = {9}; + + assert(arr); + assert(arr->rank==1); + assert(!arr->base_addr); + stat = CFI_allocate(arr, lb, ub, sizeof(int)); + assert(stat==CFI_SUCCESS); + auxp = (int*)arr->base_addr; + assert(auxp); + for(i=0; i<ub[0]-lb[0]+1; i++) auxp[i]=i; + return; +} diff --git a/gcc/testsuite/gfortran.dg/char_result_19.f90 b/gcc/testsuite/gfortran.dg/char_result_19.f90 new file mode 100644 index 00000000000..e66ebdcda53 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/char_result_19.f90 @@ -0,0 +1,24 @@ +! { dg-do preprocess } +! { dg-additional-options "-cpp" } +! +! Test the fix for PR86248 +! +! Contributed by Bill Long <longb@cray.com> +! +program test + use test_module + implicit none + integer :: i + character(:), allocatable :: chr + do i = 0, 2 + chr = func_1 (i) + select case (i) + case (0) + if (chr .ne. 'el0') stop i + case (1) + if (chr .ne. 'el11') stop i + case (2) + if (chr .ne. 'el2') stop i + end select + end do +end program test diff --git a/gcc/testsuite/gfortran.dg/char_result_mod_19.f90 b/gcc/testsuite/gfortran.dg/char_result_mod_19.f90 new file mode 100644 index 00000000000..a2b5e94f1b6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/char_result_mod_19.f90 @@ -0,0 +1,18 @@ +! { dg-do run } +! { dg-additional-sources char_result_19.f90 } +! +! Module for char_result_19.f90 +! Tests fix for PR86248 +! +module test_module + implicit none + public :: func_1 + private + character(len=*),dimension(0:2),parameter :: darray = (/"el0 ","el11","el2 "/) +contains + function func_1 (func_1_input) result(f) + integer, intent(in) :: func_1_input + character(len = len_trim (darray(func_1_input))) :: f + f = darray(func_1_input) + end function func_1 +end module test_module diff --git a/gcc/testsuite/gfortran.dg/class_71.f90 b/gcc/testsuite/gfortran.dg/class_71.f90 new file mode 100644 index 00000000000..bc0ffcd2305 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_71.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! +! PR fortran/91586 +! +! Contributed by G. Steinmetz +! +program p + type t + class(*), allocatable :: a + end type + class(t) :: x, y ! { dg-error "must be dummy, allocatable or pointer" } + y = x ! { dg-error "Nonallocatable variable must not be polymorphic in intrinsic assignment" } +end diff --git a/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 b/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 index e5b455eea26..6836c257e14 100644 --- a/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 +++ b/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 @@ -8,9 +8,9 @@ include 'dec_type_print.f90' -! { dg-error "Invalid character in name" "" { target *-*-* } 52 } +! { dg-error "Mangled derived type definition" "" { target *-*-* } 52 } ! { dg-error "Invalid character in name" "" { target *-*-* } 53 } -! { dg-error "Invalid character in name" "" { target *-*-* } 54 } +! { dg-error "Mangled derived type definition" "" { target *-*-* } 54 } ! { dg-error "Invalid character in name" "" { target *-*-* } 55 } ! { dg-error "Invalid character in name" "" { target *-*-* } 56 } ! { dg-error "Invalid character in name" "" { target *-*-* } 57 } diff --git a/gcc/testsuite/gfortran.dg/directive_unroll_5.f90 b/gcc/testsuite/gfortran.dg/directive_unroll_5.f90 index b88b4b2c380..33f2fda537f 100644 --- a/gcc/testsuite/gfortran.dg/directive_unroll_5.f90 +++ b/gcc/testsuite/gfortran.dg/directive_unroll_5.f90 @@ -31,7 +31,7 @@ subroutine wrong3(a, b, n) integer :: a(n), b(n) integer (kind=4) :: i !GCC$ unroll 8 - write (*,*) "wrong"! { dg-error "directive does not commence a loop" } + write (*,*) "wrong"! { dg-error "directive not at the start of a loop" } DO i=n, 1, -1 call dummy2(a(i), b(i), i) ENDDO diff --git a/gcc/testsuite/gfortran.dg/do_subscript_6.f90 b/gcc/testsuite/gfortran.dg/do_subscript_6.f90 new file mode 100644 index 00000000000..d78b9d39056 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_subscript_6.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-std=legacy" } +! PR 91550 - this used to cause an ICE +! Test case by Gerhard Steinmetz +program p + real :: a(3) + integer :: i + do i = 1, 3, .1 ! { dg-error "cannot be zero" } + a(i) = i + end do +end diff --git a/gcc/testsuite/gfortran.dg/function_kinds_5.f90 b/gcc/testsuite/gfortran.dg/function_kinds_5.f90 index e48484ec30d..106431fe206 100644 --- a/gcc/testsuite/gfortran.dg/function_kinds_5.f90 +++ b/gcc/testsuite/gfortran.dg/function_kinds_5.f90 @@ -8,3 +8,4 @@ real (bad_kind(0d0)) function foo () ! { dg-error "must be an intrinsic function" } foo = real (kind (foo)) end function +! { dg-prune-output "Bad kind expression for function" } diff --git a/gcc/testsuite/gfortran.dg/gomp/pr87752.f90 b/gcc/testsuite/gfortran.dg/gomp/pr87752.f90 new file mode 100644 index 00000000000..072de218253 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr87752.f90 @@ -0,0 +1,12 @@ +! PR fortran/87752 +! { dg-do compile } +! { dg-additional-options "-Ofast" } + +subroutine foo (n, u, v) + integer :: n + real, pointer :: u(:), v(:) + !$omp parallel do simd + do i = 1, n + u(:) = v(:) + end do +end diff --git a/gcc/testsuite/gfortran.dg/matmul_blas_2.f90 b/gcc/testsuite/gfortran.dg/matmul_blas_2.f90 new file mode 100644 index 00000000000..237f4a10d89 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/matmul_blas_2.f90 @@ -0,0 +1,25 @@ +! { dg-do compile } +! { dg-options "-O3 -fdump-tree-original -fexternal-blas" } +! PR fortran/92321 - this used to cause an ICE. Original test case +! by Nathan Wukie. + +module mod_badmatmul + implicit none +contains + + subroutine test(c) + real, intent(inout) :: c(3,3) + real :: a(3,3), b(3,3) + c = matmul(a, b) + end subroutine test + +end module mod_badmatmul + +program main + use mod_badmatmul, only: test + implicit none + + real :: a(3,3) + call test(a) + +end program main diff --git a/gcc/testsuite/gfortran.dg/pdt_4.f03 b/gcc/testsuite/gfortran.dg/pdt_4.f03 index 0bb58f91c67..c1af65a5248 100644 --- a/gcc/testsuite/gfortran.dg/pdt_4.f03 +++ b/gcc/testsuite/gfortran.dg/pdt_4.f03 @@ -97,9 +97,9 @@ contains type (mytype(4, *)) :: arg ! OK end subroutine subroutine bar(arg) ! { dg-error "is neither allocatable nor a pointer" } - type (thytype(8, :, 4) :: arg + type (thytype(8, :, 4)) :: arg end subroutine subroutine foobar(arg) ! OK - type (thytype(8, *, 4) :: arg + type (thytype(8, *, 4)) :: arg end subroutine end diff --git a/gcc/testsuite/gfortran.dg/pr47054_1.f90 b/gcc/testsuite/gfortran.dg/pr47054_1.f90 new file mode 100644 index 00000000000..3665edbd72b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr47054_1.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-fcray-pointer" } +! PR fortran/47054 +subroutine host_sub + implicit none + real xg + pointer (paxg, xg) + call internal_sub + contains + subroutine internal_sub + implicit none + real xg + pointer (paxg, xg) + end subroutine internal_sub +end subroutine host_sub diff --git a/gcc/testsuite/gfortran.dg/pr47054_2.f90 b/gcc/testsuite/gfortran.dg/pr47054_2.f90 new file mode 100644 index 00000000000..3b7c4aaf815 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr47054_2.f90 @@ -0,0 +1,41 @@ +! { dg-do compile } +! { dg-options "-fcray-pointer" } +! PR fortran/47054 +! Code contributed by Deji Akingunola <deji_aking at yahoo dot ca> +subroutine host_sub(F_su,F_nk) + implicit none + + integer :: F_nk + real,dimension(F_nk) :: F_su + integer G_ni, G_nj + real*8 G_xg_8, G_yg_8 + pointer (paxg_8, G_xg_8(G_ni)) + pointer (payg_8, G_yg_8(G_nj)) + common / G_p / paxg_8,payg_8 + common / G / G_ni, G_nj + + call internal_sub(F_su,F_nk) + return +contains + + subroutine internal_sub(F_su,F_nk) + implicit none + integer G_ni, G_nj + real*8 G_xg_8, G_yg_8 + pointer (paxg_8, G_xg_8(G_ni)) + pointer (payg_8, G_yg_8(G_nj)) + common / G_p / paxg_8,payg_8 + common / G / G_ni, G_nj + + integer :: F_nk + real,dimension(F_nk) :: F_su + integer k,k2 + + k2 = 0 + do k = 1, F_nk, 2 + k2 = k2+1 + F_su(k) = F_su(k) + 1.0 + enddo + return + end subroutine internal_sub +end subroutine host_sub diff --git a/gcc/testsuite/gfortran.dg/pr69455_1.f90 b/gcc/testsuite/gfortran.dg/pr69455_1.f90 new file mode 100644 index 00000000000..fe62e5c1b0b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr69455_1.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +program foo + block + use, intrinsic :: iso_c_binding, only: wp => c_float, ik => c_int + if (ik /= 4) stop 1 + if (wp /= 4) stop 2 + end block + block + use, intrinsic :: iso_c_binding, only: wp => c_double, ik => c_int64_t + if (ik /= 8) stop 3 + if (wp /= 8) stop 4 + end block +end program foo + diff --git a/gcc/testsuite/gfortran.dg/pr69455_2.f90 b/gcc/testsuite/gfortran.dg/pr69455_2.f90 new file mode 100644 index 00000000000..8f9fb35021f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr69455_2.f90 @@ -0,0 +1,13 @@ +! { dg-do run } +program foo + block + use, intrinsic :: ISO_FORTRAN_ENV, only: wp => REAL32, ik => INT32 + if (ik /= 4) stop 1 + if (wp /= 4) stop 2 + end block + block + use, intrinsic :: ISO_FORTRAN_ENV, only: wp => REAL64, ik => INT64 + if (ik /= 8) stop 3 + if (wp /= 8) stop 4 + end block +end program foo diff --git a/gcc/testsuite/gfortran.dg/pr85543.f90 b/gcc/testsuite/gfortran.dg/pr85543.f90 index d3f83276a7f..b0faa8d5927 100644 --- a/gcc/testsuite/gfortran.dg/pr85543.f90 +++ b/gcc/testsuite/gfortran.dg/pr85543.f90 @@ -6,3 +6,4 @@ contains real(z()) function f() ! { dg-error "in initialization expression at" } end end +! { dg-prune-output "Bad kind expression for function" } diff --git a/gcc/testsuite/gfortran.dg/pr89943_1.f90 b/gcc/testsuite/gfortran.dg/pr89943_1.f90 new file mode 100644 index 00000000000..3aa9c36d628 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr89943_1.f90 @@ -0,0 +1,31 @@ +! { dg-do compile } +! PR fortran/89943 +! Code contributed by Alberto Luaces <aluaces at udc dot se> +module Foo_mod + + implicit none + + interface + module subroutine runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer(c_int32_t) , intent(in) :: ndim + end subroutine runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module subroutine runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer(c_int32_t) , intent(in) :: ndim + end subroutine runFoo4C + +end submodule Foo_smod + diff --git a/gcc/testsuite/gfortran.dg/pr89943_2.f90 b/gcc/testsuite/gfortran.dg/pr89943_2.f90 new file mode 100644 index 00000000000..ac69ec3af56 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr89943_2.f90 @@ -0,0 +1,33 @@ +! { dg-do compile } +! PR fortran/89943 +! Code contributed by Alberto Luaces <aluaces at udc dot se> +module Foo_mod + + implicit none + + interface + module function runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer runFoo4c + integer(c_int32_t) , intent(in) :: ndim + end function runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module function runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer runFoo4c + integer(c_int32_t) , intent(in) :: ndim + end function runFoo4C + +end submodule Foo_smod + diff --git a/gcc/testsuite/gfortran.dg/pr89943_3.f90 b/gcc/testsuite/gfortran.dg/pr89943_3.f90 new file mode 100644 index 00000000000..38b723e2458 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr89943_3.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +module Foo_mod + + implicit none + + interface + module subroutine runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer(c_int32_t) , intent(in) :: ndim + end subroutine runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module subroutine runFoo4C(ndim) bind(C, name="runFu") ! { dg-error "Mismatch in BIND" } + use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement" } + implicit none ! { dg-error "Unexpected IMPLICIT NONE statement" } + integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Unexpected data declaration" } + end subroutine runFoo4C ! { dg-error " Expecting END SUBMODULE" } + +end submodule Foo_smod diff --git a/gcc/testsuite/gfortran.dg/pr89943_4.f90 b/gcc/testsuite/gfortran.dg/pr89943_4.f90 new file mode 100644 index 00000000000..8eba2eda171 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr89943_4.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +module Foo_mod + + implicit none + + interface + module function runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer runFoo4c + integer(c_int32_t) , intent(in) :: ndim + end function runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module function runFoo4C(ndim) bind(C, name="runFu") ! { dg-error "Mismatch in BIND" } + use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement in" } + implicit none ! { dg-error "Unexpected IMPLICIT NONE statement" } + integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Unexpected data declaration" } + end function runFoo4C ! { dg-error "Expecting END SUBMODULE" } + +end submodule Foo_smod diff --git a/gcc/testsuite/gfortran.dg/pr91496.f90 b/gcc/testsuite/gfortran.dg/pr91496.f90 new file mode 100644 index 00000000000..cb316748f0e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91496.f90 @@ -0,0 +1,38 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +subroutine foo (a, b, c, n) + implicit none + real a(*), b(*), c(*) + integer :: i, n + external bar +!DIR$ unroll (4) +!GCC$ unroll 4 + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ ivdep +!GCC$ ivdep + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ vector +!GCC$ vector + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ novector +!GCC$ novector + do i = 1, n + a(i) = b(i) + c(i) + end do +!GCC$ ivdep +!GCC$ vector + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ noinline +!GCC$ noinline ! { dg-warning "Unclassifiable GCC directive" } + call bar (a) +end subroutine foo +! { dg-final { scan-tree-dump-times "ANNOTATE_EXPR" 6 "original" } } diff --git a/gcc/testsuite/gfortran.dg/pr91552.f90 b/gcc/testsuite/gfortran.dg/pr91552.f90 new file mode 100644 index 00000000000..bb959185cf9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91552.f90 @@ -0,0 +1,10 @@ +! { dg-do run } +! PR fortran/91552 +! Code contributed by Gerhard Steinmetz. +program p + real :: y(3), z(4) + y = 2.0 * [real :: 1, [2], 3] + z = 2.0 * [real :: 1, [2, [4]], 3] + if (any(y /= [2., 4., 6.])) stop 1 + if (any(z /= [2., 4., 8., 6.])) stop 2 +end diff --git a/gcc/testsuite/gfortran.dg/pr91553.f90 b/gcc/testsuite/gfortran.dg/pr91553.f90 new file mode 100644 index 00000000000..2d0b018dded --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91553.f90 @@ -0,0 +1,8 @@ +! { dg-do run } +! Code contributed by Gerhard Steinmetz +program p + complex z(1) + z = (1.0, 2.0) * [real :: (3.0 + 4.0)] + if (real(z(1)) /= 7.) stop 1 + if (aimag(z(1)) /= 14.) stop 2 +end diff --git a/gcc/testsuite/gfortran.dg/pr91564.f90 b/gcc/testsuite/gfortran.dg/pr91564.f90 new file mode 100644 index 00000000000..57783abe1f8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91564.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! PR fortran/91564 +! Contributed by Gerhard Steinmetz. +program p + integer i, j + call kill (1, 2, 3) ! { dg-error "shall be an INTENT" } + i = 42 + call bar(i, j) +end + +subroutine bar(n, m) + integer, intent(in) :: n + integer, intent(inout) :: m + call kill (1, 3, n) ! { dg-error "shall be an INTENT" } + call kill (1, 3, m) +end subroutine bar diff --git a/gcc/testsuite/gfortran.dg/pr91565.f90 b/gcc/testsuite/gfortran.dg/pr91565.f90 new file mode 100644 index 00000000000..b43a57acf13 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91565.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! PR fortran/91565 +! Contributed by Gerhard Steinmetz +program p + integer, parameter :: a(2) = [2,2] ! { dg-error "\(1\)" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "not a permutation" } +end + +subroutine foo + integer, parameter :: a(1) = 1 ! { dg-error "\(1\)" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "are different" } +end + +subroutine bar + integer, parameter :: a(1,2) = 1 ! { dg-error "\(1\)" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "are different" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91566.f90 b/gcc/testsuite/gfortran.dg/pr91566.f90 new file mode 100644 index 00000000000..fdb35b44199 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91566.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! Code contributed by Gerhard Steinmetz +program p + call q + call r +end program p + +subroutine q + print *, -merge([3,4], 0, [.false.,.true.]) +end + +subroutine r + print *, 2 + merge([3,4], 0, [.false.,.true.]) +end diff --git a/gcc/testsuite/gfortran.dg/pr91568.f b/gcc/testsuite/gfortran.dg/pr91568.f new file mode 100644 index 00000000000..4ada559d692 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91568.f @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-Ofast" } + subroutine h3dall(z,hvec,hder,nterms) + complex *16 hvec(0:1),hder(0:1) + complex *16 z,zinv,ztmp/1.0/ + zinv=1.0/z + do i=1,nterms + ztmp=zinv*i + hder(i)=hvec(i-1)-ztmp*hvec(i) + enddo + end diff --git a/gcc/testsuite/gfortran.dg/pr91587.f90 b/gcc/testsuite/gfortran.dg/pr91587.f90 new file mode 100644 index 00000000000..c304be116c0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91587.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/91587 +! Code contributed by Gerhard Steinmetz +program p + backspace(err=!) ! { dg-error "Invalid value for" } + flush(err=!) ! { dg-error "Invalid value for" } + rewind(err=!) ! { dg-error "Invalid value for" } +end + +subroutine bar ! An other matcher runs, and gives a different error. + endfile(err=!) ! { dg-error "Expecting END" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91589.f90 b/gcc/testsuite/gfortran.dg/pr91589.f90 new file mode 100644 index 00000000000..d02cb64bfc2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91589.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! +! Check the fix for PR91589, in which the invalid expression caused an ICE. +! Other statements using this invalid expression cause "Unclassifiable statement at..." +! +! Contributed by Gerhardt Steinmetz <gscfq@t-online.de> +! +program p + type t + integer :: a + end type + type(t) :: x = t(1) + call sub (x%a%a) ! { dg-error "Syntax error in argument list" } +end + diff --git a/gcc/testsuite/gfortran.dg/pr91641.f90 b/gcc/testsuite/gfortran.dg/pr91641.f90 new file mode 100644 index 00000000000..1970824a946 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91641.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/91641 +! Code conyributed by Gerhard Steinmetz +program p + real, pointer :: z(:) + print *, is_contiguous (null(z)) ! { dg-error "shall be an associated" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91642.f90 b/gcc/testsuite/gfortran.dg/pr91642.f90 new file mode 100644 index 00000000000..8c41cd2dae0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91642.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/91642 +! Code contributed by Gerhard Steinmetz +program p + integer i + integer :: iol + integer, external :: null + i = 0 + inquire (iolength=iol) i, null() + if (iol == 4) stop 1 +end + +subroutine q + integer i + integer :: iol + i = 0 + inquire (iolength=iol) i, null() ! { dg-error "cannot appear in INQUIRE" } + if (iol == 4) stop 1 +end diff --git a/gcc/testsuite/gfortran.dg/pr91649.f90 b/gcc/testsuite/gfortran.dg/pr91649.f90 new file mode 100644 index 00000000000..0e6acb9ac8d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91649.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! PR fortran/91649 +! Code originally contributed by Gerhard Steinmetz +subroutine p + logical :: back = .true. + integer :: x(1) = findloc([1, 2, 1], '1', back=back) ! { dg-error "must be in type conformance" } + print *, x +end + +subroutine q + type t + end type + logical :: back = .false. + integer :: x(1) = findloc([1, 2, 1], t(), back=back) ! { dg-error "must be of intrinsic type" } + print *, x +end + +subroutine s + character(4) :: c = '1234' + integer :: x(1) = findloc([1, 2, 1], c, back=.true.) ! { dg-error "must be in type conformance" } + print *, x +end + diff --git a/gcc/testsuite/gfortran.dg/pr91660_1.f90 b/gcc/testsuite/gfortran.dg/pr91660_1.f90 new file mode 100644 index 00000000000..53a1a808a7b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91660_1.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/91660 +! Code contributed by Gerhard Steinmetz +program p + type t + end type + type (t x ! { dg-error "Malformed type-spec" } + x = t() ! { dg-error "Cannot convert" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91660_2.f90 b/gcc/testsuite/gfortran.dg/pr91660_2.f90 new file mode 100644 index 00000000000..0072aba1680 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91660_2.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/91660 +program foo + type(doubleprecision :: x ! { dg-error "Malformed type-spec" } + type(double precision :: y ! { dg-error "Malformed type-spec" } + type(character(len=3) :: a ! { dg-error "Malformed type-spec" } + type(doublecomplex :: b ! { dg-error "Malformed type-spec" } + type(double complex :: c ! { dg-error "Malformed type-spec" } +end program foo diff --git a/gcc/testsuite/gfortran.dg/pr91714.f90 b/gcc/testsuite/gfortran.dg/pr91714.f90 new file mode 100644 index 00000000000..8b855d90318 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91714.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! Contributed by Gerhard Steinmetz +program p + typea ! { dg-error "Mangled derived type" } + integer b + end type ! { dg-error "Expecting END PROGRAM" } + type(a) :: c ! { dg-error "is being used before it" } + c = a(1) + print *, c +end diff --git a/gcc/testsuite/gfortran.dg/pr91715.f90 b/gcc/testsuite/gfortran.dg/pr91715.f90 new file mode 100644 index 00000000000..a3d9b8d1d9a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91715.f90 @@ -0,0 +1,5 @@ +! { dg-do compile } +! PR fortran/91715 +! Code contributed Gerhard Steinmetz +character(1function f() ! { dg-error "Syntax error in CHARACTER" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91727.f90 b/gcc/testsuite/gfortran.dg/pr91727.f90 new file mode 100644 index 00000000000..54276b45d33 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91727.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! Code contributed by Gerhard Steinmetz. +program p + type t + class(*), allocatable :: a + end type + type(t) :: x + allocate (x%a, source=[1]) ! { dg-error "have the same rank as" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91785.f90 b/gcc/testsuite/gfortran.dg/pr91785.f90 new file mode 100644 index 00000000000..fb3d964fc06 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91785.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/91785 +! Code contributed by Gerhard Steinmetz +program p + complex :: a(*) ! { dg-error "Assumed size array at" } + real :: b(2) + b = a%im ! { dg-error "upper bound in the last dimension" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91801.f90 b/gcc/testsuite/gfortran.dg/pr91801.f90 new file mode 100644 index 00000000000..d2d82b88464 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91801.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/91801 +! Code contributed by Gerhard Steinmetz +program p + integer, parameter :: a(2) = [2,0] ! { dg-error "Element with a value of" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "for the RESHAPE intrinsic near" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91802.f90 b/gcc/testsuite/gfortran.dg/pr91802.f90 new file mode 100644 index 00000000000..277d61aae82 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91802.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! Code contributed by Gerhard Steinmetz +! PR fortran/91802 +module m + real :: x + dimension :: x(1,2,1,2,1,2,1,2) + codimension :: x[1,2,1,2,1,2,1,*] ! { dg-error "exceeds 15" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91864.f90 b/gcc/testsuite/gfortran.dg/pr91864.f90 new file mode 100644 index 00000000000..a17187dcdc0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91864.f90 @@ -0,0 +1,22 @@ +program p + integer :: i + read (*,*) i%kind ! { dg-error "Expecting variable or io-implied-do" } +end + +subroutine t + integer, allocatable :: x(:) + integer :: stat + allocate (x(3), stat=stat%kind) ! { dg-error "cannot be a constant" } +end + +subroutine u + integer, allocatable :: x(:) + integer :: stat + allocate (x(3), stat%kind=stat) ! { dg-error "Unexpected constant" } +end + +subroutine v + integer, allocatable :: x(:) + integer :: stat + deallocate (x, stat%kind=stat) ! { dg-error "Unexpected constant" } +end diff --git a/gcc/testsuite/gfortran.dg/pr91942.f90 b/gcc/testsuite/gfortran.dg/pr91942.f90 new file mode 100644 index 00000000000..cd237d38660 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr91942.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/91942 +! Code contributed by Gerhard Steinmetz +program p + integer :: i + backspace (iostat=i%kind) ! { dg-error "Expecting a variable at" } + endfile (iostat=i%kind) ! { dg-error "Expecting END PROGRAM" } + flush (iostat=i%kind) ! { dg-error "Expecting a variable at" } + rewind (iostat=i%kind) ! { dg-error "Expecting a variable at" } +end diff --git a/gcc/testsuite/gfortran.dg/pr92208.f90 b/gcc/testsuite/gfortran.dg/pr92208.f90 new file mode 100644 index 00000000000..9de7f4b24b5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr92208.f90 @@ -0,0 +1,39 @@ +! { dg-do run } +! +! PR fortran/92208 +! +! Contributed by Nils Reiche +! +program stringtest + implicit none + integer, parameter :: noVars = 2 + +! print*, "varNames: ", createVarnames("var",noVars) + call function1(noVars,createVarnames("var",noVars),"path") + +contains + +function createVarnames(string,noVars) result(stringArray) + implicit none + character(len=*), intent(in) :: string + integer, intent(in) :: noVars + character(len=len_trim(string)+6), dimension(noVars) :: stringArray + integer :: i + do i=1,noVars + write(stringArray(i),'(a,i0)') string, i + enddo +end function createVarnames + +subroutine function1(noVars,varNames,path) + implicit none + integer, intent(in) :: noVars + character(len=*), intent(in) :: path + character(len=*), dimension(noVars) :: varNames + + if (path /= 'path') stop 1 + if (any(varNames /= ['var1', 'var2'])) stop 2 + !print*, "function1-path : ", trim(path) + !print*, "function1-varNames: ", varNames +end subroutine function1 + +end program stringtest diff --git a/gcc/testsuite/gfortran.dg/pr92277.f90 b/gcc/testsuite/gfortran.dg/pr92277.f90 new file mode 100644 index 00000000000..5121063f5f3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr92277.f90 @@ -0,0 +1,32 @@ +! { dg-do compile } +! +! PR fortran/92277 +! +! Contributed by José Rui Faustino de Sousa +! +module arr_m + implicit none +contains + subroutine arr_set(this, that) + integer, intent(out) :: this(..) + integer, optional, intent(out) :: that(..) + + interface + subroutine arr_set_c(this) bind(c) + use, intrinsic :: iso_c_binding, only: c_int + implicit none + integer(kind=c_int), intent(out) :: this(..) + end subroutine arr_set_c + subroutine arr_set_c_opt(this) bind(c) + use, intrinsic :: iso_c_binding, only: c_int + implicit none + integer(kind=c_int), optional, intent(out) :: this(..) + end subroutine arr_set_c_opt + end interface + + call arr_set_c(this) + call arr_set_c(that) + call arr_set_c_opt(this) + call arr_set_c_opt(that) + end subroutine arr_set +end module arr_m diff --git a/gcc/testsuite/gfortran.dg/typebound_call_22.f03 b/gcc/testsuite/gfortran.dg/typebound_call_22.f03 index b9f0b712573..30f86937fe2 100644 --- a/gcc/testsuite/gfortran.dg/typebound_call_22.f03 +++ b/gcc/testsuite/gfortran.dg/typebound_call_22.f03 @@ -26,4 +26,4 @@ program test call x%bar () end program -! { dg-final { scan-tree-dump-times "base \\(\\);" 1 "optimized" } } +! { dg-final { scan-tree-dump-times "base \\(\\);" 1 "optimized" { xfail *-*-* } } } diff --git a/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_5.f90 b/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_5.f90 new file mode 100644 index 00000000000..fa93f1d7ff2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_5.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-additional-options "-Wunused-dummy-argument" } +! PR 91557 - this used to generate a bogus warning +! Test case by Gerhard Steinmetz +program p + integer :: a, b + a = 1 + call g +contains + subroutine g + integer :: x, y + call h (x, y) + if ( a > 0 ) y = y - 1 + b = y - x + 1 + end +end diff --git a/gcc/testsuite/obj-c++.dg/stubify-1.mm b/gcc/testsuite/obj-c++.dg/stubify-1.mm index c2355437afc..e8f21882de9 100644 --- a/gcc/testsuite/obj-c++.dg/stubify-1.mm +++ b/gcc/testsuite/obj-c++.dg/stubify-1.mm @@ -4,7 +4,7 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-Os -mdynamic-no-pic -fno-exceptions -mmacosx-version-min=10.4" } */ +/* { dg-options "-mdynamic-no-pic -fno-exceptions -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -32,8 +32,8 @@ extern "C" { } @end -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_objc_msgSend\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_objc_msgSend\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_bogonic\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_bogonic\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\\\$non_lazy_ptr" } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_bogonic\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_bogonic\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ diff --git a/gcc/testsuite/obj-c++.dg/stubify-2.mm b/gcc/testsuite/obj-c++.dg/stubify-2.mm index a9f66cac5d2..1863f986ce0 100644 --- a/gcc/testsuite/obj-c++.dg/stubify-2.mm +++ b/gcc/testsuite/obj-c++.dg/stubify-2.mm @@ -4,7 +4,7 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-mdynamic-no-pic -fdump-rtl-jump -mmacosx-version-min=10.4" } */ +/* { dg-options "-mdynamic-no-pic -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -30,4 +30,9 @@ extern int bogonic (int, int, int) ; /* Any symbol_ref of an un-stubified objc_msgSend is an error; look for "objc_msgSend" in quotes, without the $stub suffix. */ -/* { dg-final { scan-rtl-dump-not "symbol_ref.*\"objc_msgSend\"" "jump" } } */ + +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_Z7bogoniciii\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L__Z7bogoniciii\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ diff --git a/gcc/testsuite/objc.dg/stubify-1.m b/gcc/testsuite/objc.dg/stubify-1.m index 91bf73a14f7..641595ccfe4 100644 --- a/gcc/testsuite/objc.dg/stubify-1.m +++ b/gcc/testsuite/objc.dg/stubify-1.m @@ -4,7 +4,7 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-Os -mdynamic-no-pic -mmacosx-version-min=10.4" } */ +/* { dg-options "-Os -mdynamic-no-pic -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -28,8 +28,8 @@ extern int bogonic (int, int, int) ; } @end -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_objc_msgSend\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_objc_msgSend\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_bogonic\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_bogonic\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\\\$non_lazy_ptr" } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_bogonic\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_bogonic\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ diff --git a/gcc/testsuite/objc.dg/stubify-2.m b/gcc/testsuite/objc.dg/stubify-2.m index eaf4b964e4b..2930e46fc13 100644 --- a/gcc/testsuite/objc.dg/stubify-2.m +++ b/gcc/testsuite/objc.dg/stubify-2.m @@ -1,10 +1,10 @@ /* All calls must be properly stubified, m32 only. */ /* Testcase extracted from TextEdit:Document.m. */ -/* { dg-do compile { target powerpc*-*-darwin* } } */ +/* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-mdynamic-no-pic -fdump-rtl-jump -mmacosx-version-min=10.4" } */ +/* { dg-options "-mdynamic-no-pic -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -30,4 +30,9 @@ extern int bogonic (int, int, int) ; /* Any symbol_ref of an un-stubified objc_msgSend is an error; look for "objc_msgSend" in quotes, without the $stub suffix. */ -/* { dg-final { scan-rtl-dump-not "symbol_ref.*\"objc_msgSend\"" "jump" } } */ + +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_bogonic\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_bogonic\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ |