diff options
author | Ben Cheng <bccheng@google.com> | 2013-08-05 15:18:29 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2013-08-05 16:03:48 -0700 |
commit | 32fce3edda831e36ee484406c39dffbe0230f257 (patch) | |
tree | 733b1b5398304b260a4ee3d5d9b17da5038c5486 /gcc-4.8/gcc/testsuite | |
parent | e85b9ca2afe8edbb9fa99c6ce2cc4e52dce18c21 (diff) | |
download | toolchain_gcc-32fce3edda831e36ee484406c39dffbe0230f257.tar.gz toolchain_gcc-32fce3edda831e36ee484406c39dffbe0230f257.tar.bz2 toolchain_gcc-32fce3edda831e36ee484406c39dffbe0230f257.zip |
[4.8] Merge GCC 4.8.1
Change-Id: Ic8a60b7563f5172440fd40788605163a0cca6e30
Diffstat (limited to 'gcc-4.8/gcc/testsuite')
206 files changed, 5168 insertions, 93 deletions
diff --git a/gcc-4.8/gcc/testsuite/ChangeLog b/gcc-4.8/gcc/testsuite/ChangeLog index 7054de647..cc15c702d 100644 --- a/gcc-4.8/gcc/testsuite/ChangeLog +++ b/gcc-4.8/gcc/testsuite/ChangeLog @@ -1,3 +1,652 @@ +2013-05-31 Release Manager + + * GCC 4.8.1 released. + +2013-05-26 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/specs/last_bit.ads: New test. + +2013-05-24 Greta Yorsh <Greta.Yorsh@arm.com> + + Backport from mainline + 2013-05-02 Greta Yorsh <Greta.Yorsh@arm.com> + + PR target/56732 + * gcc.target/arm/pr56732-1.c: New test. + +2013-05-24 Alexander Ivchenko <alexander.ivchenko@intel.com> + + PR tree-ssa/57385 + * gcc.dg/tree-ssa/pr57385.c: New test. + +2013-05-23 Martin Jambor <mjambor@suse.cz> + + PR middle-end/57347 + * gcc.dg/ipa/pr57347.c: New test. + +2013-05-23 Richard Biener <rguenther@suse.de> + + PR rtl-optimization/57341 + * gcc.dg/torture/pr57341.c: New testcase. + +2013-05-23 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/57344 + * gcc.c-torture/execute/pr57344-1.c: New test. + * gcc.c-torture/execute/pr57344-2.c: New test. + * gcc.c-torture/execute/pr57344-3.c: New test. + * gcc.c-torture/execute/pr57344-4.c: New test. + +2013-05-22 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2013-05-21 Richard Biener <rguenther@suse.de> + + PR tree-optimization/57330 + * gcc.dg/torture/pr57330.c: New testcase. + + 2013-05-21 Richard Biener <rguenther@suse.de> + + PR tree-optimization/57303 + * gcc.dg/torture/pr57303.c: New testcase. + +2013-05-21 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/57321 + * gcc.c-torture/execute/pr57321.c: New test. + +2013-05-17 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/57281 + PR rtl-optimization/57300 + * gcc.dg/pr57300.c: New test. + * gcc.c-torture/execute/pr57281.c: New test. + +2013-05-16 Dodji Seketeli <dodji@redhat.com> + + PR c++/56782 - Regression with empty pack expansions + * g++.dg/cpp0x/variadic142.C: New test file. + +2013-05-14 Jakub Jelinek <jakub@redhat.com> + + PR c++/57274 + * c-c++-common/Wsequence-point-1.c: New test. + + PR middle-end/57251 + * gcc.dg/torture/pr57251.c: New test. + +2013-05-13 Uros Bizjak <ubizjak@gmail.com> + + PR target/57264 + * gcc.target/i386/pr57264.c: New test. + +2013-05-13 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/57230 + * gcc.dg/strlenopt-23.c: New test. + +2013-05-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/57214 + * gcc.dg/torture/pr57214.c: New testcase. + +2013-05-09 Martin Jambor <mjambor@suse.cz> + + PR middle-end/56988 + * gcc.dg/ipa/pr56988.c: New test. + +2013-05-08 Marc Glisse <marc.glisse@inria.fr> + + * c-c++-common/vector-scalar-2.c: New testcase. + +2013-05-07 Tobias Burnus <burnus@net-b.de> + + Backport from mainline + 2013-05-02 Tobias Burnus <burnus@net-b.de> + + PR fortran/57142 + * gfortran.dg/size_kind_2.f90: New. + * gfortran.dg/size_kind_3.f90: New. + +2013-05-07 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/57149 + * gcc.dg/pr57149.c: New test. + + PR debug/57184 + * gcc.dg/pr57184.c: New test. + +2013-05-07 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2013-05-06 Richard Biener <rguenther@suse.de> + + PR tree-optimization/57185 + * gcc.dg/autopar/pr57185.c: New testcase. + + 2013-04-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/57000 + * gcc.dg/tree-ssa/reassoc-27.c: New testcase. + +2013-05-07 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/specs/array3.ads: New test. + +2013-05-06 Michael Meissner <meissner@linux.vnet.ibm.com> + + Backport from trunk + 2013-05-03 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/57150 + * gcc.target/powerpc/pr57150.c: New file. + +2013-05-06 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2013-05-06 Uros Bizjak <ubizjak@gmail.com> + + PR target/57106 + * gcc.target/i386/pr57106.c: New test. + +2013-05-06 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57183 + * g++.dg/cpp0x/auto38.C: New. + +2013-05-04 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/56205 + * gcc.dg/tree-ssa/stdarg-6.c: Add cleanup-tree-dump "stdarg". + +2013-05-03 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/57130 + * gcc.c-torture/execute/pr57130.c: New test. + +2013-05-03 Marek Polacek <polacek@redhat.com> + + Backport from mainline + 2013-04-25 Marek Polacek <polacek@redhat.com> + + PR tree-optimization/57066 + * gcc.dg/torture/builtin-logb-1.c: Adjust testcase. + +2013-05-02 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/57131 + * gcc.c-torture/execute/pr57131.c: New test. + +2013-05-02 Vladimir Makarov <vmakarov@redhat.com> + + Backport from mainline + PR target/57091 + * gcc.target/i386/pr57091.c: New test. + +2013-05-02 Vladimir Makarov <vmakarov@redhat.com> + + Backport from mainline + 2013-04-29 Vladimir Makarov <vmakarov@redhat.com> + + PR target/57097 + * gcc.target/i386/pr57097.c: New test. + +2013-05-02 Vladimir Makarov <vmakarov@redhat.com> + + Backport from mainline + 2013-04-24 Vladimir Makarov <vmakarov@redhat.com> + + PR rtl-optimizations/57046 + * gcc.target/i386/pr57046.c: New test. + +2013-05-02 Vladimir Makarov <vmakarov@redhat.com> + + Backport from mainline + 2013-04-22 Vladimir Makarov <vmakarov@redhat.com> + + PR target/57018 + * gcc.target/i386/pr57018.c: New test. + +2013-05-02 Vladimir Makarov <vmakarov@redhat.com> + + Backport from mainline + 2013-04-18 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/56999 + * g++.dg/opt/pr56999.C: New test. + +2013-05-02 Vladimir Makarov <vmakarov@redhat.com> + + Backport from mainline + 2013-04-19 Vladimir Makarov <vmakarov@redhat.com> + + PR rtl-optimization/56847 + * gcc.dg/pr56847.c: New test. + +2013-05-02 Ian Bolton <ian.bolton@arm.com> + + Backport from mainline (fix to botched commit) + 2013-04-04 Tejas Belagod <tejas.belagod@arm.com> + + * gcc.target/aarch64/inc/asm-adder-clobber-lr.c: Remove duplication. + * gcc.target/aarch64/inc/asm-adder-no-clobber-lr.c: Likewise. + * gcc.target/aarch64/test-framepointer-1.c: Likewise. + * gcc.target/aarch64/test-framepointer-2.c: Likewise. + * gcc.target/aarch64/test-framepointer-3.c: Likewise. + * gcc.target/aarch64/test-framepointer-4.c: Likewise. + * gcc.target/aarch64/test-framepointer-5.c: Likewise. + * gcc.target/aarch64/test-framepointer-6.c: Likewise. + * gcc.target/aarch64/test-framepointer-7.c: Likewise. + * gcc.target/aarch64/test-framepointer-8.c: Likewise. + + Backport from mainline + 2013-03-28 Ian Bolton <ian.bolton@arm.com> + + * gcc.target/aarch64/inc/asm-adder-clobber-lr.c: New test. + * gcc.target/aarch64/inc/asm-adder-no-clobber-lr.c: Likewise. + * gcc.target/aarch64/test-framepointer-1.c: Likewise. + * gcc.target/aarch64/test-framepointer-2.c: Likewise. + * gcc.target/aarch64/test-framepointer-3.c: Likewise. + * gcc.target/aarch64/test-framepointer-4.c: Likewise. + * gcc.target/aarch64/test-framepointer-5.c: Likewise. + * gcc.target/aarch64/test-framepointer-6.c: Likewise. + * gcc.target/aarch64/test-framepointer-7.c: Likewise. + * gcc.target/aarch64/test-framepointer-8.c: Likewise. + +2013-05-01 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57092 + * g++.dg/cpp0x/decltype53.C: New. + +2013-04-30 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/57104 + * gcc.dg/pr57104.c: New test. + +2013-04-30 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2013-04-29 Uros Bizjak <ubizjak@gmail.com> + + PR target/44578 + * gcc.target/i386/pr44578.c: New test. + + Backport from mainline + 2013-04-29 Uros Bizjak <ubizjak@gmail.com> + + PR target/57098 + * gcc.target/i386/pr57098.c: New test. + +2013-04-29 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/56450 + * g++.dg/cpp0x/decltype52.C: New. + +2013-04-29 Richard Biener <rguenther@suse.de> + + PR middle-end/57103 + * gcc.dg/autopar/pr57103.c: New testcase. + +2013-04-29 Christian Bruel <christian.bruel@st.com> + + PR target/57108 + * gcc.target/sh/pr57108.c: New test. + +2013-04-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/57083 + * gcc.dg/torture/pr57083.c: New test. + +2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + Backport from trunk: + + PR fortran/51825 + * gfortran.dg/namelist_77.f90: New test. + * gfortran.dg/namelist_78.f90: New test. + +2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/56786 + * gfortran.dg/namelist_81.f90: New test. + +2013-04-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + Backport from trunk: + + PR fortran/52512 + * gfortran.dg/namelist_79.f90: New test. + +2013-04-27 Jakub Jelinek <jakub@redhat.com> + + PR target/56866 + * gcc.c-torture/execute/pr56866.c: New test. + * gcc.target/i386/pr56866.c: New test. + +2013-04-26 Janus Weil <janus@gcc.gnu.org> + + Backports from trunk: + + PR fortran/56968 + * gfortran.dg/proc_ptr_41.f90: New. + + PR fortran/56814 + * gfortran.dg/proc_ptr_42.f90: New. + + PR fortran/53685 + PR fortran/57022 + * gfortran.dg/transfer_check_4.f90: New. + +2013-04-25 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/57003 + * gcc.target/i386/pr57003.c: New test. + +2013-04-25 Ian Bolton <ian.bolton@arm.com> + + Backported from mainline. + 2013-03-22 Ian Bolton <ian.bolton@arm.com> + + * gcc.target/aarch64/movk.c: New test. + +2013-04-24 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/56970 + * g++.dg/cpp0x/sfinae45.C: New. + +2013-04-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + Backported from mainline. + PR rtl-optimization/56605 + * gcc.target/powerpc/pr56605.c: New. + +2013-04-22 Marek Polacek <polacek@redhat.com> + + Backport from mainline + 2013-04-22 Marek Polacek <polacek@redhat.com> + + PR sanitizer/56990 + * gcc.dg/pr56990.c: New test. + +2013-04-22 Thomas Koenig <tkoenig@gcc.gnu.org> + Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/56872 + * gfortran.dg/array_constructor_45.f90: New test. + * gfortran.dg/array_constructor_46.f90: New test. + * gfortran.dg/array_constructor_47.f90: New test. + * gfortran.dg/array_constructor_40.f90: Adjust number of + while loops. + +2013-04-18 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/56816 + * gfortran.dg/select_type_33.f03: New test. + +2013-04-18 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/56984 + * gcc.c-torture/compile/pr56984.c: New test. + + PR rtl-optimization/56992 + * gcc.dg/pr56992.c: New test. + +2013-04-16 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2013-04-16 Uros Bizjak <ubizjak@gmail.com> + + * g++.dg/ipa/devirt-c-7.C: Require nonpic effective target. + * gcc.c-torture/execute/pr33992.x: Remove. + * gcc.c-torture/execute/pr33992.c (foo): Declare as static. + * gcc.dg/uninit-pred-5_a.c (foo): Ditto. + * gcc.dg/uninit-pred-5_b.c (foo): Ditto. + + Backport from mainline + 2013-03-27 Alexander Ivchenko <alexander.ivchenko@intel.com> + + * g++.dg/ipa/ivinline-1.C: Add target nonpic. + * g++.dg/ipa/ivinline-2.C: Likewise. + * g++.dg/ipa/ivinline-3.C: Likewise. + * g++.dg/ipa/ivinline-4.C: Likewise. + * g++.dg/ipa/ivinline-5.C: Likewise. + * g++.dg/ipa/ivinline-7.C: Likewise. + * g++.dg/ipa/ivinline-8.C: Likewise. + * g++.dg/ipa/ivinline-9.C: Likewise. + * g++.dg/cpp0x/noexcept03.C: Likewise. + * gcc.dg/const-1.c: Likewise. + * gcc.dg/ipa/pure-const-1.c: Likewise. + * gcc.dg/noreturn-8.c: Likewise. + * gcc.target/i386/mmx-1.c: Likewise. + * gcc.dg/tree-ssa/ipa-split-5.c: Likewise. + * gcc.dg/tree-ssa/loadpre6.c: Likewise. + * gcc.c-torture/execute/pr33992.x: New file. + +2013-04-15 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/56962 + * gcc.c-torture/execute/pr56962.c: New test. + +2013-04-15 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/pr56890-1.c: New test. + * gcc.dg/pr56890-2.c: Likewise. + +2013-04-12 Vladimir Makarov <vmakarov@redhat.com> + + PR target/56903 + * gcc.target/i386/pr56903.c: New test. + +2013-04-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/56918 + PR tree-optimization/56920 + * gcc.dg/vect/pr56918.c: New test. + * gcc.dg/vect/pr56920.c: New test. + +2013-04-11 Jakub Jelinek <jakub@redhat.com> + + PR c++/56895 + * g++.dg/template/arrow4.C: New test. + +2013-04-11 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/56913 + * g++.dg/cpp0x/sfinae44.C: New. + +2013-04-11 James Greenhalgh <james.greenhalgh@arm.com> + + Backported from mainline. + 2013-04-11 James Greenhalgh <james.greenhalgh@arm.com> + + * gcc.target/aarch64/vect-fcm.x: Add check for zero forms of + inverse operands. + * gcc.target/aarch64/vect-fcm-eq-d.c: Check that new zero form + loop is vectorized. + * gcc.target/aarch64/vect-fcm-eq-f.c: Likewise. + * gcc.target/aarch64/vect-fcm-ge-d.c: Check that new zero form + loop is vectorized and that the correct instruction is generated. + * gcc.target/aarch64/vect-fcm-ge-f.c: Likewise. + * gcc.target/aarch64/vect-fcm-gt-d.c: Likewise. + * gcc.target/aarch64/vect-fcm-gt-f.c: Likewise. + +2013-04-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/56899 + * gcc.c-torture/execute/pr56899.c: New test. + +2013-04-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/56895 + * g++.dg/template/arrow3.C: New test. + + Backported from mainline + 2013-04-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/56883 + * c-c++-common/gomp/pr56883.c: New test. + +2013-04-08 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/56782 + Backport from trunk. + * gfortran.dg/array_constructor_44.f90: New test. + +2013-04-08 Jakub Jelinek <jakub@redhat.com> + + * gcc.c-torture/execute/pr56837.c: New test. + +2013-04-04 Marek Polacek <polacek@redhat.com> + + Backport from mainline: + 2013-04-04 Marek Polacek <polacek@redhat.com> + + PR tree-optimization/48186 + * gcc.dg/pr48186.c: New test. + +2013-04-04 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + Backport from mainline: + 2013-03-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + PR target/56720 + * gcc.target/arm/neon-vcond-gt.c: New test. + * gcc.target/arm/neon-vcond-ltgt.c: Likewise. + * gcc.target/arm/neon-vcond-unordered.c: Likewise. + +2013-04-04 Richard Biener <rguenther@suse.de> + + PR tree-optimization/56837 + * g++.dg/torture/pr56837.C: New testcase. + +2013-04-03 Marek Polacek <polacek@redhat.com> + + Backport from mainline: + 2013-04-03 Marek Polacek <polacek@redhat.com> + + PR sanitizer/55702 + * gcc.dg/pr55702.c: New test. + +2013-04-03 Jakub Jelinek <jakub@redhat.com> + + PR debug/56819 + * g++.dg/debug/pr56819.C: New test. + +2013-04-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/56817 + * g++.dg/torture/pr56817.C: New testcase. + +2013-04-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/55964 + * gcc.dg/torture/pr55964-2.c: New testcase. + +2013-04-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/56501 + * gcc.dg/torture/pr56501.c: New testcase. + +2013-04-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/56407 + * gcc.dg/torture/pr56407.c: New testcase. + +2013-04-02 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/56745 + * gcc.c-torture/compile/pr56745.c: New test. + +2013-04-02 Tobias Burnus <burnus@net-b.de> + + Backport from mainline: + 2013-03-28 Tobias Burnus <burnus@net-b.de> + + PR fortran/56735 + * gfortran.dg/namelist_80.f90: New. + +2013-04-02 Tobias Burnus <burnus@net-b.de> + + Backport from mainline: + 2013-03-29 Tobias Burnus <burnus@net-b.de> + + PR fortran/56737 + * testsuite/gfortran.dg/fmt_cache_3.f90: New. + +2013-04-02 Richard Biener <rguenther@suse.de> + + PR middle-end/56768 + * g++.dg/torture/pr56768.C: New testcase. + +2013-04-01 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/55951 + * g++.dg/ext/desig5.C: New. + +2013-03-29 Kirill Yukhin <kirill.yukhin@intel.com> + + * gcc.target/i386/avx2-vbroadcastsi128-1.c: Fix intrinsic name. + * gcc.target/i386/avx2-vbroadcastsi128-1.c: Ditto. + +2013-03-28 Tejas Belagod <tejas.belagod@arm.com> + + PR middle-end/56694 + * g++.dg/torture/pr56694.C: Fix test case to build on bare-metal + targets. + +2013-03-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/56722 + * g++.dg/cpp0x/range-for23.C: New. + +2013-03-25 Richard Biener <rguenther@suse.de> + + PR middle-end/56694 + * g++.dg/torture/pr56694.C: New testcase. + +2013-03-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + Backport from mainline: + 2013-03-20 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR fortran/54932 + * gfortran.dg/do_1.f90: Don't xfail. + +2013-03-24 Tobias Burnus <burnus@net-b.de> + + PR fortran/56696 + * gfortran.dg/eof_5.f90: New. + +2013-03-22 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * gcc.c-torture/execute/builtins/builtins.exp: Sort targets + alphabetically. + +2013-03-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/56582 + * g++.dg/cpp0x/constexpr-array5.C: New. + +2013-03-22 H.J. Lu <hongjiu.lu@intel.com> + + PR target/56560 + * gcc.target/i386/pr56560.c: New file. + +2013-03-22 Sebastian Huber <sebastian.huber@embedded-brains.de> + + PR testsuite/55994 + * gcc.c-torture/execute/builtins/builtins.exp: Add + -Wl,--allow-multiple-definition for RTEMS targets. + +2013-03-22 Jakub Jelinek <jakub@redhat.com> + + Backported from mainline + 2013-03-16 Jakub Jelinek <jakub@redhat.com> + + PR c++/56607 + * g++.dg/warn/Wdiv-by-zero-2.C: New test. + * c-c++-common/pr56607.c: New test. + 2013-03-22 Release Manager * GCC 4.8.0 released. @@ -14,8 +663,8 @@ 2013-03-15 Tobias Burnus <burnus@net-b.de> - PR fortran/56615 - * gfortran.dg/transfer_intrinsic_5.f90: New. + PR fortran/56615 + * gfortran.dg/transfer_intrinsic_5.f90: New. 2013-03-15 Kai Tietz <ktietz@redhat.com> @@ -181,8 +830,7 @@ 2013-03-06 Kai Tietz <ktietz@redhat.com> - * gcc.dg/lto/20090914-2_0.c: Skip for mingw and cygwin - targets. + * gcc.dg/lto/20090914-2_0.c: Skip for mingw and cygwin targets. * gcc.dg/lto/20091013-1_1.c: Set x64-mingw as xfail. * gcc.dg/lto/20091013-1_2.c: Likewise. * gcc.dg/pr31490.c: Adjust for LLP64 targets. @@ -644,8 +1292,10 @@ Avoid instrumenting duplicated memory access in the same basic block * c-c++-common/asan/no-redundant-instrumentation-1.c: New test. - * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise. - * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise. + * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c: + Likewise. + * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c: + Likewise. * testsuite/c-c++-common/asan/inc.c: Likewise. 2013-02-12 Vladimir Makarov <vmakarov@redhat.com> @@ -657,8 +1307,7 @@ Tobias Burnus <burnus@net-b.de> PR testsuite/56082 - * gfortran.dg/bind_c_bool_1.f90 (sub): Change kind=4 - to kind=2. + * gfortran.dg/bind_c_bool_1.f90 (sub): Change kind=4 to kind=2. 2013-02-12 Richard Biener <rguenther@suse.de> @@ -865,7 +1514,8 @@ 2013-02-06 Janus Weil <janus@gcc.gnu.org> PR fortran/55978 - * gfortran.dg/class_optional_2.f90: Uncomment some cases which work now. + * gfortran.dg/class_optional_2.f90: Uncomment some cases + which work now. 2013-02-06 Jakub Jelinek <jakub@redhat.com> diff --git a/gcc-4.8/gcc/testsuite/ChangeLog-2012 b/gcc-4.8/gcc/testsuite/ChangeLog-2012 index 6687189a2..90e08399a 100644 --- a/gcc-4.8/gcc/testsuite/ChangeLog-2012 +++ b/gcc-4.8/gcc/testsuite/ChangeLog-2012 @@ -1396,12 +1396,12 @@ * gcc.target/powerpc/ppc-pow.c: Allow dot symbols in branch. * gcc.target/powerpc/tfmode_off.c: Skip on AIX. -2012-11-07 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-11-07 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/53063 * gcc.dg/warn-nsstring.c: Use -Wformat explicitly. -2012-11-07 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-11-07 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/51294 * c-c++-common/pr51294.c: New. @@ -1782,7 +1782,7 @@ PR middle-end/55116 * gcc.target/i386/pr55116.c: New file. -2012-10-29 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-10-29 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/53066 * gcc.dg/Wshadow-4.c: New. @@ -2211,7 +2211,7 @@ * gcc.dg/webizer.c (main): Add missing exit call. -2012-10-21 Thomas König <tkoenig@gcc.gnu.org> +2012-10-21 Thomas König <tkoenig@gcc.gnu.org> PR fortran/54465 * gfortran.dg/wextra_1.f: New test. @@ -2294,7 +2294,7 @@ * gcc.dg/tree-ssa/ldist-17.c: Block cunroll to make testcase still valid. -2012-10-16 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-10-16 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/53063 PR c/40989 @@ -3100,7 +3100,7 @@ * go.test/go-test.exp: Update for latest version of Go testsuite. -2012-09-29 Thomas König <tkoenig@gcc.gnu.org> +2012-09-29 Thomas König <tkoenig@gcc.gnu.org> PR fortran/52724 * gfortran.dg/internal_readwrite_3.f90: New test. @@ -3605,7 +3605,7 @@ * g++.dg/torture/builtin-location.C: New testcase. 2012-09-13 Paolo Carlini <paolo.carlini@oracle.com> - Manuel López-Ibáñez <manu@gcc.gnu.org> + Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/53210 * g++.dg/warn/Wuninitialized-self.C: New. @@ -4466,7 +4466,7 @@ PR fortran/54301 * gfortran.dg/warn_target_lifetime_1.f90: New. -2012-08-19 Thomas König <tkoenig@gcc.gnu.org> +2012-08-19 Thomas König <tkoenig@gcc.gnu.org> PR fortran/54298 * gfortran.dg/real_compare_1.f90: New test case. @@ -4921,7 +4921,7 @@ * gcc.dg/tree-ssa/pta-ptrarith-1.c: Likewise. * gcc.dg/tree-ssa/pta-ptrarith-2.c: Likewise. -2012-08-01 Thomas König <tkoenig@gcc.gnu.org> +2012-08-01 Thomas König <tkoenig@gcc.gnu.org> PR fortran/54033 * gfortran.dg/include_6.f90: New test case. @@ -5394,7 +5394,7 @@ * g++.dg/parse/access8.C: Adjust. * g++.dg/template/sfinae6_neg.C: Adjust. -2012-07-16 Thomas König <tkoenig@gcc.gnu.org> +2012-07-16 Thomas König <tkoenig@gcc.gnu.org> PR fortran/53824 * gfortran.dg/coarray_allocate_1.f90: New test. @@ -6425,12 +6425,12 @@ PR middle-end/53535 * gcc.dg/pr46647.c: xfail for cris-* and crisv32-*. -2012-06-07 Thomas König <tkoenig@gcc.gnu.org> +2012-06-07 Thomas König <tkoenig@gcc.gnu.org> PR fortran/52861 * gfortran.dg/string_assign_2.f90: New test case. -2012-06-07 Thomas König <tkoenig@gcc.gnu.org> +2012-06-07 Thomas König <tkoenig@gcc.gnu.org> PR fortran/52861 * gfortran.dg/string_assign_1.f90: New test case. @@ -6446,7 +6446,7 @@ * gfortran.dg/gomp/appendix-a/a.35.6.f90: Likewise. * c-c++-common/gomp/pr53580.c: New test. -2012-06-07 Fabien Chêne <fabien@gcc.gnu.org> +2012-06-07 Fabien Chêne <fabien@gcc.gnu.org> PR c++/51214 * g++.dg/cpp0x/forw_enum11.C: New. @@ -6474,7 +6474,7 @@ * gfortran.dg/vect/pr32380.f: Adjust number of expected vectorized loops. -2012-06-06 Fabien Chêne <fabien@gcc.gnu.org> +2012-06-06 Fabien Chêne <fabien@gcc.gnu.org> PR c++/52841 * g++.dg/cpp0x/pr52841.C: New testcase. @@ -7262,7 +7262,7 @@ * gnat.dg/discr36.ad[sb]: New test. * gnat.dg/discr36_pkg.ad[sb]: New helper. -2012-05-05 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-05-05 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/43772 * c-c++-common/pr43772.c: New. @@ -7324,7 +7324,7 @@ * gcc.target/ia64/pr48496.c: New test. * gcc.target/ia64/pr52657.c: Likewise. -2012-05-04 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-05-04 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c/51712 * c-c++-common/pr51712.c: New. @@ -7567,7 +7567,7 @@ * gnat.dg/warn6.ad[sb]: New test. -2012-04-29 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-29 Manuel López-Ibáñez <manu@gcc.gnu.org> PR 53149 * gcc.dg/20011021-1.c: Adjust testcase. @@ -7675,7 +7675,7 @@ PR c/52880 * gcc.dg/pr52880.c: New test. -2012-04-25 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-25 Manuel López-Ibáñez <manu@gcc.gnu.org> * gcc.dg/m-un-2.c: Update. * gcc.dg/20011021-1.c: Update. @@ -7758,7 +7758,7 @@ PR fortran/53051 * gfortran.dg/read_float_4.f90: New. -2012-04-21 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-21 Manuel López-Ibáñez <manu@gcc.gnu.org> PR 35441 * c-c++-common/pr35441.C: New. @@ -7793,7 +7793,7 @@ * gcc.dg/pr52283.c: New test. -2012-04-19 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-19 Manuel López-Ibáñez <manu@gcc.gnu.org> * gcc.dg/pr37985.c: New test. @@ -8041,12 +8041,12 @@ * gcc/target/sh/pr50751-6.c: New. * gcc/target/sh/pr50751-7.c: New. -2012-04-11 Fabien Chêne <fabien@gcc.gnu.org> +2012-04-11 Fabien Chêne <fabien@gcc.gnu.org> PR c++/52465 * g++.dg/lookup/using52.C: New. -2012-04-11 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-11 Manuel López-Ibáñez <manu@gcc.gnu.org> * lib/prune.exp (TEST_ALWAYS_FLAGS): If undefined, set to empty. @@ -8142,7 +8142,7 @@ * gcc.dg/builtin-bswap-5.c: Likewise. * gcc.target/i386/builtin-bswap-4.c: New test. -2012-04-11 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-11 Manuel López-Ibáñez <manu@gcc.gnu.org> PR 24985 * lib/prune.exp: Add -fno-diagnostics-show-caret. @@ -8251,7 +8251,7 @@ PR fortran/52751 * gfortran.dg/public_private_module_2.f90: New. -2012-04-08 Manuel López-Ibáñez <manu@gcc.gnu.org> +2012-04-08 Manuel López-Ibáñez <manu@gcc.gnu.org> * g++.dg/warn/Wstrict-aliasing-float-ref-int-obj.C: Add labels to directives. @@ -9486,7 +9486,7 @@ PR c++/52248 * g++.dg/ext/timevar1.C: New. -2012-02-16 Fabien Chêne <fabien@gcc.gnu.org> +2012-02-16 Fabien Chêne <fabien@gcc.gnu.org> PR c++/52126 * g++.dg/template/using21.C: New. @@ -9821,7 +9821,7 @@ PR fortran/51514 * gfortran.dg/class_to_type_2.f90: New. -2012-02-06 Thomas König <tkoenig@gcc.gnu.org> +2012-02-06 Thomas König <tkoenig@gcc.gnu.org> PR fortran/32373 * gfortran.dg/vect/vect-8.f90: Use vect_double effective target. @@ -9847,12 +9847,12 @@ * gcc.dg/pr48374.c: Actually add the test I forgot in the 2012-01-25 commit. -2012-02-05 Thomas König <tkoenig@gcc.gnu.org> +2012-02-05 Thomas König <tkoenig@gcc.gnu.org> PR fortran/32373 * gfortran.dg/vect/vect-8.f90: New test case. -2012-02-05 Thomas König <tkoenig@gcc.gnu.org> +2012-02-05 Thomas König <tkoenig@gcc.gnu.org> PR fortran/48847 * gfortran.dg/warn_unused_dummy_argument_3.f90: New test. @@ -9944,7 +9944,7 @@ PR tree-optimization/52073 * gcc.c-torture/compile/pr52073.c: New test. -2012-02-01 Thomas König <tkoenig@gcc.gnu.org> +2012-02-01 Thomas König <tkoenig@gcc.gnu.org> PR fortran/51958 * gfortran.dg/function_optimize_10.f90: New test. @@ -11127,7 +11127,7 @@ * g++.dg/cpp0x/constexpr-delegating2.C: Add missing piece. -2012-01-01 Fabien Chêne <fabien@gcc.gnu.org> +2012-01-01 Fabien Chêne <fabien@gcc.gnu.org> * g++.old-deja/g++.brendan/crash25.C: Adjust. * g++.old-deja/g++.brendan/crash56.C: Likewise. diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/Wsequence-point-1.c b/gcc-4.8/gcc/testsuite/c-c++-common/Wsequence-point-1.c new file mode 100644 index 000000000..60dd55bbb --- /dev/null +++ b/gcc-4.8/gcc/testsuite/c-c++-common/Wsequence-point-1.c @@ -0,0 +1,17 @@ +/* PR c++/57274 */ +/* { dg-do compile } */ +/* { dg-options "-Wsequence-point" } */ + +void foo (int, int); + +void +bar (int *x) +{ + foo (*x++, sizeof (*x)); /* { dg-bogus "may be undefined" } */ +} + +void +baz (int *x) +{ + foo (*x, sizeof (*x++) + sizeof (*x++)); /* { dg-bogus "may be undefined" } */ +} diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr56883.c b/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr56883.c new file mode 100644 index 000000000..443906d86 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/c-c++-common/gomp/pr56883.c @@ -0,0 +1,57 @@ +/* PR middle-end/56883 */ +/* { dg-do compile } +/* { dg-options "-O2 -fopenmp" } */ + +void +f1 (int ***x) +{ + int i, j, k; +#pragma omp parallel for + for (i = 0; i < 10; ++i) + { + #pragma omp parallel shared(j) + #pragma omp for + for (j = 0; j < 10; ++j) + { + #pragma omp parallel for + for (k = 0; k < 10; ++k) + x[i][j][k] = k; + } + } +} + +void +f2 (int ***x) +{ + int i, j, k; +#pragma omp parallel for schedule(static,1) + for (i = 0; i < 10; ++i) + { + #pragma omp parallel shared(j) + #pragma omp for schedule(static,1) + for (j = 0; j < 10; ++j) + { + #pragma omp parallel for schedule(static,1) + for (k = 0; k < 10; ++k) + x[i][j][k] = k; + } + } +} + +void +f3 (int ***x) +{ + int i, j, k; +#pragma omp parallel for schedule(runtime) + for (i = 0; i < 10; ++i) + { + #pragma omp parallel shared(j) + #pragma omp for schedule(runtime) + for (j = 0; j < 10; ++j) + { + #pragma omp parallel for schedule(runtime) + for (k = 0; k < 10; ++k) + x[i][j][k] = k; + } + } +} diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/pr56607.c b/gcc-4.8/gcc/testsuite/c-c++-common/pr56607.c new file mode 100644 index 000000000..d7faa8115 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/c-c++-common/pr56607.c @@ -0,0 +1,29 @@ +/* PR c++/56607 */ +/* { dg-do compile { target { { lp64 || ilp32 } || llp64 } } } */ +/* { dg-options "-O2 -Wdiv-by-zero" } */ + +int +f1 (void) +{ + return 1 / (sizeof (char) - 1); /* { dg-warning "division by zero" } */ +} + +int +f2 (void) +{ + const int x = sizeof (char) - 1; + return 1 / x; /* { dg-warning "division by zero" "" { target c++ } } */ +} + +int +f3 (void) +{ + return 1 / (sizeof (int) / 3 - 1); /* { dg-warning "division by zero" } */ +} + +int +f4 (void) +{ + const int x = sizeof (int) / 3 - 1; + return 1 / x; /* { dg-warning "division by zero" "" { target c++ } } */ +} diff --git a/gcc-4.8/gcc/testsuite/c-c++-common/vector-scalar-2.c b/gcc-4.8/gcc/testsuite/c-c++-common/vector-scalar-2.c new file mode 100644 index 000000000..f624c4c75 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/c-c++-common/vector-scalar-2.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-fdump-tree-gimple" } */ + +typedef int veci __attribute__ ((vector_size (4 * sizeof (int)))); + +int c; + +void f (veci *a) +{ + *a = *a + ++c; +} + +/* { dg-final { scan-tree-dump-times " \\\+ 1" 1 "gimple" } } */ +/* { dg-final { cleanup-tree-dump "gimple" } } */ diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C new file mode 100644 index 000000000..4306ab703 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-34.C @@ -0,0 +1,23 @@ +// PR c++/57222 +// { dg-require-effective-target c++11 } + +template <template <typename T> class Templ> +using Bool = Templ<bool>; + +template <typename T> +class Foo { +private: +public: + template<template<typename U> class Templ> + void method(Bool<Templ> boolTempl); +}; + +template <typename T> +template <template <typename U> class Templ> +void Foo<T>::method(Bool<Templ> boolTempl) { +} + +int main() { + Foo<char> foo; + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C new file mode 100644 index 000000000..f412b302d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/alias-decl-35.C @@ -0,0 +1,9 @@ +// PR c++/57279 +// { dg-require-effective-target c++11 } + +typedef void fc1() const; // OK +typedef void frr1() &&; // OK +typedef void fcr1() const &; +using fc2 = void() const; // #4 +using frr2 = void() &&; // OK +using fcr2 = void() const &; // #6 diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto38.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto38.C new file mode 100644 index 000000000..070a39b9e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/auto38.C @@ -0,0 +1,8 @@ +// PR c++/57183 +// { dg-do compile { target c++11 } } +// { dg-options "-Wunused-variable" } + +constexpr float PI_0 = 3.1415926F; +constexpr auto PI_1 = 3.1415926F; +const float PI_2 = 3.1415926F; +const auto PI_3 = 3.1415926F; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C new file mode 100644 index 000000000..ee425ea1a --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C @@ -0,0 +1,54 @@ +// PR c++/57047 +// { dg-require-effective-target c++11 } + +template <typename> +struct A; +template <typename T> +struct A <T &> +{ + typedef T type; +}; +template <typename T> +constexpr T && foo (typename A <T>::type & __t) noexcept +{ + return static_cast <T &&>(__t); +} +template <class T1, class T2> +struct B +{ + T1 t1; + T2 t2; + template <class U> + constexpr B (U && __x, const T2 & __y) : t1 (foo <U> (__x)), t2 (__y) {} +}; +static inline constexpr bool +fn1 (const char c) +{ + return ('0' <= c) && (c <= '9'); +} +static inline constexpr bool +fn2 (const char c) +{ + return (('A' <= c) && (c <= 'Z')) || (('a' <= c) && (c <= 'z')); +} +static constexpr bool +fn3 (const char *const x) +{ + return (x[1] == '\0' && x[0] == ']') ? true : (!fn1 (x[0])) ? false : fn3 (&x[1]); +} +static constexpr bool +fn4 (const char *const x) +{ + return (x[0] == '\0') ? fn3 (&x[1]) : fn4 (&x[1]); +} +static inline constexpr bool +fn5 (const char *const x) +{ + return fn2 (x[0]) ? fn4 (x) : false; +} +struct C final +{ + constexpr C (const char *const t1) : c (fn5 (t1) ? 199 : 69) {} + unsigned c; +}; +B <C, C> p ("a", "b"); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C new file mode 100644 index 000000000..4605b4be9 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-array5.C @@ -0,0 +1,9 @@ +// PR c++/56582 +// { dg-do compile { target c++11 } } + +// Reliable ICE +constexpr int n[3] = {}; +constexpr int k = n[-1]; // { dg-error "negative" } + +// Some random byte +constexpr char c = "foo"[-1000]; // { dg-error "negative" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C new file mode 100644 index 000000000..30bbc18a1 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/constexpr-reinterpret1.C @@ -0,0 +1,39 @@ +// PR c++/56728 +// { dg-require-effective-target c++11 } + +// { dg-prune-output "error" } + +class B { +public: + static B instance; + class Inner + { + public: + class Wuzi + { + unsigned int m; + } m_Class[3]; + unsigned m_Int[4]; + }; + + constexpr static Inner & getInner() + { + /* I am surprised this is considered a constexpr */ + return *((Inner *)4); + } +}; + +B B::instance; + +class A +{ +public: + constexpr A(B &bridge, B::Inner &bridge2, unsigned char index) + : m_Bridge(bridge), m_Wuz(bridge2.m_Class[index]) + {} + + B &m_Bridge; + B::Inner::Wuzi &m_Wuz; +}; +A works{B::instance, B::getInner(), 3}; +A crashnkill[1]{{B::instance, B::getInner(), 3}}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C new file mode 100644 index 000000000..2616bb090 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype-call1.C @@ -0,0 +1,32 @@ +// PR c++/52748 +// N3276 +// { dg-do compile { target c++11 } } + +struct A; // { dg-error "forward declaration" } +A f(); + +decltype(f()) g1(); // OK +decltype(((f()))) g2b(); // OK +decltype(42,f()) g3(); // OK +decltype(42,45,f()) g3b(); // OK +decltype(42,45,(f())) g3c(); // OK +decltype(42,((45,(f())))) g3c(); // OK + +decltype(f(),42) g4(); // { dg-error "" } +decltype(45,f(),42) g4b(); // { dg-error "" } + +class B +{ + ~B(); // { dg-error "private" } +public: + int i; + void operator[](int); +}; +B h(); + +void i(const B&); + +decltype(h()) g5a(); // OK +decltype(h().i) g5(); // { dg-error "" } +decltype(h()[0]) g6(); // { dg-error "" } +decltype(i(h())) g7(); // { dg-error "" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C new file mode 100644 index 000000000..27797a2fa --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype-call3.C @@ -0,0 +1,132 @@ +// Testcase for N3276 and operator overloading +// { dg-require-effective-target c++11 } + +struct A; +struct B { + A operator()(int); + A operator[](int); + A operator=(int); + A operator+=(int); + A operator-=(int); + A operator*=(int); + A operator/=(int); + A operator^=(int); + A operator&=(int); + A operator|=(int); + A operator<<=(int); + A operator>>=(int); +}; + +A operator-(B); +A operator+(B); +A operator*(B); +A operator&(B); +A operator!(B); +A operator~(B); +A operator++(B); +A operator--(B); + +A operator+(B,B); +A operator-(B,B); +A operator*(B,B); +A operator/(B,B); +A operator%(B,B); +A operator^(B,B); +A operator&(B,B); +A operator|(B,B); +A operator<(B,B); +A operator>(B,B); +A operator,(B,B); +A operator<<(B,B); +A operator>>(B,B); +A operator==(B,B); +A operator->*(B,B); + +#define TRY(E) static_cast<decltype(E)*>(0) + +template <class B> +void f() +{ + B b; + TRY(b(0)); + TRY(b[0]); + TRY(b=0); + TRY(b+=0); + TRY(b-=0); + TRY(b*=0); + TRY(b/=0); + TRY(b^=0); + TRY(b&=0); + TRY(b|=0); + TRY(b<<=0); + TRY(b>>=0); + + TRY(-b); + TRY(+b); + TRY(*b); + TRY(&b); + TRY(!b); + TRY(~b); + TRY(++b); + TRY(--b); + + TRY(b+b); + TRY(b-b); + TRY(b*b); + TRY(b/b); + TRY(b%b); + TRY(b^b); + TRY(b&b); + TRY(b|b); + TRY(b>b); + TRY(b<b); + TRY((b,b)); + TRY(b<<b); + TRY(b>>b); + TRY(b==b); + TRY(b->*b); +} + +int main() +{ + B b; + TRY(b(0)); + TRY(b[0]); + TRY(b=0); + TRY(b+=0); + TRY(b-=0); + TRY(b*=0); + TRY(b/=0); + TRY(b^=0); + TRY(b&=0); + TRY(b|=0); + TRY(b<<=0); + TRY(b>>=0); + + TRY(-b); + TRY(+b); + TRY(*b); + TRY(&b); + TRY(!b); + TRY(~b); + TRY(++b); + TRY(--b); + + TRY(b+b); + TRY(b-b); + TRY(b*b); + TRY(b/b); + TRY(b%b); + TRY(b^b); + TRY(b&b); + TRY(b|b); + TRY(b>b); + TRY(b<b); + TRY((b,b)); + TRY(b<<b); + TRY(b>>b); + TRY(b==b); + TRY(b->*b); + + f<B>(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype49.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype49.C new file mode 100644 index 000000000..c3174982f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype49.C @@ -0,0 +1,10 @@ +// PR c++/45282 +// { dg-require-effective-target c++11 } + +struct A { int i; }; +int A::*ipm = &A::i; + +template <class T, class U> class assert_same_type; +template <class T> class assert_same_type<T,T> { }; + +assert_same_type<decltype(A().*ipm),int> x2; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype52.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype52.C new file mode 100644 index 000000000..e6b5a4caf --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype52.C @@ -0,0 +1,18 @@ +// PR c++/56450 +// { dg-do compile { target c++11 } } + +template<typename T> +T&& declval(); + +template<typename, typename> +struct is_same +{ static constexpr bool value = false; }; + +template<typename T> +struct is_same<T, T> +{ static constexpr bool value = true; }; + +struct A { static const int dummy = 0; }; + +static_assert(is_same<decltype(declval<A>().dummy), const int>::value, ""); +static_assert(!is_same<decltype(declval<A>().dummy), const int&>::value, ""); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype53.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype53.C new file mode 100644 index 000000000..4580e97b7 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/decltype53.C @@ -0,0 +1,11 @@ +// PR c++/57092 +// { dg-do compile { target c++11 } } + +template <void (*F)(int)> +class B { + decltype(F) v; +}; + +void foo(int) {} + +B<foo> o; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted42.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted42.C new file mode 100644 index 000000000..1ac25a90b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/defaulted42.C @@ -0,0 +1,10 @@ +// DR 941 +// { dg-require-effective-target c++11 } + +template <class T> T f(T) = delete; +template<> int f(int) { return 42; } + +int main() +{ + f(42); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum24.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum24.C new file mode 100644 index 000000000..dd6678e1e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum24.C @@ -0,0 +1,57 @@ +// PR c++/56749 +// { dg-require-effective-target c++11 } + +enum normal_enum +{ + not_scoped1, + not_scoped2 +}; + +enum class scoped_enum +{ + scoped1, + scoped2 +}; + +template <normal_enum N=not_scoped1> +class A +{ +public: + template <typename T> + void fun () + { + } +}; + +template <scoped_enum N=scoped_enum::scoped1> +class B +{ +public: + template <typename T> + void fun () + { + } +}; + + +template <typename T> +void tfun () +{ + A<> a; + a.fun<char>(); //<------------ THIS IS FINE + + B<> b_defaulted; + B<scoped_enum::scoped1> b_explicited; + + b_defaulted.fun<char>(); //<------------ UNEXPECTED: THIS FAILS + b_defaulted.template fun<char>(); //<------------ THIS IS FINE + + b_explicited.fun<char>(); //<------------ UNEXPECTED: THIS FAILS + b_explicited.template fun<char>();//<------------ THIS IS FINE +} + +int main(int argc, char const *argv[]) +{ + tfun<int>(); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum25.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum25.C new file mode 100644 index 000000000..cb2cf8f53 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/enum25.C @@ -0,0 +1,18 @@ +// PR c++/56793 +// { dg-require-effective-target c++11 } + +struct A +{ + enum struct B {X, Y} b; +} a; + +enum struct D {X,Y}; +struct C { } c; + +int main () +{ + if (a.b == a.B::Y) + a.b = A::B::X; + + c.D::Y; // { dg-error "not a member" } +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C index bad33d6e8..dff46b4af 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-4.C @@ -3,17 +3,17 @@ // Test for syntax support of various attribute permutations. int -[[gnu::noreturn]] // { dg-warning "ignored" } +[[noreturn]] // { dg-warning "ignored" } one [[gnu::unused]] (void); -int one_third [[gnu::noreturn]] [[gnu::unused]] (void); +int one_third [[noreturn]] [[gnu::unused]] (void); int [[gnu::unused]] one_half(); // { dg-warning "ignored" } static -[[gnu::noreturn]] // { dg-warning "ignored" } +[[noreturn]] // { dg-warning "ignored" } void two [[gnu::unused]] (void) {} @@ -21,10 +21,10 @@ void two [[gnu::unused]] (void) {} [[gnu::unused]] int five(void) -[[gnu::noreturn]] // { dg-warning "ignored" } +[[noreturn]] // { dg-warning "ignored" } {} -[[gnu::noreturn]] +[[noreturn]] void six (void) ; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C new file mode 100644 index 000000000..45aa8e475 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/gen-attrs-54.C @@ -0,0 +1,14 @@ +// PR c++/56859 +// { dg-require-effective-target c++11 } + +template<unsigned size, unsigned alignment> +struct aligned_storage +{ + using type = struct { alignas(alignment) unsigned char data[size]; }; +}; + +#define SA(X) static_assert((X),#X) +SA(alignof(aligned_storage<8,1>::type) == 1); +SA(alignof(aligned_storage<8,2>::type) == 2); +SA(alignof(aligned_storage<8,4>::type) == 4); +SA(alignof(aligned_storage<8,8>::type) == 8); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist68.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist68.C new file mode 100644 index 000000000..7cfe1a34b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist68.C @@ -0,0 +1,20 @@ +// PR c++/56772 +// { dg-require-effective-target c++11 } + +typedef __SIZE_TYPE__ size_t; +void* operator new[](size_t, void *p) { return p; } +template <typename T = size_t> +void f () +{ + size_t coord [2][2]; + new (&coord) size_t [2][2] + { + {0,0}, + {0,0}, + }; +} + +int main () +{ + f<>(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist69.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist69.C new file mode 100644 index 000000000..5d59dfeaa --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist69.C @@ -0,0 +1,29 @@ +// PR c++/50261 +// { dg-require-effective-target c++11 } + +template <typename T> +struct ca { + T elem[1]; + + ca(const T (&s)[1]): elem{{s}} { } // { dg-error "braces" } + ca(const T (&s)[1],int): elem({{s}}) { } // { dg-error "paren|invalid" } + ca(const T (&s)[1],char): elem(s) { } // { dg-error "array" } + ca(const T (&s)[1],double): elem{s} { } // { dg-error "invalid" } + + ca(const T &v): elem{{v}} { } // { dg-error "braces" } + ca(const T &v,int): elem{{{v}}} { } // { dg-error "braces" } + ca(const T &v,char): elem{v} { } // OK + ca(const T &v,double): elem({v}) { } // { dg-error "paren" } +}; + +int main() { + int a[1] = {0}; + ca<int> d(a); + ca<int> d1(a,1); + ca<int> d2(a,'2'); + ca<int> d3(a,3.0); + ca<int> e(a[0]); + ca<int> e1(a[0],1); + ca<int> e2(a[0],'2'); + ca<int> e3(a[0],3.0); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist70.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist70.C new file mode 100644 index 000000000..f215b9d79 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/initlist70.C @@ -0,0 +1,27 @@ +// PR c++/57196 +// { dg-require-effective-target c++11 } + +#include <initializer_list> + +template<class T> +struct set { + set() = default; + set(std::initializer_list<T>){} +}; + +struct string { + string(const char*){} + ~string(){} +}; + +typedef decltype(sizeof(0)) size_t; + +template <size_t> struct EqHelper { }; + +int IsNullLiteralHelper(...); + +void Fn() { + EqHelper<sizeof IsNullLiteralHelper(set<int>{1})> eq1; // ok + EqHelper<sizeof IsNullLiteralHelper(set<string>())> eq2; // ok + EqHelper<sizeof IsNullLiteralHelper(set<string>{"foo"})> eq3; // error +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C new file mode 100644 index 000000000..abe272a8b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv8.C @@ -0,0 +1,15 @@ +// PR c++/56447 +// { dg-do compile { target c++11 } } + +template <class T> +void f() +{ + int i; + // This lambda should not have a conversion op, since it captures i + int (*p)() = [=]{ return i; }; // { dg-error "cannot convert" } +} + +int main() +{ + f<int>(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C new file mode 100644 index 000000000..221795459 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-defarg4.C @@ -0,0 +1,8 @@ +// PR c++/54764 +// { dg-require-effective-target c++11 } + +template<class T = void> +struct c +{ + int (*f)(int) = [](int i){return i + i;}; +}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C new file mode 100644 index 000000000..10dc6e36d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C @@ -0,0 +1,14 @@ +// PR c++/56388 +// { dg-require-effective-target c++11 } + +int main() +{ + bool /*const*/ condition = false; + + [&]{ + try{} + catch(...){ + if(condition){} + } + }(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C new file mode 100644 index 000000000..c54ff5c84 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mutable2.C @@ -0,0 +1,23 @@ +// PR c++/55532 +// { dg-do compile { target c++11 } } + +struct Foo { + void doit() { + } +}; + +template<typename T> +void oops(Foo &foo, const T &) { + auto fun = [&] () mutable { + foo.doit(); + }; + auto fun2 = [=]() { + fun(); // { dg-error "" } + }; + fun2(); +} + +int main() { + Foo foo; + oops(foo, 1); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C new file mode 100644 index 000000000..da7e0bfed --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi3.C @@ -0,0 +1,9 @@ +// PR c++/55972 +// { dg-do compile { target c++11 } } + +class C +{ + void f(); + int j = 10; + int i = [this]() { return this->j; }(); +}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C new file mode 100644 index 000000000..973f8a780 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-sfinae1.C @@ -0,0 +1,55 @@ +// PR c++/56039 +// { dg-do compile { target c++11 } } + +template <bool> struct BoolSink { typedef void type; }; + +template <typename T, typename U> +struct AddRvalueReferenceImpl { typedef T type; }; + +template <typename T> +struct AddRvalueReferenceImpl<T, typename BoolSink<false && + [] { + extern T &&tref; + }>::type> { // { dg-error "lambda" } + typedef T &&type; +}; + +template <typename T> +struct AddRvalueReference : AddRvalueReferenceImpl<T, void> { }; + +namespace ImplHelpers { + template <typename T> + typename AddRvalueReference<T>::type create(void) { } +} + +template <typename T, typename U, typename ...Args> +struct IsConstructibleImpl { enum { value = 0 }; }; + +template <typename T, typename ...Args> +struct IsConstructibleImpl<T, typename BoolSink<false && + [] { + T t( ::ImplHelpers::create<Args>() ...); + }>::type, Args ...> { // { dg-error "lambda" } + enum { value = 1 }; +}; + +template <typename T, typename ...Args> +struct IsConstructible : IsConstructibleImpl<T, void, Args ...> { }; + +struct DestroyMe { + ~DestroyMe() = delete; +}; + +static_assert(+IsConstructible<int>::value, "error"); +static_assert(!IsConstructible<void>::value, "error"); +static_assert(+IsConstructible<int [1]>::value, "error"); +static_assert(!IsConstructible<DestroyMe>::value, "error"); +static_assert(!IsConstructible<int *, char *>::value, "error"); + +static_assert(+IsConstructible<int &&, int>::value, "error"); +static_assert(!IsConstructible<int &&, int &>::value, "error"); +static_assert(+IsConstructible<int &&, int &&>::value, "error"); + +// { dg-prune-output "expected" } +// { dg-prune-output "does not name a class" } +// { dg-prune-output "static assertion" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C new file mode 100644 index 000000000..090d0a13e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this13.C @@ -0,0 +1,20 @@ +// PR c++/52374 +// { dg-do compile { target c++11 } } + +struct B +{ + int get() const { return 42; } +}; + +template<typename X> +struct D + : public X +{ + int get() const { return [this]() -> int { return X::get(); }(); } +}; + +int main() +{ + D<B> d; + d.get(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C new file mode 100644 index 000000000..9834bfdb3 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this14.C @@ -0,0 +1,49 @@ +// PR c++/52014 +// { dg-require-effective-target c++11 } + +template <class Iterator, class Func> +void for_each(const Iterator first, const Iterator last, Func func) +{ + for (Iterator it = first; it != last; ++it) { + func(*it); + } +} + +template <class T> +struct helper +{ + typedef typename T::size_type type; +}; + +template <class T> +struct helper<T&> +{ + typedef typename T::size_type type; +}; + +template <class T> +struct helper<T*> +{ + typedef typename T::size_type type; +}; + +struct bar +{ + struct foo + { + typedef int size_type; + } foo_; + + void test() + { + int arr[] = { 1, 2, 3 }; + for_each(arr, arr + 3, [&](helper<foo>::type i) { + for_each(arr, arr + 3, [&](helper<decltype(foo_)>::type j) { }); + }); + } +}; + +int main() +{ + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C new file mode 100644 index 000000000..d44bec949 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this15.C @@ -0,0 +1,12 @@ +// PR c++/56692 +// { dg-require-effective-target c++11 } + +struct Class { + void f () { } + static void f (int) { } +}; + +int main () +{ + []{ Class::f(0); }; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C new file mode 100644 index 000000000..736d5f50e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this16.C @@ -0,0 +1,28 @@ +// PR c++/56699 +// { dg-require-effective-target c++11 } + +struct A +{ + int a; +}; + +struct T +{ + int x; + + T() : x([]{ + sizeof(::A::a); + return 0; + }()) + {} +}; + +struct B +{ + int a; +}; + +void f() +{ + []{sizeof(B::a);}; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C new file mode 100644 index 000000000..07ddd0863 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this9.C @@ -0,0 +1,19 @@ +// PR c++/54277 +// { dg-do compile { target c++11 } } + +struct Used +{ + void foo() { } +}; + +template <typename> +struct S +{ + Used x; + + void bar() + { + auto f = [this] { x.foo(); }; + f(); + } +}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept03.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept03.C index 54e04f3d0..41c442e90 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept03.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/noexcept03.C @@ -1,6 +1,6 @@ // Runtime test for noexcept-specification. // { dg-options "-std=c++0x -Wnoexcept" } -// { dg-do run } +// { dg-do run { target nonpic } } #include <exception> #include <cstdlib> diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for23.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for23.C new file mode 100644 index 000000000..849682c02 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for23.C @@ -0,0 +1,8 @@ +// PR c++/56722 +// { dg-do compile { target c++11 } } + +int main() +{ + for (const auto& i, 21) // { dg-error "has no initializer|expected" } + i; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for24.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for24.C new file mode 100644 index 000000000..b4a5b185b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for24.C @@ -0,0 +1,15 @@ +// PR c++/56794 +// { dg-require-effective-target c++11 } + +template<int... values> +static void Colors() +{ + static const int colors[] = { values... }; + + for(auto c: colors) { } +} + +int main() +{ + Colors<0,1,2> (); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for25.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for25.C new file mode 100644 index 000000000..8ba9f652d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/range-for25.C @@ -0,0 +1,30 @@ +// PR c++/57243 +// { dg-require-effective-target c++11 } + +struct snarf +{ + template <class T> + void get() {} +}; + +template <class T> +struct container +{ + snarf * begin() { return nullptr; } + snarf * end() { return nullptr; } +}; + +template <class T> +void foo() +{ + container<int> arr; + + for( auto i : arr ) + i.get<int>(); +} + +int main() +{ + return 0; +} + diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C new file mode 100644 index 000000000..c6ef0792b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual-mangle1.C @@ -0,0 +1,37 @@ +// PR c++/56821 +// { dg-require-effective-target c++11 } + +struct A { + // { dg-final { scan-assembler "_ZNR1A1fEv" } } + void f() & {} + // { dg-final { scan-assembler "_ZNO1A1gEv" } } + void g() && {} + // { dg-final { scan-assembler "_ZNKR1A1hEv" } } + void h() const & {} +}; + +// { dg-final { scan-assembler "_Z1jM1AFvvRE" } } +void j(void (A::*)() &) { } +// { dg-final { scan-assembler "_Z1kM1AFvvOE" } } +void k(void (A::*)() &&) { } +// { dg-final { scan-assembler "_Z1lM1AKFvvRE" } } +void l(void (A::*)() const &) { } + +// { dg-final { scan-assembler "_Z1mIFvvOEEvM1AT_" } } +// { dg-final { scan-assembler "_Z1mIFvvREEvM1AT_" } } +// { dg-final { scan-assembler "_Z1mIKFvvREEvM1AT_" } } +template <typename T> +void m(T A::*) {} + +// { dg-final { scan-assembler "_Z1nIM1AFvvOEEvT_" } } +// { dg-final { scan-assembler "_Z1nIM1AFvvREEvT_" } } +// { dg-final { scan-assembler "_Z1nIM1AKFvvREEvT_" } } +template <typename T> +void n(T) {} + +int main() +{ + j(&A::f); k(&A::g); l(&A::h); + m(&A::f); m(&A::g); m(&A::h); + n(&A::f); n(&A::g); n(&A::h); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C new file mode 100644 index 000000000..7fa826c3d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual1.C @@ -0,0 +1,30 @@ +// { dg-require-effective-target c++11 } + +template <class,class> struct ST; +template <class T> struct ST<T,T> {}; + +struct A +{ + int f() &; + char f() &&; +}; + +template <class T> struct B +{ + int f() &; + char f() &&; +}; + +int main() +{ + A a; + a.f(); + A().f(); + ST<decltype(a.f()), int>(); + ST<decltype(A().f()), char>(); + B<int> b; + b.f(); + B<int>().f(); + ST<decltype(b.f()), int>(); + ST<decltype(B<int>().f()), char>(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C new file mode 100644 index 000000000..1b6c54fd4 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual10.C @@ -0,0 +1,13 @@ +// PR c++/57252 +// { dg-require-effective-target c++11 } + +struct foo { + void bar() & {} + void bar() && {} +}; + +int main() +{ + auto p = &foo::bar; // { dg-error "" } + (foo{}.*p)(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C new file mode 100644 index 000000000..15dd049f2 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual11.C @@ -0,0 +1,10 @@ +// PR c++/57253 +// { dg-require-effective-target c++11 } + +template<typename T> struct foo; + +template<> struct foo<void()&> {}; +template<> struct foo<void()> {}; + +int main() +{} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C new file mode 100644 index 000000000..b0a16fe94 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual12.C @@ -0,0 +1,22 @@ +// PR c++/57254 +// { dg-require-effective-target c++11 } + +struct foo { + template<typename T> + void bar(T) &; + + template<typename T> + void bar(T) &&; +}; + +template<typename T> +void foo::bar(T) & {} + +template<typename T> +void foo::bar(T) && {} + +int main() +{ + foo f; + f.bar(0); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C new file mode 100644 index 000000000..84d3b0f2d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual13.C @@ -0,0 +1,29 @@ +// PR c++/57388 +// { dg-require-effective-target c++11 } + +template<class> struct A +{ + static constexpr bool value = false; +}; + +template<class Res, class... Args> +struct A<Res(Args...)> +{ + static constexpr bool value = true; +}; + +template<class Res, class... Args> +struct A<Res(Args...) const &> +{ + static constexpr bool value = true; +}; + +template<class Res, class... Args> +struct A<Res(Args...) const &&> +{ + static constexpr bool value = true; +}; + +static_assert(A<void()>::value, "Ouch"); +static_assert(A<void() const &>::value, ""); // #1 +static_assert(A<void() const &&>::value, ""); // #2 diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C new file mode 100644 index 000000000..fa09ab48a --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual2.C @@ -0,0 +1,75 @@ +// In a .* expression whose object expression is an rvalue, the program is +// ill-formed if the second operand is a pointer to member function with +// ref-qualifier &. In a .* expression whose object expression is an +// lvalue, the program is ill-formed if the second operand is a pointer to +// member function with ref-qualifier &&. + +// { dg-require-effective-target c++11 } + +struct A { + void f() &; + void g() &&; + void h(); +}; + +void one() +{ + A a; + + void (A::*p)() & = &A::f; + (a.*p)(); + (A().*p)(); // { dg-error "" } + + p = &A::g; // { dg-error "" } + p = &A::h; // { dg-error "" } + + void (A::*p2)() && = &A::g; + (A().*p2)(); + (a.*p2)(); // { dg-error "" } + p2 = &A::f; // { dg-error "" } + p2 = &A::h; // { dg-error "" } + + void (A::*p3)() = &A::h; + (a.*p3)(); + (A().*p3)(); + p3 = &A::f; // { dg-error "" } + p3 = &A::g; // { dg-error "" } +} + +template <class T> +struct B { + void f() &; + void g() &&; + void h(); +}; + +template <class T> +void two() +{ + B<T> a; + + void (B<T>::*p)() & = &B<T>::f; + (a.*p)(); + (B<T>().*p)(); // { dg-error "" } + + p = &B<T>::g; // { dg-error "" } + p = &B<T>::h; // { dg-error "" } + + void (B<T>::*p2)() && = &B<T>::g; + (B<T>().*p2)(); + (a.*p2)(); // { dg-error "" } + p2 = &B<T>::f; // { dg-error "" } + p2 = &B<T>::h; // { dg-error "" } + + void (B<T>::*p3)() = &B<T>::h; + (a.*p3)(); + (B<T>().*p3)(); + p3 = &B<T>::f; // { dg-error "" } + p3 = &B<T>::g; // { dg-error "" } +} + +int main() +{ + one(); + two<int>(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C new file mode 100644 index 000000000..1b2119632 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual3.C @@ -0,0 +1,29 @@ +// An explicitly defaulted function can have a ref-qualifier. + +// { dg-require-effective-target c++11 } + +struct A { + A& operator=(const A&) & = default; +}; + +template<class T> +struct B { + B& operator=(const B&) & = default; +}; + +template<class T> +void f() +{ + B<T> b; + b = B<T>(); + B<T>() = b; // { dg-error "" } +} + +int main() +{ + A a; + a = A(); + A() = a; // { dg-error "" } + + f<int>(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C new file mode 100644 index 000000000..5a0ee162f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual4.C @@ -0,0 +1,14 @@ +// 12.1: A constructor shall not be declared with a ref-qualifier. +// 12.4: A destructor shall not be declared with a ref-qualifier. + +// { dg-require-effective-target c++11 } + +struct A { + A() & = default; // { dg-error "constructor" } + ~A() & = default; // { dg-error "destructor" } +}; + +int main() +{ + A a; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C new file mode 100644 index 000000000..e3d26e5a7 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual5.C @@ -0,0 +1,13 @@ +// 13.1: ...cannot be overloaded if any of them, but not all, have a +// ref-qualifier. + +// { dg-require-effective-target c++11 } + +class Y { + void h() &; + void h() const &; // OK + void h() &&; // OK, all declarations have a ref-qualifier + void i() &; // { dg-message "" } + void i() const; // { dg-error "" } prior declaration of i + // has a ref-qualifier +}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C new file mode 100644 index 000000000..02e3f6e68 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual6.C @@ -0,0 +1,15 @@ +// Binding an rvalue to && beats binding it to const& (13.3.3.2). + +// { dg-require-effective-target c++11 } + +struct A +{ + int operator+(int) &&; +}; + +void operator+ (const A&, int); + +int main() +{ + return A() + 42; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C new file mode 100644 index 000000000..2430665db --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual7.C @@ -0,0 +1,19 @@ +// typedef test +// { dg-require-effective-target c++11 } + +typedef void F() &; + +F f; // { dg-error "" } +F* p; // { dg-error "" } +extern F& r; // { dg-error "" } + +struct A { + F f; +}; + +int main() +{ + A a; + a.f(); + A().f(); // { dg-error "" } +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C new file mode 100644 index 000000000..b4c972b3c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual8.C @@ -0,0 +1,13 @@ +// { dg-require-effective-target c++11 } + +struct A +{ + virtual void f() & = 0; +}; + +struct B: A +{ + void f(); // doesn't override +}; + +B b; // { dg-error "abstract" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C new file mode 100644 index 000000000..cdb8d6856 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/ref-qual9.C @@ -0,0 +1,14 @@ +// PR c++/57064 +// { dg-require-effective-target c++11 } + +template <class T> T&& move(T& t); + +struct A { + void p() &; + int p() &&; +}; + +void g(A &&a) +{ + int i = move(a).p(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/sfinae44.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/sfinae44.C new file mode 100644 index 000000000..bbcae6226 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/sfinae44.C @@ -0,0 +1,26 @@ +// PR c++/56913 +// { dg-do compile { target c++11 } } + +template<typename T> +T &&declval(); + +template<typename T, typename U, + typename = decltype((declval<T>().*declval<U>())())> +constexpr bool test(int) +{ + return true; +} + +template<typename T, typename U> +constexpr bool test(...) +{ + return false; +} + +struct S +{}; + +static_assert(!test<S, void (S::*)() &>(0), ""); +static_assert(test<S, void (S::*)() &&>(0), ""); +static_assert(test<S &, void (S::*)() &>(0), ""); +static_assert(!test<S &, void (S::*)() &&>(0), ""); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/sfinae45.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/sfinae45.C new file mode 100644 index 000000000..bd375145f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/sfinae45.C @@ -0,0 +1,35 @@ +// PR c++/56970 +// { dg-do compile { target c++11 } } + +template <typename T> +struct has +{ + template <typename> + constexpr static int test(...) { + return 0; + } + + template <typename C> + constexpr static int test(decltype(sizeof(C::x))) { // Doesn't compile. + return 1; // Is a member variable. + } + + template <typename C, int c = sizeof(decltype(((C*)nullptr)->x()))> + constexpr static int test(int) { + return 2; // Is a member function. + } + + static const int value = test<T>(0); +}; + +struct foo { + int x; +}; + +struct bar { + int x(); +}; + +static_assert(has<int>::value == 0, ""); +static_assert(has<foo>::value == 1, ""); +static_assert(has<bar>::value == 2, ""); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/trailing8.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/trailing8.C new file mode 100644 index 000000000..304845e66 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/trailing8.C @@ -0,0 +1,25 @@ +// PR c++/54359 +// { dg-require-effective-target c++11 } + +int& ref(int& x) { return x; } +const int& ref(const int& x) { return x; } + +class A { + int x; + int f() const; + auto test1() const -> decltype(this); + auto test2() const -> decltype(ref(x)); + auto test3() const -> decltype(f()); +}; + +auto A::test1() const -> decltype(this) { + return this; +} + +auto A::test2() const -> decltype(ref(x)) { + return ref(x); +} + +auto A::test3() const -> decltype(f()) { + return f(); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/trailing9.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/trailing9.C new file mode 100644 index 000000000..d7895b38e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/trailing9.C @@ -0,0 +1,12 @@ +// PR c++/56646 +// { dg-require-effective-target c++11 } + +struct A { + void f(); +}; + +void A::f() { + struct B { + auto g() -> void { } + }; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/traits1.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/traits1.C new file mode 100644 index 000000000..9085b71a3 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/traits1.C @@ -0,0 +1,133 @@ +// PR c++/57016 +// { dg-require-effective-target c++11 } + +template < typename _Tp, _Tp __v > struct integral_constant +{ + static constexpr _Tp value = __v; +}; +template < bool, typename, typename > struct conditional; +template < typename ... >struct __and_; +template + < + typename + _B1, + typename + _B2 > struct __and_ <_B1, _B2 >:conditional < _B1::value, _B2, _B1 >::type +{}; +template < typename _Pp > struct __not_:integral_constant < bool, _Pp::value > +{}; +template < typename > struct add_rvalue_reference; +template + < typename _Tp > typename add_rvalue_reference < _Tp >::type declval (); +template < bool, typename _Iftrue, typename > struct conditional +{ + typedef _Iftrue type; +}; +template < class, class > struct pair; +template < typename > class allocator; +template < typename, typename, typename > struct binary_function; +template < typename _Tp > struct equal_to:binary_function < _Tp, _Tp, bool > +{}; +template < typename > struct hash; +template < >struct hash <int > +{}; +template + < + typename, + typename, + typename, + typename, typename, typename, typename, typename > struct _Hashtable_base; +template + < + typename, + typename + > struct __is_noexcept_hash:integral_constant < bool, noexcept ((declval)) > +{} +; +struct _Identity; +template < bool, bool _Constant_iterators, bool > struct _Hashtable_traits + ; +struct _Mod_range_hashing; +struct _Default_ranged_hash; +struct _Prime_rehash_policy; +template + < + typename + _Tp, + typename + _Hash + > + using + __cache_default + = + __not_ + < + __and_ + < + integral_constant + < bool, __is_final (_Hash) >, __is_noexcept_hash < _Tp, _Hash > >>; +template < typename _Key, typename _Value, typename, typename _ExtractKey, typename _Equal, typename _H1, typename _H2, typename, typename _RehashPolicy, typename _Traits > class _Hashtable: +_Hashtable_base + < _Key, _Value, _ExtractKey, _Equal, _H1, _H2, _RehashPolicy, _Traits > +{} +; +template + < + bool + _Cache > using __uset_traits = _Hashtable_traits < _Cache, true, true >; +template + < + typename + _Value, + typename + _Hash + = + hash + < + _Value + >, + typename + _Pred + = + equal_to + < + _Value + >, + typename + _Alloc + = + allocator + < + _Value + >, + typename + _Tr + = + __uset_traits + < + __cache_default + < + _Value, + _Hash + >::value + > + > + using + __uset_hashtable + = + _Hashtable + < + _Value, + _Value, + _Alloc, + _Identity, + _Pred, + _Hash, + _Mod_range_hashing, _Default_ranged_hash, _Prime_rehash_policy, _Tr >; +template < class _Value, class = hash < _Value > >class unordered_set +{ + typedef __uset_hashtable < _Value > iterator; + template < typename > pair < iterator, bool > emplace (); +} +; +template class unordered_set < int >; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C new file mode 100644 index 000000000..4a8074529 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic-explicit2.C @@ -0,0 +1,14 @@ +// PR c++/56774 +// { dg-require-effective-target c++11 } + +template <class ... Args> +struct mytype {}; + +template <class T, class ... Args> +void something( mytype<T, Args...> ) +{ } + +int main() +{ + something<int, char, bool>( mytype<int, char, bool>() ); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic142.C b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic142.C new file mode 100644 index 000000000..7737b4cac --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/cpp0x/variadic142.C @@ -0,0 +1,63 @@ +// PR c++/56782 +// { dg-options -std=c++0x } + +template<class T> +T&& declval(); + +struct is_convertible_impl { + template<class T> + static void sink(T); + + template<class T, class U, class = decltype(sink<U>(declval<T>()))> + static auto test(int) -> char; + + template<class, class> + static auto test(...) -> char(&)[2]; +}; + +template<class T, class U> +struct is_convertible : is_convertible_impl +{ + static const bool value = sizeof(test<T, U>(0)) == 1; +}; + +template<bool, class> +struct enable_if {}; + +template<class T> +struct enable_if<true, T> { typedef T type; }; + +template<bool, class If, class Else> +struct conditional { typedef If type; }; + +template<class If, class Else> +struct conditional<false, If, Else> { typedef Else type; }; + +template<class...> +struct and_; + +template<> +struct and_<> +{ + static const bool value = true; +}; + +template<class P> +struct and_<P> : P +{ +}; + +template<class P1, class P2> +struct and_<P1, P2> : conditional<P1::value, P2, P1>::type +{ +}; + +template<class... T> +struct Tuple { + template<class... U, + class = typename enable_if<and_<is_convertible<U, T>... >::value, int>::type + > + Tuple(U&&...){} +}; + +static_assert(is_convertible<Tuple<>, Tuple<>>::value, "Ouch"); //#1 diff --git a/gcc-4.8/gcc/testsuite/g++.dg/debug/pr56819.C b/gcc-4.8/gcc/testsuite/g++.dg/debug/pr56819.C new file mode 100644 index 000000000..62926be2f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/debug/pr56819.C @@ -0,0 +1,27 @@ +// PR debug/56819 +// { dg-do compile } +// { dg-options "-fcompare-debug" } + +template <typename> +struct A +{ + template <typename> + struct B; +}; + +template <typename> +struct C +{ + typedef int I; +}; + +template <typename T> +class D +{ + typedef A <void> E; + typedef typename T::template B <E> F; + typedef typename C <F>::I I; + A <I> foo () { return A<I> (); } +}; + +template class D <A <void> >; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/desig5.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/desig5.C new file mode 100644 index 000000000..48cce3183 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/desig5.C @@ -0,0 +1,7 @@ +// PR c++/55951 + +enum { A }; + +static const char *a[] = { + [A] = "a" +}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ext/desig6.C b/gcc-4.8/gcc/testsuite/g++.dg/ext/desig6.C new file mode 100644 index 000000000..ccdafa50d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/ext/desig6.C @@ -0,0 +1,17 @@ +// PR c++/57041 +// { dg-options "-std=gnu++11" } + +template<typename T> +union u { + T a; + char b; +}; + +template<typename T> +u<T> make_u(T t) { + return { .a = t }; +} + +int main() { + return make_u<int>(1).a; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/devirt-c-7.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/devirt-c-7.C index 89d04328c..2e76cbe40 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/devirt-c-7.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/devirt-c-7.C @@ -1,6 +1,7 @@ /* Verify that ipa-cp will not get confused by placement new constructing an object within another one when looking for dynamic type change . */ /* { dg-do run } */ +/* { dg-require-effective-target nonpic } */ /* { dg-options "-O3 -Wno-attributes" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-1.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-1.C index fc63e6085..bc4dfea5c 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-1.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-1.C @@ -1,6 +1,6 @@ /* Verify that simple virtual calls are inlined even without early inlining. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-2.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-2.C index f99330361..001cff204 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-2.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-2.C @@ -1,6 +1,6 @@ /* Verify that simple virtual calls using this pointer are inlined even without early inlining.. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-3.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-3.C index d9a47f860..637a6aecc 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-3.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-3.C @@ -1,6 +1,6 @@ /* Verify that simple virtual calls on an object refrence are inlined even without early inlining. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-4.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-4.C index 93cbe0c7d..f5b8f8e5d 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-4.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-4.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls are inlined even without early inlining, even when a typecast to an ancestor is involved along the way. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-5.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-5.C index 91e8f4e3e..d78173d69 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-5.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-5.C @@ -1,6 +1,6 @@ /* Verify that virtual call inlining does not pick a wrong method when there is a user defined ancestor in an object. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-7.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-7.C index 2630dffa9..9d725a508 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-7.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-7.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls are inlined even without early inlining, even when a typecast to an ancestor is involved along the way and that ancestor is not the first one with virtual functions. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-8.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-8.C index 3bdf4c15b..eebfc6af1 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-8.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-8.C @@ -1,6 +1,6 @@ /* Verify that virtual calls are inlined (ithout early inlining) even when their caller is itself indirectly inlined. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-9.C b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-9.C index 4ff07a9bb..586c3af30 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-9.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/ipa/ivinline-9.C @@ -2,7 +2,7 @@ inlining, even when a typecast to an ancestor is involved along the way and that ancestor itself has an ancestor wich is not the primary base class. */ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ extern "C" void abort (void); diff --git a/gcc-4.8/gcc/testsuite/g++.dg/opt/pr56999.C b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr56999.C new file mode 100644 index 000000000..6db2f270e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/opt/pr56999.C @@ -0,0 +1,188 @@ +// PR rtl-optimization/56999 +// { dg-do run } +// { dg-options "-O2" } +// { dg-additional-options "-fpic" { target fpic } } +// { dg-additional-options "-march=i686 -mtune=atom" { target ia32 } } +// { dg-require-visibility "" } + +extern "C" void abort (void); +extern "C" void exit (int); +volatile bool do_exit = true; +struct JSScript; +struct JITScript { int i; }; +#pragma GCC visibility push(hidden) +typedef struct JSCompartment JSCompartment; +typedef struct JSContext JSContext; +namespace js +{ + struct ContextFriendFields + { + JSCompartment *compartment; + }; + struct TempAllocPolicy + { + }; + template <class T> + struct Vector + { + T *mBegin; + T *begin () { return mBegin; } + T & operator[] (unsigned i) { return begin ()[i]; } + template <class U> + __attribute__((noinline, noclone)) + bool append (U) { asm volatile ("" : : : "memory"); if (do_exit) abort (); return false; } + }; + namespace types + { + struct TypeCompartment; + } + namespace mjit + { + } + namespace ion + { + struct IonScript; + } + namespace types + { + struct CompilerOutput + { + enum Kind { MethodJIT, ParallelIon }; + JSScript *script; + unsigned kindInt : 2; + bool constructing : 1; + bool barriers : 1; + bool pendingRecompilation : 1; + Kind kind () const { return static_cast <Kind> (kindInt); } + bool isValid () const; + }; + struct RecompileInfo + { + unsigned outputIndex; + CompilerOutput *compilerOutput (TypeCompartment & types) const; + CompilerOutput *compilerOutput (JSContext *cx) const; + }; + struct TypeCompartment + { + Vector <CompilerOutput> *constrainedOutputs; + Vector <RecompileInfo> *pendingRecompiles; + void addPendingRecompile (JSContext *cx, const RecompileInfo & info); + }; + } +} +struct JSScript +{ + struct JITScriptHandle + { + static volatile JITScript *UNJITTABLE __attribute__((visibility ("default"))); + JITScript *value; + bool isValid () { return value != UNJITTABLE; } + JITScript *getValid () { return value; } + }; + struct JITScriptSet + { + JITScriptHandle jitHandleNormal, jitHandleNormalBarriered; + JITScriptHandle jitHandleCtor, jitHandleCtorBarriered; + JITScriptHandle jitNull1, jitNull2; + }; + JITScriptSet *mJITInfo; + void *ion; + JITScriptHandle *jitHandle (bool constructing, bool barriers) + { + return constructing ? (barriers ? &mJITInfo->jitHandleCtorBarriered + : &mJITInfo->jitHandleCtor) + : (barriers ? &mJITInfo->jitHandleNormalBarriered + : &mJITInfo->jitHandleNormal); + } + JITScript *getJIT (bool constructing, bool barriers) + { + JITScriptHandle *jith = jitHandle (constructing, barriers); + return jith->isValid () ? jith->getValid () : __null; + } +}; +struct JSContext : js::ContextFriendFields +{ +}; +namespace js +{ + __attribute__((noinline, noclone)) + void CancelOffThreadIonCompile (JSCompartment *, JSScript *) + { + if (do_exit) + exit (0); + } +} +struct JSCompartment +{ + js::types::TypeCompartment types; +}; +namespace js +{ + namespace types + { + inline bool CompilerOutput::isValid () const + { + if (!script) + return false; + switch (kind ()) + { + case MethodJIT: + { + JITScript *jit = script->getJIT (constructing, barriers); + if (!jit) + return false; + } + case ParallelIon: + return true; + } + return false; + } + inline CompilerOutput *RecompileInfo::compilerOutput (TypeCompartment & types) const + { + return &(*types.constrainedOutputs)[outputIndex]; + } + inline CompilerOutput *RecompileInfo::compilerOutput (JSContext *cx) const + { + return compilerOutput (cx->compartment->types); + } + } +} +using namespace js::types; +__attribute__((noinline, noclone)) void +TypeCompartment::addPendingRecompile (JSContext *cx, const RecompileInfo & info) +{ + CompilerOutput *co = info.compilerOutput (cx); + if (co->pendingRecompilation) + if (co->isValid ()) + CancelOffThreadIonCompile (cx->compartment, co->script); + if (co->isValid ()) + pendingRecompiles->append (info); +} +volatile JITScript *JSScript::JITScriptHandle::UNJITTABLE; +int +main () +{ + JSContext cx; + JSCompartment com; + RecompileInfo info; + cx.compartment = &com; + info.outputIndex = 0; + js::Vector<CompilerOutput> v; + JITScript js; + JSScript::JITScriptSet set; + __builtin_memset (&set, 0, sizeof set); + set.jitHandleCtor.value = &js; + JSScript s; + s.mJITInfo = &set; + CompilerOutput co; + co.kindInt = 0; + co.constructing = true; + co.barriers = false; + co.pendingRecompilation = true; + co.script = &s; + v.mBegin = &co; + com.types.constrainedOutputs = &v; + com.types.pendingRecompiles = __null; + com.types.addPendingRecompile (&cx, info); + abort (); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/parse/ref-qual1.C b/gcc-4.8/gcc/testsuite/g++.dg/parse/ref-qual1.C new file mode 100644 index 000000000..e3f60c09c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/parse/ref-qual1.C @@ -0,0 +1,29 @@ +// PR c++/57068 + +enum Enums { + Enum1 = 0x00000000, + Enum2 = 0x00000001 +}; + +class Flags { +public: + Flags() : i(0) {} + Flags(int i): i(i) {} + Flags operator&(Enums f) { return Flags(Enums(i & f)); } + + operator bool() { return i; } +private: + int i; +}; + +Flags windowState() +{ + return Flags(); +} + +int main() +{ + if (bool(windowState() & Enum1) == true) + return 1; + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/array26.C b/gcc-4.8/gcc/testsuite/g++.dg/template/array26.C new file mode 100644 index 000000000..669207169 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/array26.C @@ -0,0 +1,40 @@ +// PR c++/57325 + +class valarray { int _M_data; }; +template < typename > struct SimpleJet { valarray partials; }; + +template < class C > struct scoped_ptr_impl +{ + scoped_ptr_impl (C *):data_ () { } + struct Data + { + C ptr; + }; + Data data_; +}; + +template < class, class = int >struct scoped_ptr; +template < class C, class D > struct scoped_ptr <C[], D > +{ + scoped_ptr ():impl_ (0) { } + scoped_ptr_impl < C > impl_; +}; + +template < typename JetsT > void +TestJets (JetsT *) +{ + typedef typename JetsT::JetType JetT; + scoped_ptr < JetT[] > a; +} + +template < typename T > struct SimpleJets +{ + typedef SimpleJet < T > JetType; + scoped_ptr < SimpleJet < T >[] > vars_; +}; + +void fn () +{ + SimpleJets < double >b; + TestJets (&b); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/arrow2.C b/gcc-4.8/gcc/testsuite/g++.dg/template/arrow2.C new file mode 100644 index 000000000..8ec9e01d0 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/arrow2.C @@ -0,0 +1,12 @@ +// PR c++/56639 + +struct A { + int i; + static A* f(); +}; + +struct B { + void g() { + int (A::f()->i); + } +}; diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/arrow3.C b/gcc-4.8/gcc/testsuite/g++.dg/template/arrow3.C new file mode 100644 index 000000000..b2029ba48 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/arrow3.C @@ -0,0 +1,38 @@ +// PR c++/56895 +// { dg-do compile } + +extern struct A { bool foo (); A bar (); } *a; + +template <int> +int +baz1 () +{ + return 2 << (a->bar().foo() ? 1 : 0); +} + +template <int> +int +baz2 () +{ + return 2 >> (a->bar().foo() ? 1 : 0); +} + +template <int> +int +baz3 () +{ + return 10 / (a->bar().foo() ? 1 : 2); +} + +template <int> +int +baz4 () +{ + return 10 % (a->bar().foo() ? 1 : 0); +} + +int +test () +{ + return baz1<0> () + baz2<0> () + baz3<0> () + baz4<0> (); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/arrow4.C b/gcc-4.8/gcc/testsuite/g++.dg/template/arrow4.C new file mode 100644 index 000000000..89e782219 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/arrow4.C @@ -0,0 +1,19 @@ +// PR c++/56895 +// { dg-do compile } + +void fn (int *); +void fn (int); +extern struct A { bool foo (); A bar (); } *a; + +template <int> +void +baz () +{ + fn (a->bar().foo() ? 1 : 0); +} + +void +test () +{ + baz<0> (); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/crash106.C b/gcc-4.8/gcc/testsuite/g++.dg/template/crash106.C index c2d117e03..ebd47bcff 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/template/crash106.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/crash106.C @@ -10,3 +10,5 @@ struct A template<T N = 0, void (A::*)() = &A::foo<N> > struct B {}; // { dg-error "type|declared" } B<> b; // { dg-error "type|declaration" } + +// { dg-prune-output "could not convert" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/crash112.C b/gcc-4.8/gcc/testsuite/g++.dg/template/crash112.C index 919c887fd..ff35764c7 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/template/crash112.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/crash112.C @@ -5,7 +5,7 @@ struct A template<typename> void foo() {} }; -template<void (A::*)()> struct B {}; // { dg-error "declaration" } +template<void (A::*)()> struct B {}; template<int> struct C { @@ -13,3 +13,5 @@ template<int> struct C }; C<0> c; + +// { dg-prune-output "could not convert" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/crash84.C b/gcc-4.8/gcc/testsuite/g++.dg/template/crash84.C index c42f85ce5..103e90a70 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/template/crash84.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/crash84.C @@ -5,7 +5,7 @@ template<typename T> struct a { template <template <typename> class C, typename X, C<X>* =0> - struct b // { dg-error "class C' is not a template|is not a valid type" } + struct b { }; }; @@ -13,7 +13,8 @@ template<typename T> struct a void foo () { - a<int> v; // { dg-message "required from here" } + a<int> a1; // OK + a<int>::b<a,int> b1; // { dg-error "template argument" } } - +// { dg-prune-output "invalid type in declaration" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/dependent-args1.C b/gcc-4.8/gcc/testsuite/g++.dg/template/dependent-args1.C index 0b197cf55..a540e55f4 100644 --- a/gcc-4.8/gcc/testsuite/g++.dg/template/dependent-args1.C +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/dependent-args1.C @@ -9,3 +9,5 @@ struct A template<int N, void (A::*)() = &A::foo<N> > struct B {}; B<int> b; // { dg-error "type/value mismatch|expected a constant|invalid type" } + +// { dg-prune-output "could not convert" } diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/overload13.C b/gcc-4.8/gcc/testsuite/g++.dg/template/overload13.C new file mode 100644 index 000000000..d41ccd01a --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/overload13.C @@ -0,0 +1,16 @@ +// PR c++/56998 + +class Secret; +char IsNullLiteralHelper(Secret* p); +char (&IsNullLiteralHelper(...))[2]; + +struct C +{ + int val() { return 42; } +}; + +template <typename T> +unsigned f() +{ + return sizeof(IsNullLiteralHelper(C().val())); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/template/sfinae-dr657.C b/gcc-4.8/gcc/testsuite/g++.dg/template/sfinae-dr657.C new file mode 100644 index 000000000..b78b5a919 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/template/sfinae-dr657.C @@ -0,0 +1,22 @@ +// DR 657 +// Test that a return or parameter type with abstract class type causes a +// deduction failure. + +struct A +{ + A(); + A(int); + virtual void f() = 0; +}; + +template<class T> T declval(); +template<class T> int declval(...); + +template<class T> void arg(T); +template<class T> int arg(...); + +int main() +{ + int i = declval<A>(); + i = arg<A>(1); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56694.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56694.C new file mode 100644 index 000000000..d3de05101 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56694.C @@ -0,0 +1,31 @@ +// { dg-do compile } +// { dg-options "-fopenmp" } +// { dg-require-effective-target fopenmp } + +class GException { +public: + class vector_mismatch { + public: + vector_mismatch(int size1, int size2); + }; +}; +class GVector{ +public: + GVector& operator+=(const GVector& v); + int m_num; + double* m_data; +}; +inline GVector& GVector::operator+= (const GVector& v) +{ + if (m_num != v.m_num) + throw GException::vector_mismatch(m_num, v.m_num); + for (int i = 0; i < m_num; ++i) m_data[i] += v.m_data[i]; +}; +void eval(GVector* m_gradient, GVector* vect_cpy_grad, int n) +{ +#pragma omp sections + { + for (int i = 0; i < n; ++i) + *m_gradient += vect_cpy_grad[i]; + } +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56768.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56768.C new file mode 100644 index 000000000..db504c500 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56768.C @@ -0,0 +1,41 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +struct Iter +{ + int& operator* (); + void operator++ (); +}; + +bool operator!= (Iter &, Iter &) { } + +struct Container +{ + Iter begin () const; + Iter end () const; +}; + +struct J +{ + virtual J *mutable_child (); +}; + +struct M +{ + M (const Container &); + J ns_; +}; +namespace +{ + J MakeNamespace (const Container &src) + { + J a; + J *b = 0; + for (const int &c: src) + b = b ? b->mutable_child () : &a; + return a; + } +} +M::M (const Container &ns):ns_ (MakeNamespace (ns)) +{ +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56817.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56817.C new file mode 100644 index 000000000..35fc6f74f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56817.C @@ -0,0 +1,38 @@ +// { dg-do compile } +// { dg-options "--param max-unroll-times=32" } + +struct A {}; +A **q; +struct B +{ + A **j; + B () { j = q; } + A *& operator[] (unsigned long x) { return j[x]; } +}; +struct C +{ + C (int r) : v (), s (r) {} + A *& operator () (int i, int j) { return v[i * s + j]; } + B v; + int s; +}; +struct D +{ + D () + { + unsigned h = 2; + for (int i = 0; i < 1; ++i, h *= 2) + { + C w (h); + for (unsigned j = 0; j < h; ++j) + for (unsigned k = 0; k < h; ++k) + w (j, k) = new A; + } + } +}; +void +foo () +{ + for (int i = 0; i < 3; i++) + A (), A (), D (); +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56837.C b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56837.C new file mode 100644 index 000000000..d00712280 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/torture/pr56837.C @@ -0,0 +1,20 @@ +// { dg-do run } +// { dg-options "-ftree-loop-distribute-patterns" } + +extern "C" void abort (void); +extern "C" int memcmp (const void *, const void *, __SIZE_TYPE__); + +bool b1[8]; +bool b2[8] = { true, true, true, true, true, true, true, true }; + +int main() +{ + unsigned int i; + for(i=0 ; i < 8; i++) + b1[i] = true; + + if (memcmp (b1, b2, 8) != 0) + abort (); + + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C b/gcc-4.8/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C new file mode 100644 index 000000000..d7e226ce0 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/warn/Wdiv-by-zero-2.C @@ -0,0 +1,34 @@ +// PR c++/56607 +// { dg-do compile { target { { lp64 || ilp32 } || llp64 } } } +// { dg-options "-O2 -Wdiv-by-zero -std=c++11" } + +constexpr int sc () { return sizeof (char); } +constexpr int si () { return sizeof (int); } +constexpr int zc () { return sc () - 1; } +constexpr int zi (int d) { return si () / d - 1; } + +int +f1 (void) +{ + return 1 / zc (); // { dg-warning "division by zero" } +} + +int +f2 (void) +{ + constexpr int x = zc (); + return 1 / x; // { dg-warning "division by zero" } +} + +int +f3 (void) +{ + return 1 / zi (3); // { dg-warning "division by zero" } +} + +int +f4 (void) +{ + constexpr int x = zi (3); + return 1 / x; // { dg-warning "division by zero" } +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/warn/anonymous-namespace-4.C b/gcc-4.8/gcc/testsuite/g++.dg/warn/anonymous-namespace-4.C new file mode 100644 index 000000000..7d1e89edf --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/warn/anonymous-namespace-4.C @@ -0,0 +1,12 @@ +// PR c++/57137 + +#include "anonymous-namespace-4.h" + +namespace +{ + class NonCloneable; + void fn1 () + { + is_function_impl < NonCloneable > i; + } +} diff --git a/gcc-4.8/gcc/testsuite/g++.dg/warn/anonymous-namespace-4.h b/gcc-4.8/gcc/testsuite/g++.dg/warn/anonymous-namespace-4.h new file mode 100644 index 000000000..e0b7d68c1 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/g++.dg/warn/anonymous-namespace-4.h @@ -0,0 +1,14 @@ +template < typename T > struct integral_c { + static const T value = 0; +}; +struct is_reference:integral_c < bool > { }; +template < class > struct is_function_ptr_helper { }; +template < bool > struct is_function_chooser; + +template <> struct is_function_chooser <0 > +{ + template < typename T > struct result_:is_function_ptr_helper < T * > { }; +}; + +template < typename T > struct is_function_impl:is_function_chooser < + is_reference::value >::result_ < T > { }; diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr56745.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr56745.c new file mode 100644 index 000000000..ee9ba051f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr56745.c @@ -0,0 +1,15 @@ +/* PR rtl-optimization/56745 */ + +unsigned char a[6]; + +void +foo () +{ + int i; + for (i = 5; i >= 0; i++) + { + if (++a[i] != 0) + break; + ++a[i]; + } +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr56984.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr56984.c new file mode 100644 index 000000000..bd00bee88 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/compile/pr56984.c @@ -0,0 +1,9 @@ +/* PR tree-optimization/56984 */ + +int +foo (int x) +{ + if ((x >> 31) < -1) + x++; + return x; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp index 45cfaddba..d157fe392 100644 --- a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/builtins/builtins.exp @@ -43,7 +43,8 @@ if [istarget "powerpc-*-darwin*"] { } if { [istarget *-*-eabi*] || [istarget *-*-elf] - || [istarget *-*-mingw*] } { + || [istarget *-*-mingw*] + || [istarget *-*-rtems*] } { lappend additional_flags "-Wl,--allow-multiple-definition" } diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr33992.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr33992.c index 743361061..92b80e51b 100644 --- a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr33992.c +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr33992.c @@ -7,7 +7,7 @@ bar (unsigned long long i) abort (); } -void __attribute__((always_inline)) +static void __attribute__((always_inline)) foo (unsigned long long *r) { int i; diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56837.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56837.c new file mode 100644 index 000000000..a6ce2af71 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56837.c @@ -0,0 +1,21 @@ +extern void abort (void); +_Complex int a[1024]; + +__attribute__((noinline, noclone)) void +foo (void) +{ + int i; + for (i = 0; i < 1024; i++) + a[i] = -1; +} + +int +main () +{ + int i; + foo (); + for (i = 0; i < 1024; i++) + if (a[i] != -1) + abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56866.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56866.c new file mode 100644 index 000000000..260b8ff18 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56866.c @@ -0,0 +1,45 @@ +/* PR target/56866 */ + +int +main () +{ +#if __CHAR_BIT__ == 8 && __SIZEOF_LONG_LONG__ == 8 && __SIZEOF_INT__ == 4 && __SIZEOF_SHORT__ == 2 + unsigned long long wq[256], rq[256]; + unsigned int wi[256], ri[256]; + unsigned short ws[256], rs[256]; + unsigned char wc[256], rc[256]; + int t; + + __builtin_memset (wq, 0, sizeof wq); + __builtin_memset (wi, 0, sizeof wi); + __builtin_memset (ws, 0, sizeof ws); + __builtin_memset (wc, 0, sizeof wc); + wq[0] = 0x0123456789abcdefULL; + wi[0] = 0x01234567; + ws[0] = 0x4567; + wc[0] = 0x73; + + asm volatile ("" : : "g" (wq), "g" (wi), "g" (ws), "g" (wc) : "memory"); + + for (t = 0; t < 256; ++t) + rq[t] = (wq[t] >> 8) | (wq[t] << (sizeof (wq[0]) * __CHAR_BIT__ - 8)); + for (t = 0; t < 256; ++t) + ri[t] = (wi[t] >> 8) | (wi[t] << (sizeof (wi[0]) * __CHAR_BIT__ - 8)); + for (t = 0; t < 256; ++t) + rs[t] = (ws[t] >> 9) | (ws[t] << (sizeof (ws[0]) * __CHAR_BIT__ - 9)); + for (t = 0; t < 256; ++t) + rc[t] = (wc[t] >> 5) | (wc[t] << (sizeof (wc[0]) * __CHAR_BIT__ - 5)); + + asm volatile ("" : : "g" (rq), "g" (ri), "g" (rs), "g" (rc) : "memory"); + + if (rq[0] != 0xef0123456789abcdULL || rq[1]) + __builtin_abort (); + if (ri[0] != 0x67012345 || ri[1]) + __builtin_abort (); + if (rs[0] != 0xb3a2 || rs[1]) + __builtin_abort (); + if (rc[0] != 0x9b || rc[1]) + __builtin_abort (); +#endif + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56899.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56899.c new file mode 100644 index 000000000..9adf9af00 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56899.c @@ -0,0 +1,47 @@ +/* PR tree-optimization/56899 */ + +#if __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8 +__attribute__((noinline, noclone)) void +f1 (int v) +{ + int x = -214748365 * (v - 1); + if (x != -1932735285) + __builtin_abort (); +} + +__attribute__((noinline, noclone)) void +f2 (int v) +{ + int x = 214748365 * (v + 1); + if (x != -1932735285) + __builtin_abort (); +} + +__attribute__((noinline, noclone)) void +f3 (unsigned int v) +{ + unsigned int x = -214748365U * (v - 1); + if (x != -1932735285U) + __builtin_abort (); +} + +__attribute__((noinline, noclone)) void +f4 (unsigned int v) +{ + unsigned int x = 214748365U * (v + 1); + if (x != -1932735285U) + __builtin_abort (); +} +#endif + +int +main () +{ +#if __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8 + f1 (10); + f2 (-10); + f3 (10); + f4 (-10U); +#endif + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56962.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56962.c new file mode 100644 index 000000000..7c6da48b3 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr56962.c @@ -0,0 +1,30 @@ +/* PR tree-optimization/56962 */ + +extern void abort (void); +long long v[144]; + +__attribute__((noinline, noclone)) void +bar (long long *x) +{ + if (x != &v[29]) + abort (); +} + +__attribute__((noinline, noclone)) void +foo (long long *x, long y, long z) +{ + long long a, b, c; + a = x[z * 4 + y * 3]; + b = x[z * 5 + y * 3]; + c = x[z * 5 + y * 4]; + x[y * 4] = a; + bar (&x[z * 5 + y]); + x[z * 5 + y * 5] = b + c; +} + +int +main () +{ + foo (v, 24, 1); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57130.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57130.c new file mode 100644 index 000000000..611320325 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57130.c @@ -0,0 +1,21 @@ +/* PR rtl-optimization/57130 */ + +struct S { int a, b, c, d; } s[2] = { { 6, 8, -8, -5 }, { 0, 2, -1, 2 } }; + +__attribute__((noinline, noclone)) void +foo (struct S r) +{ + static int cnt; + if (__builtin_memcmp (&r, &s[cnt++], sizeof r) != 0) + __builtin_abort (); +} + +int +main () +{ + struct S r = { 6, 8, -8, -5 }; + foo (r); + r = (struct S) { 0, 2, -1, 2 }; + foo (r); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57131.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57131.c new file mode 100644 index 000000000..f2c41a16b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57131.c @@ -0,0 +1,19 @@ +/* PR rtl-optimization/57131 */ + +extern void abort (void); + +int +main () +{ + volatile int x1 = 0; + volatile long long x2 = 0; + volatile int x3 = 0; + volatile int x4 = 1; + volatile int x5 = 1; + volatile long long x6 = 1; + long long t = ((x1 * (x2 << x3)) / (x4 * x5)) + x6; + + if (t != 1) + abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57281.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57281.c new file mode 100644 index 000000000..db3db10d9 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57281.c @@ -0,0 +1,25 @@ +/* PR rtl-optimization/57281 */ + +int a = 1, b, d, *e = &d; +long long c, *g = &c; +volatile long long f; + +int +foo (int h) +{ + int j = *g = b; + return h == 0 ? j : 0; +} + +int +main () +{ + int h = a; + for (; b != -20; b--) + { + (int) f; + *e = 0; + *e = foo (h); + } + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57321.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57321.c new file mode 100644 index 000000000..79b3d4d17 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57321.c @@ -0,0 +1,24 @@ +/* PR tree-optimization/57321 */ + +int a = 1, *b, **c; + +static int +foo (int *p) +{ + if (*p == a) + { + int *i[7][5] = { { 0 } }; + int **j[1][1]; + j[0][0] = &i[0][0]; + *b = &p != c; + } + return 0; +} + +int +main () +{ + int i = 0; + foo (&i); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-1.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-1.c new file mode 100644 index 000000000..66893269e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-1.c @@ -0,0 +1,32 @@ +/* PR middle-end/57344 */ + +struct __attribute__((packed)) S +{ + int a : 11; +#if __SIZEOF_INT__ * __CHAR_BIT__ >= 32 + int b : 22; +#else + int b : 13; +#endif + char c; + int : 0; +} s[2]; +int i; + +__attribute__((noinline, noclone)) void +foo (int x) +{ + if (x != -3161) + __builtin_abort (); + asm volatile ("" : : : "memory"); +} + +int +main () +{ + struct S t = { 0, -3161L }; + s[1] = t; + for (; i < 1; i++) + foo (s[1].b); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-2.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-2.c new file mode 100644 index 000000000..9bf60cab8 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-2.c @@ -0,0 +1,32 @@ +/* PR middle-end/57344 */ + +struct __attribute__((packed)) S +{ + int a : 27; +#if __SIZEOF_INT__ * __CHAR_BIT__ >= 32 + int b : 22; +#else + int b : 13; +#endif + char c; + int : 0; +} s[2]; +int i; + +__attribute__((noinline, noclone)) void +foo (int x) +{ + if (x != -3161) + __builtin_abort (); + asm volatile ("" : : : "memory"); +} + +int +main () +{ + struct S t = { 0, -3161L }; + s[1] = t; + for (; i < 1; i++) + foo (s[1].b); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-3.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-3.c new file mode 100644 index 000000000..f9daea6d3 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-3.c @@ -0,0 +1,28 @@ +/* PR middle-end/57344 */ + +struct __attribute__((packed)) S +{ + long long int a : 43; + long long int b : 22; + char c; + long long int : 0; +} s[2]; +int i; + +__attribute__((noinline, noclone)) void +foo (long long int x) +{ + if (x != -3161LL) + __builtin_abort (); + asm volatile ("" : : : "memory"); +} + +int +main () +{ + struct S t = { 0, -3161LL }; + s[1] = t; + for (; i < 1; i++) + foo (s[1].b); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-4.c b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-4.c new file mode 100644 index 000000000..0b2bf1524 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.c-torture/execute/pr57344-4.c @@ -0,0 +1,28 @@ +/* PR middle-end/57344 */ + +struct __attribute__((packed)) S +{ + long long int a : 59; + long long int b : 54; + char c; + long long int : 0; +} s[2]; +int i; + +__attribute__((noinline, noclone)) void +foo (long long int x) +{ + if (x != -1220975898975746LL) + __builtin_abort (); + asm volatile ("" : : : "memory"); +} + +int +main () +{ + struct S t = { 0, -1220975898975746LL }; + s[1] = t; + for (; i < 1; i++) + foo (s[1].b); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/autopar/pr57103.c b/gcc-4.8/gcc/testsuite/gcc.dg/autopar/pr57103.c new file mode 100644 index 000000000..fa7067607 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/autopar/pr57103.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-parallelize-loops=4" } */ + +int d[1024]; + +static inline int foo (void) +{ + int s = 0; + int i = 0; + for (; i < 1024; i++) + s += d[i]; + return s; +} + +void bar (void) +{ + if (foo ()) + __builtin_abort (); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/autopar/pr57185.c b/gcc-4.8/gcc/testsuite/gcc.dg/autopar/pr57185.c new file mode 100644 index 000000000..b4657576d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/autopar/pr57185.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -ftree-parallelize-loops=2 -fipa-pta" } */ + +int a, b; +int *d; +void f(void) +{ + int c; + b %= 1; + + if(1 - (b < 1)) + { + int *q = 0; + + if(a) + { + c = 0; +lbl: + for(*d; *d; ++*d) + if(c ? : a ? : (c = 1) ? : 0) + *q &= 1; + return; + } + + q = (int *)1; + } + goto lbl; +} + diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/const-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/const-1.c index 2a532f896..a5b2b1677 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/const-1.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/const-1.c @@ -1,4 +1,4 @@ -/* { dg-do compile } */ +/* { dg-do compile { target nonpic } } */ /* { dg-options "-O2 -Wsuggest-attribute=const" } */ extern int extern_const(int a) __attribute__ ((const)); diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr56988.c b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr56988.c new file mode 100644 index 000000000..ab20159b8 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr56988.c @@ -0,0 +1,38 @@ +/* { dg-do run } */ +/* { dg-options "-O3" } */ +/* { dg-add-options bind_pic_locally } */ + +struct S +{ + int a, b, c; +}; + +volatile int g; + +static void __attribute__ ((noinline, noclone)) +bar (struct S **p) +{ + g = 5; +}; + +static void __attribute__ ((noinline)) +foo (struct S *p) +{ + int i = p->a; + if (i != 1) + __builtin_abort (); + bar (&p); +} + +int +main (int argc, char *argv[]) +{ + struct S s; + s.a = 1; + s.b = 64; + s.c = 32; + foo (&s); + + return 0; +} + diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr57347.c b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr57347.c new file mode 100644 index 000000000..731b4868e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pr57347.c @@ -0,0 +1,27 @@ +/* { dg-do run } */ +/* { dg-options "-O3" } */ + +struct S1 { int f0; int f1 : 10; int f2 : 13; }; +int i; +int *j = &i; + +static void +foo (struct S1 s) +{ + int *p; + int l[88]; + int **pp = &p; + *pp = &l[1]; + l[0] = 1; + *j = 1 && s.f2; +} + +int +main () +{ + struct S1 s = { 0, 0, 1 }; + foo (s); + if (i != 1) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pure-const-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pure-const-1.c index 51837ea9b..f76dd87d4 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pure-const-1.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/ipa/pure-const-1.c @@ -1,4 +1,4 @@ -/* { dg-do compile } */ +/* { dg-do compile { target nonpic } } */ /* { dg-options "-O3 -fdump-tree-local-pure-const1 -fdump-ipa-pure-const -fdump-tree-optimized -fno-early-inlining" } */ void abort (void); int error_code; diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/noreturn-8.c b/gcc-4.8/gcc/testsuite/gcc.dg/noreturn-8.c index 50765da37..1e75633c8 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/noreturn-8.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/noreturn-8.c @@ -1,4 +1,4 @@ -/* { dg-do run } */ +/* { dg-do run { target nonpic } } */ /* { dg-options "-O2" } */ void exit (int); void noreturn_autodetection_failed (); diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr48186.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr48186.c new file mode 100644 index 000000000..5635f930d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr48186.c @@ -0,0 +1,5 @@ +/* PR tree-optimization/48186 */ +/* { dg-do compile } */ +/* { dg-options "-O --param hot-bb-frequency-fraction=0" } */ + +void foo (void) { } diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr55702.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr55702.c new file mode 100644 index 000000000..8770a3758 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr55702.c @@ -0,0 +1,9 @@ +/* PR sanitizer/55702 */ +/* { dg-do compile { target { x86_64-*-linux* && lp64 } } } */ +/* { dg-options "-fsanitize=thread" } */ + +void +foo () +{ + __builtin_return (0); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr56847.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr56847.c new file mode 100644 index 000000000..b94aae1d8 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr56847.c @@ -0,0 +1,12 @@ +/* PR rtl-optimization/56847 */ +/* { dg-do compile { target pie } } */ +/* { dg-options "-O2 -fpie" } */ + +struct S { long int a, b; } e; +__thread struct S s; + +void +foo (void) +{ + s = e; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr56890-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr56890-1.c new file mode 100644 index 000000000..93b2134e5 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr56890-1.c @@ -0,0 +1,15 @@ +/* PR target/56890 */ +/* Reported by Rainer Jung <rainer.jung@kippdata.de> */ + +/* { dg-do assemble } */ +/* { dg-options "-O2" } */ + +unsigned int buggy(unsigned int min, unsigned int max) +{ + if (max < 16384) { + unsigned short num16 = 0; + num16 = min + (long) ((double) (max - min + 1.0) * (num16 / (65535 + 1.0))); + return num16; + } + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr56890-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr56890-2.c new file mode 100644 index 000000000..474327e9d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr56890-2.c @@ -0,0 +1,19 @@ +/* PR target/56890 */ +/* Reported by Rainer Jung <rainer.jung@kippdata.de> */ + +/* { dg-do assemble } */ +/* { dg-options "-O" } */ + +unsigned int buggy(unsigned int min, unsigned int max) +{ + unsigned int number; + if (max < 16384) { + unsigned short num16; + num16 = min + (long) ((double) (max - min + 1.0) * (num16 / (65535 + 1.0))); + return num16; + } + else { + (number) = min + (long) ((double) (max - min + 1.0) * (number / (4294967295U + 1.0))); + } + return number; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr56990.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr56990.c new file mode 100644 index 000000000..ecb6acef6 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr56990.c @@ -0,0 +1,10 @@ +/* PR sanitizer/56990 */ +/* { dg-do compile { target { x86_64-*-linux* && lp64 } } } */ +/* { dg-options "-fsanitize=thread" } */ + +struct S{}; + +void foo(struct S *p) +{ + *p = (struct S){}; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr56992.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr56992.c new file mode 100644 index 000000000..e945a18ca --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr56992.c @@ -0,0 +1,18 @@ +/* PR rtl-optimization/56992 */ +/* { dg-do compile } */ +/* { dg-options "-Og -g" } */ + +inline int +foo (const char *x) +{ + return __builtin_strlen (x); +} + +int +bar (const char *x, unsigned int *y) +{ + unsigned int l = foo (x); + if (l > 15) + l = 15; + *y = l; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr57104.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr57104.c new file mode 100644 index 000000000..3a7013bea --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr57104.c @@ -0,0 +1,12 @@ +/* PR tree-optimization/57104 */ +/* { dg-do compile { target { x86_64-*-linux* && lp64 } } } */ +/* { dg-options "-fsanitize=thread" } */ + +register int r asm ("r14"); +int v; + +int +foo (void) +{ + return r + v; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr57149.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr57149.c new file mode 100644 index 000000000..ab4d5e408 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr57149.c @@ -0,0 +1,50 @@ +/* PR tree-optimization/57149 */ +/* { dg-do compile } */ +/* { dg-options "-Os -Wuninitialized" } */ + +struct A { struct A *a, *b; }; +struct D { struct A e; }; +struct E { unsigned char f; struct { struct A e; } g; }; +struct F { struct E i[32]; }; + +extern int fn0 (void); +extern int fn1 (struct E *, struct D *); + +static inline __attribute__ ((always_inline)) int +fn2 (const struct A *x) +{ + return x->a == x; +} + +static int +fn3 (struct E *x) +{ + struct D *l, *m; + int retval = retval; + if (fn2 (&x->g.e)) + return 0; + for (l = (struct D *) x->g.e.a, m = (struct D *) l->e.a; + &l->e != &x->g.e; + l = m, m = (struct D *) m->e.a) + retval = fn1 (x, l); + return retval; +} + +void +fn4 (struct F *x, unsigned k) +{ + unsigned i; + for (i = 0; i < k; i++) + { + struct E *y = &x->i[i]; + int err = -22; + err = fn3 (y); + if (y->f == 0) + { + if (err > 0) + err = fn0 (); + if (err < 0) /* { dg-bogus "may be used uninitialized in this function" } */ + fn0 (); + } + } +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr57184.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr57184.c new file mode 100644 index 000000000..319d3fd53 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr57184.c @@ -0,0 +1,13 @@ +/* PR debug/57184 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -g" } */ + +struct S {}; +void bar (struct S *const); +static struct S *const c = &(struct S) {}; + +void +foo (void) +{ + bar (c); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/pr57300.c b/gcc-4.8/gcc/testsuite/gcc.dg/pr57300.c new file mode 100644 index 000000000..13a272de5 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/pr57300.c @@ -0,0 +1,21 @@ +/* PR rtl-optimization/57300 */ +/* { dg-do run } */ +/* { dg-options "-O3" } */ +/* { dg-additional-options "-msse2" { target sse2_runtime } } */ + +extern void abort (void); +int a, b, d[10]; +long long c; + +int +main () +{ + int e; + for (e = 0; e < 10; e++) + d[e] = 1; + if (d[0]) + c = a = (b == 0 || 1 % b); + if (a != 1) + abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/strlenopt-23.c b/gcc-4.8/gcc/testsuite/gcc.dg/strlenopt-23.c new file mode 100644 index 000000000..75dab2ae0 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/strlenopt-23.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/57230 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#include "strlenopt.h" + +int +main () +{ + char p[] = "hello world"; + p[0] = (char) (strlen (p) - 1); + if (strlen (p) != 11) + abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c index 387ed2f75..d759d1c6c 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c @@ -48,25 +48,25 @@ extern void link_error(int); /* Test if FUNCRES(FUNC(NEG FUNCARG(ARGARG))) is false. Check the sign as well. */ #ifndef __SPU__ -#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES) do { \ +#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES,NEG2) do { \ if (!__builtin_##FUNCRES##f(__builtin_##FUNC(NEG __builtin_##FUNCARG##f(ARGARG))) \ - || CKSGN_F(__builtin_##FUNC##f(NEG __builtin_##FUNCARG##f(ARGARG)), NEG __builtin_##FUNCARG##f(ARGARG))) \ + || CKSGN_F(__builtin_##FUNC##f(NEG __builtin_##FUNCARG##f(ARGARG)), NEG2 __builtin_##FUNCARG##f(ARGARG))) \ link_error(__LINE__); \ if (!__builtin_##FUNCRES(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG))) \ - || CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG)), NEG __builtin_##FUNCARG(ARGARG))) \ + || CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG)), NEG2 __builtin_##FUNCARG(ARGARG))) \ link_error(__LINE__); \ if (!__builtin_##FUNCRES##l(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG))) \ - || CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG __builtin_##FUNCARG##l(ARGARG))) \ + || CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG2 __builtin_##FUNCARG##l(ARGARG))) \ link_error(__LINE__); \ } while (0) #else -#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES) do { \ +#define TESTIT3(FUNC,NEG,FUNCARG,ARGARG,FUNCRES,NEG2) do { \ /* SPU single-precision floating point format does not support Inf or Nan. */ \ if (!__builtin_##FUNCRES(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG))) \ - || CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG)), NEG __builtin_##FUNCARG(ARGARG))) \ + || CKSGN(__builtin_##FUNC(NEG __builtin_##FUNCARG(ARGARG)), NEG2 __builtin_##FUNCARG(ARGARG))) \ link_error(__LINE__); \ if (!__builtin_##FUNCRES##l(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG))) \ - || CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG __builtin_##FUNCARG##l(ARGARG))) \ + || CKSGN_L(__builtin_##FUNC##l(NEG __builtin_##FUNCARG##l(ARGARG)), NEG2 __builtin_##FUNCARG##l(ARGARG))) \ link_error(__LINE__); \ } while (0) #endif @@ -173,15 +173,15 @@ foo(void) /* Test for f(+-Inf) -> +-Inf and f(+-NaN) -> +-NaN, regardless of the radix. */ - TESTIT3 (logb, ,inf, , isinf); - TESTIT3 (logb, - ,inf, , isinf); - TESTIT3 (logb, ,nan, "", isnan); - TESTIT3 (logb, - ,nan, "", isnan); - - TESTIT3 (significand, ,inf, , isinf); - TESTIT3 (significand, - ,inf, , isinf); - TESTIT3 (significand, ,nan, "", isnan); - TESTIT3 (significand, - ,nan, "", isnan); + TESTIT3 (logb, ,inf, , isinf, ); + TESTIT3 (logb, - ,inf, , isinf, ); + TESTIT3 (logb, ,nan, "", isnan, ); + TESTIT3 (logb, - ,nan, "", isnan, -); + + TESTIT3 (significand, ,inf, , isinf, ); + TESTIT3 (significand, - ,inf, , isinf, -); + TESTIT3 (significand, ,nan, "", isnan, ); + TESTIT3 (significand, - ,nan, "", isnan, -); } int main() diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr55964-2.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr55964-2.c new file mode 100644 index 000000000..a3bd09d5b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr55964-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-ftree-loop-distribution -funswitch-loops" } */ + +struct test_struct { + int a, b[10], c[10], d[10]; +}; + +extern struct test_struct* new_struct; + +void testfunc(struct test_struct* old_struct) +{ + int i; + for (i = 0; i < 10; ++i) + { + new_struct->b[i] = old_struct ? old_struct->b[i] : -1; + new_struct->c[i] = old_struct ? old_struct->c[i] : 0; + new_struct->d[i] = old_struct ? old_struct->d[i] : 0; + } + if (old_struct) + old_struct->a++; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr56407.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr56407.c new file mode 100644 index 000000000..f26fd23f7 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr56407.c @@ -0,0 +1,48 @@ +/* { dg-do run } */ + +extern void abort(void); +extern int rand(void); + +static void copy(int *r,int *a,int na) +{ + int i; + for( i = 0 ; i < na ; i++ ) + r[i] = a[i]; +} + +static void foo(int *a,int na) +{ + int i; + for( i = 0 ; i < na ; i++ ) + a[i] = rand(); +} + +static int cmp(int *a,int *b,int n) +{ + int i; + for( i = 0 ; i < n ; i++ ) + if ( a[i] != b[i] ) + return -1; + return 0; +} + +void __attribute__((noinline,noclone)) +test(int sz,int comm) +{ + int j,n; + int v[64],w[64]; + for( j = 1 ; j <= sz ; j++ ) + { + n = (2 * j - 1) * (2 * j - 1); + foo(w,n); + copy(v,w,n); + if ( comm ) + if ( cmp(v,w,n) ) abort (); + } +} + +int main() +{ + test(2,1); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr56501.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr56501.c new file mode 100644 index 000000000..d6fc29d7b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr56501.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-w" } */ + +int a; +void try_help () __attribute__ ((__noreturn__)); +void try_help () +{ +} + +int main () +{ + switch (a) + { + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + break; + default: + try_help (); + } +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57083.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57083.c new file mode 100644 index 000000000..070a53d21 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57083.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/57083 */ +/* { dg-do run { target int32plus } } */ + +extern void abort (void); +short x = 1; +int y = 0; + +int +main () +{ + unsigned t = (0x7fff8001U - x) << (y == 0); + if (t != 0xffff0000U) + abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57214.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57214.c new file mode 100644 index 000000000..d51067d95 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57214.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ + +extern int baz (void); +extern int foo (void) __attribute__ ((returns_twice)); + +void +bar (_Bool b) +{ + int buf[1]; + while (1) + { + _Bool x = 1; + if (b) + baz (); + b = 1; + baz (); + x = 0; + int i; + while (buf[i] && i) + i++; + foo (); + if (!x) + b = 0; + } +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57251.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57251.c new file mode 100644 index 000000000..2fe268c36 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57251.c @@ -0,0 +1,12 @@ +/* PR middle-end/57251 */ +/* { dg-do compile } */ +/* { dg-options "-ftracer" } */ + +short a, b; +int +f (void) +{ + long long i = 2; + a ? f () ? : 0 : b--; + b &= i *= a |= 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57303.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57303.c new file mode 100644 index 000000000..1ddb5a8aa --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57303.c @@ -0,0 +1,33 @@ +/* { dg-do run } */ + +void abort (void); + +struct S0 +{ + int f0; +}; +struct S1 +{ + struct S0 f0; +}; + +struct S1 x = { {0} }; +struct S1 y = { {1} }; + +static void +foo (struct S0 p) +{ + struct S0 *l = &y.f0; + *l = x.f0; + if (p.f0) + *l = *l; +} + +int +main () +{ + foo(y.f0); + if (y.f0.f0 != 0) + abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57330.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57330.c new file mode 100644 index 000000000..3e6cbcbd2 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57330.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ + +void foo (int a) +{} + +void *a; +void bar () +{ + void **( *b ) ( ) = (void**(*)()) foo; + a = b (0); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57341.c b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57341.c new file mode 100644 index 000000000..3f5cc8dd7 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/torture/pr57341.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ +/* { dg-additional-options "-msse" { target sse2_runtime } } */ + +int a, d; +int *b = &a, **c; +int +main () +{ + int e; + { + int f[4]; + for (d = 0; d < 4; d++) + f[d] = 1; + e = f[1]; + } + int *g[28] = { }; + *b = e; + c = &g[0]; + if (a != 1) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c index bf0714902..abf1e07e2 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c @@ -1,4 +1,4 @@ -/* { dg-do compile } */ +/* { dg-do compile { target nonpic } } */ /* { dg-options "-O3 -fdump-tree-fnsplit -fdump-tree-optimized" } */ struct a {int a,b;}; diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c index 6fc2a57a9..bcd72c5ef 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c @@ -1,4 +1,4 @@ -/* { dg-do compile } */ +/* { dg-do compile { target nonpic } } */ /* { dg-options "-O2 -fdump-tree-pre-stats -fdump-tree-fre1" } */ #include <stddef.h> diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/reassoc-27.c b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/reassoc-27.c new file mode 100644 index 000000000..f406beb2f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/reassoc-27.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ffast-math -frounding-math -fdump-tree-optimized" } */ + +double baz (double foo, double bar) +{ + return foo * foo * foo * foo * bar * bar * bar * bar; +} + +/* We should re-associate this as (foo * bar)**3. */ +/* { dg-final { scan-tree-dump-times " \\\* " 3 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c index c21dc17b5..70cde1b80 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/tree-ssa/stdarg-6.c @@ -33,3 +33,4 @@ bar (int x, char const *y, ...) /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units" "stdarg" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units" "stdarg" { target ia64-*-* } } } */ /* { dg-final { scan-tree-dump "bar: va_list escapes 1, needs to save all GPR units" "stdarg" { target { powerpc*-*-* && lp64 } } } } */ +/* { dg-final { cleanup-tree-dump "stdarg" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_a.c b/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_a.c index 7fa0b253f..5ced8971c 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_a.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_a.c @@ -6,8 +6,9 @@ int bar(); int blah(int); void t(int); +static int __attribute__((always_inline)) -int foo (int n, int* v, int r) +foo (int n, int* v, int r) { int flag = 0; if (r > n) diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_b.c b/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_b.c index 9760fa8a5..e8da25656 100644 --- a/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_b.c +++ b/gcc-4.8/gcc/testsuite/gcc.dg/uninit-pred-5_b.c @@ -6,8 +6,9 @@ int bar(); int blah(int); void t(int); +static int __attribute__((always_inline)) -int foo (int n, int* v, int r) +foo (int n, int* v, int r) { int flag = 0; if (r > n) diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr56918.c b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr56918.c new file mode 100644 index 000000000..581faa0e2 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr56918.c @@ -0,0 +1,31 @@ +/* PR tree-optimization/56918 */ +/* { dg-additional-options "-O3" } */ + +#include "tree-vect.h" + +extern void abort (void); +double data[8]; + +__attribute__((noinline, noclone)) void +foo () +{ + int i; + for (i = 0; i < 8; ++i) + data[i] = ((i + 2) % 3) + 1; +} + +int +main () +{ + int i; + check_vect (); + foo (); + if (data[0] != 3 || data[7] != 1) + abort (); + for (i = 1; i < 4; ++i) + if (data[i] != i || data[i + 3] != i) + abort (); + return 0; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr56920.c b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr56920.c new file mode 100644 index 000000000..c6c7cca0f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.dg/vect/pr56920.c @@ -0,0 +1,21 @@ +/* PR tree-optimization/56920 */ +/* { dg-additional-options "-O3" } */ + +#include "tree-vect.h" + +extern void abort (void); + +int +main () +{ + unsigned int a[15], i; + check_vect (); + for (i = 0; i < 15; ++i) + a[i] = (i * 2) % 15; + for (i = 0; i < 15; ++i) + if (a[i] != (i * 2) % 15) + abort (); + return 0; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/asm-adder-clobber-lr.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/asm-adder-clobber-lr.c new file mode 100644 index 000000000..540c79b01 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/asm-adder-clobber-lr.c @@ -0,0 +1,23 @@ +extern void abort (void); + +int +adder (int a, int b) +{ + int result; + __asm__ ("add %w0,%w1,%w2" : "=r"(result) : "r"(a), "r"(b) : "x30"); + return result; +} + +int +main (int argc, char** argv) +{ + int i; + int total = argc; + for (i = 0; i < 20; i++) + total = adder (total, i); + + if (total != (190 + argc)) + abort (); + + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/asm-adder-no-clobber-lr.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/asm-adder-no-clobber-lr.c new file mode 100644 index 000000000..2543d50e7 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/asm-adder-no-clobber-lr.c @@ -0,0 +1,23 @@ +extern void abort (void); + +int +adder (int a, int b) +{ + int result; + __asm__ ("add %w0,%w1,%w2" : "=r"(result) : "r"(a), "r"(b) : ); + return result; +} + +int +main (int argc, char** argv) +{ + int i; + int total = argc; + for (i = 0; i < 20; i++) + total = adder (total, i); + + if (total != (190 + argc)) + abort (); + + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/movk.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/movk.c new file mode 100644 index 000000000..e4b22098c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/movk.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-options "-O2 --save-temps -fno-inline" } */ + +extern void abort (void); + +long long int +dummy_number_generator () +{ + /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0xefff, lsl 16" } } */ + /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0xc4cc, lsl 32" } } */ + /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0xfffe, lsl 48" } } */ + return -346565474575675; +} + +int +main (void) +{ + + long long int num = dummy_number_generator (); + if (num > 0) + abort (); + + /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0x4667, lsl 16" } } */ + /* { dg-final { scan-assembler "movk\tx\[0-9\]+, 0x7a3d, lsl 32" } } */ + if (num / 69313094915135 != -5) + abort (); + + return 0; +} + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-1.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-1.c new file mode 100644 index 000000000..e44ca6d4c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-1.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-no-clobber-lr.c" + +/* omit-frame-pointer is FALSE. + omit-leaf-frame-pointer is FALSE. + LR is not being clobbered in the leaf. + + With no frame pointer omissions, we expect a frame record + for main and the leaf. */ + +/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 2 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-2.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-2.c new file mode 100644 index 000000000..40e483526 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-2.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fomit-frame-pointer -mno-omit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-no-clobber-lr.c" + +/* omit-frame-pointer is TRUE. + omit-leaf-frame-pointer is false, but irrelevant due to omit-frame-pointer. + LR is not being clobbered in the leaf. + + Since we asked to have no frame pointers anywhere, we expect no frame + record in main or the leaf. */ + +/* { dg-final { scan-assembler-not "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-3.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-3.c new file mode 100644 index 000000000..98cb2e0b6 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-3.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-no-clobber-lr.c" + +/* omit-frame-pointer is TRUE. + omit-leaf-frame-pointer is true, but irrelevant due to omit-frame-pointer. + LR is not being clobbered in the leaf. + + Since we asked to have no frame pointers anywhere, we expect no frame + record in main or the leaf. */ + +/* { dg-final { scan-assembler-not "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-4.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-4.c new file mode 100644 index 000000000..4143a7a9c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-4.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -momit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-no-clobber-lr.c" + +/* omit-frame-pointer is FALSE. + omit-leaf-frame-pointer is TRUE. + LR is not being clobbered in the leaf. + + Unless we are removing all frame records, it's OK to remove the frame + record for a leaf where LR is not clobbered. Therefore, we expect a + frame record only in main. */ + +/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 1 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-5.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-5.c new file mode 100644 index 000000000..c22bdc304 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-5.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-clobber-lr.c" + +/* omit-frame-pointer is FALSE. + omit-leaf-frame-pointer is FALSE. + LR is being clobbered in the leaf. + + With no frame pointer omissions, we expect a frame record for main + and the leaf. */ + +/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 2 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-6.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-6.c new file mode 100644 index 000000000..e08ee43e5 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-6.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fomit-frame-pointer -mno-omit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-clobber-lr.c" + +/* omit-frame-pointer is TRUE. + omit-leaf-frame-pointer is false, but irrelevant due to omit-frame-pointer. + LR is being clobbered in the leaf. + + Since we asked to have no frame pointers anywhere, we expect no frame + record in main or the leaf. */ + +/* { dg-final { scan-assembler-not "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-7.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-7.c new file mode 100644 index 000000000..e8f7cabe7 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-7.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-clobber-lr.c" + +/* omit-frame-pointer is TRUE. + omit-leaf-frame-pointer is true, but irrelevant due to omit-frame-pointer. + LR is being clobbered in the leaf. + + Since we asked to have no frame pointers anywhere, we expect no frame + record in main or the leaf. */ + +/* { dg-final { scan-assembler-not "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-8.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-8.c new file mode 100644 index 000000000..c09b68759 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/test-framepointer-8.c @@ -0,0 +1,16 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -momit-leaf-frame-pointer -fno-inline --save-temps" } */ + +#include "asm-adder-clobber-lr.c" + +/* omit-frame-pointer is FALSE. + omit-leaf-frame-pointer is TRUE. + LR is being clobbered in the leaf. + + Unless we are removing all frame records (which we aren't), it's + not OK to remove the frame record for a leaf where LR is clobbered. + Therefore, we expect a frame record in main and leaf. */ + +/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 2 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-d.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-d.c index b6fb5ae87..19ecd63b1 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-d.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-d.c @@ -7,7 +7,7 @@ #include "vect-fcm.x" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" } } */ /* { dg-final { scan-assembler "fcmeq\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2d" } } */ /* { dg-final { scan-assembler "fcmeq\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, 0" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-f.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-f.c index 283d34fb8..30be5adf5 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-f.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-eq-f.c @@ -7,7 +7,7 @@ #include "vect-fcm.x" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" } } */ /* { dg-final { scan-assembler "fcmeq\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s" } } */ /* { dg-final { scan-assembler "fcmeq\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, 0" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-d.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-d.c index 868e1f8e6..b922833be 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-d.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-d.c @@ -7,8 +7,9 @@ #include "vect-fcm.x" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" } } */ /* { dg-final { scan-assembler "fcmge\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2d" } } */ /* { dg-final { scan-assembler "fcmge\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, 0" } } */ +/* { dg-final { scan-assembler "fcmlt\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, 0" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-f.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-f.c index e3258f364..04d3533ff 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-f.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-ge-f.c @@ -7,8 +7,9 @@ #include "vect-fcm.x" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" } } */ /* { dg-final { scan-assembler "fcmge\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s" } } */ /* { dg-final { scan-assembler "fcmge\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, 0" } } */ +/* { dg-final { scan-assembler "fcmlt\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, 0" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-d.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-d.c index ed8b45215..421a04acf 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-d.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-d.c @@ -7,8 +7,9 @@ #include "vect-fcm.x" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" } } */ /* { dg-final { scan-assembler "fcmgt\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, v\[0-9\]+\.2d" } } */ /* { dg-final { scan-assembler "fcmgt\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, 0" } } */ +/* { dg-final { scan-assembler "fcmle\\tv\[0-9\]+\.2d, v\[0-9\]+\.2d, 0" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-f.c b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-f.c index e90a87581..cdeab14e0 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-f.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm-gt-f.c @@ -7,8 +7,9 @@ #include "vect-fcm.x" -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 4 "vect" } } */ /* { dg-final { scan-assembler "fcmgt\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s" } } */ /* { dg-final { scan-assembler "fcmgt\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, 0" } } */ +/* { dg-final { scan-assembler "fcmle\\tv\[0-9\]+\.\[24\]s, v\[0-9\]+\.\[24\]s, 0" } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ /* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm.x b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm.x index 7e51bef0c..803861b02 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm.x +++ b/gcc-4.8/gcc/testsuite/gcc.target/aarch64/vect-fcm.x @@ -40,6 +40,15 @@ foobar (FTYPE *in1, FTYPE *in2, FTYPE *output) output[i] = (in1[i] OP 0.0) ? 4.0 : 2.0; } +void +foobarbar (FTYPE *in1, FTYPE *in2, FTYPE *output) +{ + int i = 0; + /* Vectorizable. */ + for (i = 0; i < N; i++) + output[i] = (in1[i] INV_OP 0.0) ? 4.0 : 2.0; +} + int main (int argc, char **argv) { @@ -51,6 +60,11 @@ main (int argc, char **argv) for (i = 0; i < N; i++) if (out1[i] != out2[i]) abort (); + foobar (input1, input2, out1); + foobarbar (input1, input2, out2); + for (i = 0; i < N; i++) + if (out1[i] == out2[i]) + abort (); return 0; } diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-gt.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-gt.c new file mode 100644 index 000000000..86ccf95ad --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-gt.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O1 -funsafe-math-optimizations -ftree-vectorize" } */ +/* { dg-add-options arm_neon } */ + +#define MAX(a, b) (a > b ? a : b) +void foo (int ilast,float* w, float* w2) +{ + int i; + for (i = 0; i < ilast; ++i) + { + w[i] = MAX (0.0f, w2[i]); + } +} + +/* { dg-final { scan-assembler "vcgt\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vbit\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c new file mode 100644 index 000000000..acb23a947 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-ltgt.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O1 -funsafe-math-optimizations -ftree-vectorize" } */ +/* { dg-add-options arm_neon } */ + +#define LTGT(a, b) (__builtin_islessgreater (a, b) ? a : b) +void foo (int ilast,float* w, float* w2) +{ + int i; + for (i = 0; i < ilast; ++i) + { + w[i] = LTGT (0.0f, w2[i]); + } +} + +/* { dg-final { scan-assembler-times "vcgt\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler "vorr\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vbsl\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c new file mode 100644 index 000000000..c3e448d62 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/neon-vcond-unordered.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O1 -funsafe-math-optimizations -ftree-vectorize" } */ +/* { dg-add-options arm_neon } */ + +#define UNORD(a, b) (__builtin_isunordered (a, b) ? a : b) +void foo (int ilast,float* w, float* w2) +{ + int i; + for (i = 0; i < ilast; ++i) + { + w[i] = UNORD (0.0f, w2[i]); + } +} + +/* { dg-final { scan-assembler "vcgt\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vcge\\.f32\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vorr\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ +/* { dg-final { scan-assembler "vbsl\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+,\[\\t \]*q\[0-9\]+" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/arm/pr56732-1.c b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr56732-1.c new file mode 100644 index 000000000..ac8b8cf67 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/arm/pr56732-1.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target naked_functions } */ +/* { dg-options "-O2 -Wall" } */ +extern void bar(); + +void __attribute__((__naked__)) +foo(void) +{ + bar (); +} + +int __attribute__((naked)) +zoo (int a, int b, int c, int d, int e, int f) +{ + bar (); + return e; +} +/* Verify that __attribute__((naked)) produces a naked function that + does not use bx to return. */ +/* { dg-final { scan-assembler-not "\tbx\tlr" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-1.c index c0592d508..7805e3ddb 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-1.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-1.c @@ -10,5 +10,5 @@ __m128i y; void extern avx2_test (void) { - x = _mm_broadcastsi128_si256 (y); + x = _mm256_broadcastsi128_si256 (y); } diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-2.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-2.c index 6d3af38ff..ef1d370ab 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-2.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/avx2-vbroadcastsi128-2.c @@ -19,7 +19,7 @@ avx2_test (void) for (j = 0; j < 2; j++) s1.a[j] = j * i; - res.x = _mm_broadcastsi128_si256 (s1.x); + res.x = _mm256_broadcastsi128_si256 (s1.x); memcpy (res_ref, s1.a, 16); memcpy (res_ref + 2, s1.a, 16); diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/mmx-1.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/mmx-1.c index 0b31a531a..e304acaa3 100644 --- a/gcc-4.8/gcc/testsuite/gcc.target/i386/mmx-1.c +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/mmx-1.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-do compile { target { nonpic } } } */ /* { dg-options "-O2 -Werror-implicit-function-declaration -mmmx" } */ /* Test that the intrinsics compile with optimization. All of them are diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr44578.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr44578.c new file mode 100644 index 000000000..20f76c31c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr44578.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -mtune=athlon64" } */ + +extern void abort (void); + +long double +__attribute__((noinline, noclone)) +test (float num) +{ + unsigned int i; + + if (num < 0.0) + num = 0.0; + + __builtin_memcpy (&i, &num, sizeof(unsigned int)); + + return (long double)(unsigned long long) i; +} + +int +main () +{ + long double x; + + x = test (0.0); + + if (x != 0.0) + abort (); + + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56560.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56560.c new file mode 100644 index 000000000..5417cbdde --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56560.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx -mvzeroupper -dp" } */ + +extern void abort (void); + +typedef double vec_t __attribute__((vector_size(32))); + +struct S { int i1; int i2; int i3; }; + +extern int bar (vec_t, int, int, int, int, int, struct S); + +void foo (vec_t v, struct S s) +{ + int i = bar (v, 1, 2, 3, 4, 5, s); + if (i == 0) + abort (); +} + +/* { dg-final { scan-assembler-not "avx_vzeroupper" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56866.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56866.c new file mode 100644 index 000000000..fbd151745 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56866.c @@ -0,0 +1,16 @@ +/* PR target/56866 */ +/* { dg-do run } */ +/* { dg-require-effective-target xop } */ +/* { dg-options "-O3 -mxop" } */ + +#define main xop_test_main +#include "../../gcc.c-torture/execute/pr56866.c" +#undef main + +#include "xop-check.h" + +static void +xop_test (void) +{ + xop_test_main (); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56903.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56903.c new file mode 100644 index 000000000..9e6a1c391 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr56903.c @@ -0,0 +1,18 @@ +/* PR rtl-optimization/56903 */ +/* { dg-do compile } */ +/* { dg-options "-Os" } */ +/* { dg-additional-options "-march=pentium3" { target ia32 } } */ + +int a, *b, c; +struct S { int s : 1; } *fn1 (void); +extern int fn3 (void), fn4 (int *); + +void +fn2 (void) +{ + int e = fn3 (); + char f = c + fn1 ()->s * 4; + if (*b && f == e) + a = *b; + fn4 (b); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57003.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57003.c new file mode 100644 index 000000000..dfa6b8b50 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57003.c @@ -0,0 +1,54 @@ +/* PR rtl-optimization/57003 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#define N 2001 +unsigned short *b, *c, *d; + +__attribute__ ((noinline, noclone)) unsigned +bar (void) +{ + asm volatile ("" : : : "memory"); + return N; +} + +__attribute__ ((noinline, noclone)) unsigned short * +baz (unsigned long x) +{ + if (x != N * sizeof (unsigned short) + 20) + __builtin_abort (); + asm volatile ("" : : : "memory"); + return d; +} + +__attribute__ ((ms_abi, noinline, noclone)) +foo (void) +{ + unsigned d; + unsigned short *e; + if ((d = bar ())) + { + e = baz (d * sizeof (unsigned short) + 20); + __builtin_memcpy (e, b, d * sizeof (unsigned short)); + c = e; + } +} + +int +main () +{ + unsigned short a[2 * N]; + int i; + for (i = 0; i < 2 * N; i++) + a[i] = i + 1; + b = a; + d = a + N; + asm volatile ("" : : : "memory"); + foo (); + for (i = 0; i < N; i++) + if (a[i] != i + 1 || a[i + N] != i + 1) + __builtin_abort (); + if (c != a + N) + __builtin_abort (); + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57018.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57018.c new file mode 100644 index 000000000..fb0d849ad --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57018.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-options "-Os -fomit-frame-pointer -fno-asynchronous-unwind-tables" } */ +/* { dg-additional-options "-march=i686" { target ia32 } } */ + +struct A { char a[16]; } a; + +void __attribute__((noinline, noclone)) +foo (struct A b) +{ + if (__builtin_memcmp (b.a, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16)) + __builtin_abort (); + asm volatile ("" : : : "memory"); +} + +void __attribute__((noinline, noclone)) +bar (struct A b) +{ + foo (a); + a = b; +} + +int +main () +{ + struct A b = { "\0\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17" }; + bar (b); + if (__builtin_memcmp (a.a, b.a, 16)) + __builtin_abort (); + return 0; +} + diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57046.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57046.c new file mode 100644 index 000000000..0aa43f9df --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57046.c @@ -0,0 +1,77 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +struct emac { + unsigned reg[23]; +}; + +struct mop { + unsigned long long addr; + unsigned int size; +}; + +unsigned int __attribute__((__noinline__)) +level(const struct emac *obj) +{ + return 0; +} + +void __attribute__((__noinline__)) +info(struct emac *dev, unsigned long long addr) +{ + asm("" : : : "memory"); +} + +unsigned long long __attribute__((__noinline__)) +get_value(const struct mop *mop) +{ + return 0x1234567890abcdefull; +} + +int __attribute__((__noinline__)) +emac_operation(struct emac *obj, struct mop *mop) +{ + unsigned long long addr = mop->addr; + int index = addr >> 2; + unsigned int value, old_value; + + if (mop->size != 4) + return 0; + + if (index >= 23) { + if (level(obj) >= 1) + info(obj, addr); + return 0; + } + + value = get_value(mop); + old_value = obj->reg[index]; + + info(obj, 0); + + switch (index) { + case 0: + obj->reg[0] = old_value; + break; + case 7: + case 8: + obj->reg[index] = value; + break; + } + + return 0; +} + +int main(void) +{ + struct emac e = { { 0 } }; + struct mop mop = { 32, 4 }; + + e.reg[8] = 0xdeadbeef; + emac_operation(&e, &mop); + + if (e.reg[8] != 0x90abcdef) + __builtin_abort(); + + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57091.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57091.c new file mode 100644 index 000000000..4fc7ed769 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57091.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O -mcmodel=large" { target lp64 } } */ +void (*bar)(); + +void foo (void) +{ + bar (); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57097.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57097.c new file mode 100644 index 000000000..2f0093840 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57097.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fPIC" } */ +extern double ad[], bd[], cd[], dd[]; +extern long long all[], bll[], cll[], dll[]; + +int +main (int i, char **a) +{ + bd[i] = i + 64; + if (i % 3 == 0) + { + cd[i] = i; + } + dd[i] = i / 2; + ad[i] = i * 2; + if (i % 3 == 1) + { + dll[i] = 127; + } + dll[i] = i; + cll[i] = i * 2; + switch (i % 3) + { + case 0: + bll[i] = i + 64; + } + all[i] = i / 2; + return 0; +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57098.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57098.c new file mode 100644 index 000000000..37598d7ce --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57098.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-msse4 -mcmodel=large" } */ + +typedef int V __attribute__((vector_size(16))); + +void foo (V *p, V *mask) +{ + *p = __builtin_shuffle (*p, *mask); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57106.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57106.c new file mode 100644 index 000000000..6fccd8aac --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57106.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fschedule-insns -funroll-all-loops -fcompare-debug" } */ + +typedef void block128_f (int *, int); + +void +foo (int *out, int *iv, block128_f block) +{ + while (1) + { + *out = *out ^ *iv; + block (out, *out); + iv = out; + } +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57264.c b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57264.c new file mode 100644 index 000000000..46fce7f04 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/i386/pr57264.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -mcld" } */ + +void test (int x, int **pp) +{ + while (x) + { + int *ip = *pp; + int *op = *pp; + while (*ip) + { + int v = *ip++; + *op++ = v + 1; + } + } +} + +/* { dg-final { scan-assembler-not "stosl" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr56605.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr56605.c new file mode 100644 index 000000000..7e5af449d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr56605.c @@ -0,0 +1,13 @@ +/* PR rtl-optimization/56605 */ +/* { dg-do compile { target { powerpc64-*-* && lp64 } } } */ +/* { dg-options "-O3 -mvsx -mcpu=power7 -fno-unroll-loops -fdump-rtl-loop2_doloop" } */ + +void foo (short* __restrict sb, int* __restrict ia) +{ + int i; + for (i = 0; i < 4000; i++) + ia[i] = (int) sb[i]; +} + +/* { dg-final { scan-rtl-dump-times "\\\(compare:CC \\\(subreg:SI \\\(reg:DI" 1 "loop2_doloop" } } */ +/* { dg-final { cleanup-rtl-dump "loop2_doloop" } } */ diff --git a/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57150.c b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57150.c new file mode 100644 index 000000000..119bc4c52 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/powerpc/pr57150.c @@ -0,0 +1,23 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7 -fcaller-saves" } */ +/* { dg-final { scan-assembler-not "lxvd2x" } } */ +/* { dg-final { scan-assembler-not "lxvw4x" } } */ +/* { dg-final { scan-assembler-not "lvx" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxvw4x" } } */ +/* { dg-final { scan-assembler-not "stvx" } } */ + +/* Insure caller save on long double does not use VSX instructions. */ + +extern long double modify (long double); + +void +sum (long double *ptr, long double value, unsigned long n) +{ + unsigned long i; + + for (i = 0; i < n; i++) + ptr[i] += modify (value); +} diff --git a/gcc-4.8/gcc/testsuite/gcc.target/sh/pr57108.c b/gcc-4.8/gcc/testsuite/gcc.target/sh/pr57108.c new file mode 100644 index 000000000..3d39637b6 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gcc.target/sh/pr57108.c @@ -0,0 +1,19 @@ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1" } */ + +void __assert_func (void) __attribute__ ((__noreturn__)) ; + +void ATATransfer (int num, int buffer) +{ + int wordCount; + + while (num > 0) + { + wordCount = num * 512 / sizeof (int); + + ((0 == (buffer & 63)) ? (void)0 : __assert_func () ); + ((0 == (wordCount & 31)) ? (void)0 : __assert_func ()); + } + + + } diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_40.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_40.f90 index ca91d5eac..424f6f4fe 100644 --- a/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_40.f90 +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_40.f90 @@ -48,5 +48,5 @@ program main call baz(a,b,res); if (abs(res - 8.1) > 1e-5) call abort end program main -! { dg-final { scan-tree-dump-times "while" 3 "original" } } +! { dg-final { scan-tree-dump-times "while" 5 "original" } } ! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_44.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_44.f90 new file mode 100644 index 000000000..e0cffd168 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_44.f90 @@ -0,0 +1,12 @@ +! { dg-do run } +! { dg-options "-ffrontend-optimize" } +! PR 56872 - wrong front-end optimization with a single constructor. +! Original bug report by Rich Townsend. + integer :: k + real :: s + integer :: m + s = 2.0 + m = 4 + res = SUM([(s**(REAL(k-1)/REAL(m-1)),k=1,m)]) + if (abs(res - 5.84732246) > 1e-6) call abort + end diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_45.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_45.f90 new file mode 100644 index 000000000..fdf049c37 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_45.f90 @@ -0,0 +1,15 @@ +! { dg-do run } +! PR PR 56872 - wrong front-end optimization with a +! single array constructor and another value. +program main + real :: s + integer :: m + integer :: k + real :: res + + m = 2 + s = 1000. + + res = SUM([3.0,(s**(REAL(k-1)/REAL(m-1)),k=1,m),17.]) + if (abs(res - 1021.)>1e-4) call abort +end diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_46.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_46.f90 new file mode 100644 index 000000000..471c6a86f --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_46.f90 @@ -0,0 +1,15 @@ +! { dg-do run } +! { dg-options "-ffrontend-optimize -fdump-tree-original" } +! Test that nested array constructors are optimized. +program main + implicit none + integer, parameter :: dp=selected_real_kind(15) + real(kind=dp), dimension(2,2) :: a + real(kind=dp) thirteen + + data a /2._dp,3._dp,5._dp,7._dp/ + thirteen = 13._dp + if (abs (product([[11._dp, thirteen], a]) - 30030._dp) > 1e-8) call abort +end program main +! { dg-final { scan-tree-dump-times "while" 2 "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_47.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_47.f90 new file mode 100644 index 000000000..2ad85be34 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/array_constructor_47.f90 @@ -0,0 +1,24 @@ +! { dg-do run } +! { dg-options "-ffrontend-optimize -fdump-tree-original" } +! Test that reduction optimization doesn't break with a function expression +! in an array constructor. +program main + implicit none + integer, parameter :: dp=selected_real_kind(15) + real(kind=dp), dimension(2,2) :: a + real(kind=dp) thirteen + + data a /2._dp,3._dp,5._dp,7._dp/ + thirteen = 13._dp + if (abs (product([[sum([eleven_ones()]), thirteen], a]) - 30030._dp) > 1e-8) call abort + contains + function eleven_ones() + real(kind=dp) :: eleven_ones(11) + integer :: i + + eleven_ones = [ (1._dp, i=1,11) ] + end function eleven_ones +end program main +! { dg-final { scan-tree-dump-times "while" 4 "original" } } +! { dg-final { cleanup-tree-dump "original" } } + diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/do_1.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/do_1.f90 index 8ed0f7fb6..171275af3 100644 --- a/gcc-4.8/gcc/testsuite/gfortran.dg/do_1.f90 +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/do_1.f90 @@ -1,5 +1,4 @@ -! { dg-do run { xfail *-*-* } } -! XFAIL is tracked in PR 54932 +! { dg-do run } ! Program to check corner cases for DO statements. program do_1 implicit none diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/eof_5.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/eof_5.f90 new file mode 100644 index 000000000..88671ba23 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/eof_5.f90 @@ -0,0 +1,21 @@ +! { dg-do run } +! +! PR fortran/56696 +! +! Contributed by Keith Refson +! + +program iotest + character(len=258) :: inp = ' 1.0 1.0 1.0' + character(len=7) :: inp2 = '1 2 3 4' + integer :: ios + real :: a1, a2, a3, a4 + + read(inp2,*,iostat=ios) a1, a2, a3, a4 + if (ios /= 0) call abort () + + read(inp,*,iostat=ios) a1, a2, a3, a4 + if (ios == 0) call abort () +! write(*,*) 'IOSTAT=',ios +end program iotest + diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_cache_3.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_cache_3.f90 new file mode 100644 index 000000000..ec8e1b389 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/fmt_cache_3.f90 @@ -0,0 +1,80 @@ +! { dg-do run } +! +! PR fortran/56737 +! +! Contributed by Jonathan Hogg +! +module hsl_mc73_single + implicit none + integer, parameter, private :: wp = kind(0.0) +contains + subroutine mc73_fiedler(n,lirn,irn,ip,list) + integer, intent (in) :: n + integer, intent (in) :: lirn + integer, intent (in) :: irn(*) + integer, intent (in) :: ip(*) + integer, intent (out) :: list(*) + + integer :: icntl(10) + + call fiedler_graph(icntl) + end subroutine mc73_fiedler + + subroutine mc73_order + integer :: icntl(10) + + call fiedler_graph(icntl) + end subroutine mc73_order + + subroutine fiedler_graph(icntl) + integer, intent (in) :: icntl(10) + + real (kind = wp) :: tol + real (kind = wp) :: tol1 + real (kind = wp) :: rtol + + call multilevel_eig(tol,tol1,rtol,icntl) + end subroutine fiedler_graph + + subroutine multilevel_eig(tol,tol1,rtol,icntl) + real (kind = wp), intent (in) :: tol,tol1,rtol + integer, intent(in) :: icntl(10) + + call level_print(6,'end of level ',1) + end subroutine multilevel_eig + + subroutine level_print(mp,title1,level) + character (len = *), intent(in) :: title1 + integer, intent(in) :: mp,level + character(len=80) fmt + integer :: char_len1,char_len2 + + char_len1=len_trim(title1) + + write (fmt,"('(',i4,'(1H ),6h===== ,a',i4,',i4,6h =====)')") & + level*3, char_len1 +! print *, "fmt = ", fmt +! print *, "title1= ", title1 +! print *, "level = ", level + write (66,fmt) title1,level + end subroutine level_print +end module hsl_mc73_single + +program test + use hsl_mc73_single + implicit none + character(len=200) :: str(2) + integer, parameter :: wp = kind(0.0) + + integer :: n, lirn + integer :: irn(1), ip(1), list(1) + + str = "" + open (66, status='scratch') + call mc73_order + call mc73_fiedler(n,lirn,irn,ip,list) + rewind (66) + read (66, '(a)') str + close (66) + if (any (str /= " ===== end of level 1 =====")) call abort() +end program test diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_77.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_77.f90 new file mode 100644 index 000000000..5cbfe3aad --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_77.f90 @@ -0,0 +1,49 @@ +! { dg-do run } +! +! PR libfortran/51825 - Fortran runtime error: Cannot match namelist object name +! Test case derived from PR. + +module local_mod + + type mytype1 + integer :: int1 + end type + + type mytype2 + integer :: n_x + integer :: n_px + end type + + type beam_init_struct + character(16) :: chars(1) = '' + type (mytype1) dummy + type (mytype2) grid(1) + end type + +end module + +program error_namelist + + use local_mod + + implicit none + + type (beam_init_struct) beam_init + + namelist / error_params / beam_init + + open (10, status='scratch') + write (10, '(a)') "&error_params" + write (10, '(a)') " beam_init%chars(1)='JUNK'" + write (10, '(a)') " beam_init%grid(1)%n_x=3" + write (10, '(a)') " beam_init%grid(1)%n_px=2" + write (10, '(a)') "/" + rewind(10) + read(10, nml=error_params) + close (10) + + if (beam_init%chars(1) /= 'JUNK') call abort + if (beam_init%grid(1)%n_x /= 3) call abort + if (beam_init%grid(1)%n_px /= 2) call abort + +end program diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_78.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_78.f90 new file mode 100644 index 000000000..d4e29ab82 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_78.f90 @@ -0,0 +1,34 @@ +! { dg-do run } +! +! PR libfortran/51825 +! Test case regarding namelist problems with derived types + +program namelist + + type d1 + integer :: j = 0 + end type d1 + + type d2 + type(d1) k + end type d2 + + type d3 + type(d2) d(2) + end type d3 + + type(d3) der + namelist /nmlst/ der + + open (10, status='scratch') + write (10, '(a)') "&NMLST" + write (10, '(a)') " DER%D(1)%K%J = 1," + write (10, '(a)') " DER%D(2)%K%J = 2," + write (10, '(a)') "/" + rewind(10) + read(10, nml=nmlst) + close (10) + + if (der%d(1)%k%j /= 1) call abort + if (der%d(2)%k%j /= 2) call abort +end program namelist diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_79.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_79.f90 new file mode 100644 index 000000000..2b2ef310d --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_79.f90 @@ -0,0 +1,43 @@ +! { dg-do run } +! PR libfortran/52512 - Cannot match namelist object name +! Test case derived from PR. + +program testje + + implicit none + + integer :: getal, jn + type ptracer + character(len = 8) :: sname !: short name + logical :: lini !: read in a file or not + end type ptracer + type(ptracer) , dimension(3) :: tracer + namelist/namtoptrc/ getal,tracer + + ! standard values + getal = 9999 + do jn = 1, 3 + tracer(jn)%sname = 'default_name' + tracer(jn)%lini = .false. + end do + + open (10, status='scratch') + write (10, '(a)') "&namtoptrc" + write (10, '(a)') " getal = 7" + write (10, '(a)') " tracer(1) = 'DIC ', .true." + write (10, '(a)') " tracer(2) = 'Alkalini', .true." + write (10, '(a)') " tracer(3) = 'O2 ', .true." + write (10, '(a)') "/" + rewind(10) + read(10, nml=namtoptrc) + close (10) + + if (getal /= 7) call abort + if (tracer(1)%sname /= 'DIC ') call abort + if (tracer(2)%sname /= 'Alkalini') call abort + if (tracer(3)%sname /= 'O2 ') call abort + if (.not. tracer(1)%lini) call abort + if (.not. tracer(2)%lini) call abort + if (.not. tracer(3)%lini) call abort + +end program testje diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_80.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_80.f90 new file mode 100644 index 000000000..1961b11b1 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_80.f90 @@ -0,0 +1,27 @@ +! { dg-do run } +! +! PR fortran/56735 +! +! Contributed by Adam Williams +! + PROGRAM TEST + INTEGER int1,int2,int3 + NAMELIST /temp/ int1,int2,int3 + + int1 = -1; int2 = -2; int3 = -3 + + OPEN (53, STATUS='scratch') + WRITE (53, '(a)') ' ?' + WRITE (53, '(a)') + WRITE (53, '(a)') '$temp' + WRITE (53, '(a)') ' int1=1' + WRITE (53, '(a)') ' int2=2' + WRITE (53, '(a)') ' int3=3' + WRITE (53, '(a)') '$END' + REWIND(53) + + READ (53, temp) + CLOSE (53) + + if (int1 /= 1 .or. int2 /= 2 .or. int3 /= 3) call abort() + END PROGRAM diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_81.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_81.f90 new file mode 100644 index 000000000..ddb100bf8 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/namelist_81.f90 @@ -0,0 +1,43 @@ +! { dg-do run } +! PR56786 Error on embedded spaces +integer :: i(3) +namelist /nml/ i + +i = -42 +open(99,status='scratch') +write(99,'(a)') '&nml i(3 ) = 5 /' +rewind(99) +read(99,nml=nml) +close(99) +if (i(1)/=-42 .or. i(2)/=-42 .or. i(3)/=5) call abort() + +! Shorten the file so the read hits EOF + +open(99,status='scratch') +write(99,'(a)') '&nml i(3 ) = 5 ' +rewind(99) +read(99,nml=nml, end=30) +call abort() +! Shorten some more + 30 close(99) +open(99,status='scratch') +write(99,'(a)') '&nml i(3 ) =' +rewind(99) +read(99,nml=nml, end=40) +call abort() +! Shorten some more + 40 close(99) +open(99,status='scratch') +write(99,'(a)') '&nml i(3 )' +rewind(99) +read(99,nml=nml, end=50) +call abort() +! Shorten some more + 50 close(99) +open(99,status='scratch') +write(99,'(a)') '&nml i(3 ' +rewind(99) +read(99,nml=nml, end=60) +call abort() + 60 close(99) +end diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_41.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_41.f90 new file mode 100644 index 000000000..7f50abab2 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_41.f90 @@ -0,0 +1,37 @@ +! { dg-do compile } +! +! PR 56968: [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer +! +! Contributed by Samuel Debionne <samuel.debionne@ujf-grenoble.fr> + +module test + + interface generic_name_get_proc_ptr + module procedure specific_name_get_proc_ptr + end interface + + abstract interface + double precision function foo(arg1) + real, intent(in) :: arg1 + end function + end interface + +contains + + function specific_name_get_proc_ptr() result(res) + procedure(foo), pointer :: res + end function + +end module test + +program crash_test + use :: test + + procedure(foo), pointer :: ptr + + ptr => specific_name_get_proc_ptr() + ptr => generic_name_get_proc_ptr() + +end program + +! { dg-final { cleanup-modules "test" } } diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_42.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_42.f90 new file mode 100644 index 000000000..8556fdf0c --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/proc_ptr_42.f90 @@ -0,0 +1,36 @@ +! { dg-do compile } +! +! PR 56814: [4.8/4.9 Regression] Bogus Interface mismatch in dummy procedure +! +! Contributed by Marco Restelli <mrestelli@gmail.com> + +module m1 + abstract interface + pure function i_f(x) result(d) + real, intent(in) :: x(:,:) + real :: d(size(x,1),size(x,2)) + end function + end interface + + procedure(i_f), pointer :: f => null() +end module + +module m2 +contains + pure subroutine ns_dirdata(fun) + interface + pure function fun(x) result(d) + real, intent(in) :: x(:,:) + real :: d(size(x,1),size(x,2)) + end function + end interface + end subroutine +end module + +program p + use m1 + use m2 + call ns_dirdata(f) +end + +! { dg-final { cleanup-modules "m1 m2" } } diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/select_type_33.f03 b/gcc-4.8/gcc/testsuite/gfortran.dg/select_type_33.f03 new file mode 100644 index 000000000..3ba27e010 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/select_type_33.f03 @@ -0,0 +1,43 @@ +! { dg-do compile } +! +! PR fortran/56816 +! The unfinished SELECT TYPE statement below was leading to an ICE because +! at the time the statement was rejected, the compiler tried to free +! some symbols that had already been freed with the SELECT TYPE +! namespace. +! +! Original testcase from Dominique Pelletier <dominique.pelletier@polymtl.ca> +! +module any_list_module + implicit none + + private + public :: anylist, anyitem + + type anylist + end type + + type anyitem + class(*), allocatable :: value + end type +end module any_list_module + + +module my_item_list_module + + use any_list_module + implicit none + + type, extends (anyitem) :: myitem + end type myitem + +contains + + subroutine myprint (this) + class (myitem) :: this + + select type ( v => this % value ! { dg-error "parse error in SELECT TYPE" } + end select ! { dg-error "Expecting END SUBROUTINE" } + end subroutine myprint + +end module my_item_list_module diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/size_kind_2.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/size_kind_2.f90 new file mode 100644 index 000000000..002221c5b --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/size_kind_2.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/57142 +! +integer :: B(huge(1)+3_8,2_8) +integer(8) :: var1(2), var2, var3 + +var1 = shape(B,kind=8) +var2 = size(B,kind=8) +var3 = size(B,dim=1,kind=8) +end + +! { dg-final { scan-tree-dump "static integer.kind=8. A..\\\[2\\\] = \\\{2147483650, 2\\\};" "original" } } +! { dg-final { scan-tree-dump "var2 = 4294967300;" "original" } } +! { dg-final { scan-tree-dump "var3 = 2147483650;" "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/size_kind_3.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/size_kind_3.f90 new file mode 100644 index 000000000..ae57bd9a1 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/size_kind_3.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! +! PR fortran/57142 +! +integer :: B(huge(1)+3_8,2_8) +integer(8) :: var1(2), var2, var3 + +var1 = shape(B) ! { dg-error "SHAPE overflows its kind" } +var2 = size(B) ! { dg-error "SIZE overflows its kind" } +var3 = size(B,dim=1) ! { dg-error "SIZE overflows its kind" } +end diff --git a/gcc-4.8/gcc/testsuite/gfortran.dg/transfer_check_4.f90 b/gcc-4.8/gcc/testsuite/gfortran.dg/transfer_check_4.f90 new file mode 100644 index 000000000..030d34549 --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gfortran.dg/transfer_check_4.f90 @@ -0,0 +1,44 @@ +! { dg-do compile } +! { dg-options "-Wall" } + +! PR 57022: [4.7/4.8/4.9 Regression] Inappropriate warning for use of TRANSFER with arrays +! Contributed by William Clodius <wclodius@los-alamos.net> + +subroutine transfers (test) + + use, intrinsic :: iso_fortran_env + + integer, intent(in) :: test + + integer(int8) :: test8(8) = 0 + integer(int16) :: test16(4) = 0 + integer(int32) :: test32(2) = 0 + integer(int64) :: test64 = 0 + + select case(test) + case(0) + test64 = transfer(test8, test64) + case(1) + test64 = transfer(test16, test64) + case(2) + test64 = transfer(test32, test64) + case(3) + test8 = transfer(test64, test8, 8) + case(4) + test16 = transfer(test64, test16, 4) + case(5) + test32 = transfer(test64, test32, 2) + end select + +end subroutine + + +! PR 53685: surprising warns about transfer with explicit character range +! Contributed by Jos de Kloe <kloedej@knmi.nl> + +subroutine mytest(byte_array,val) + integer, parameter :: r8_ = Selected_Real_Kind(15,307) ! = real*8 + character(len=1), dimension(16), intent(in) :: byte_array + real(r8_),intent(out) :: val + val = transfer(byte_array(1:8),val) +end subroutine diff --git a/gcc-4.8/gcc/testsuite/gnat.dg/specs/array3.ads b/gcc-4.8/gcc/testsuite/gnat.dg/specs/array3.ads new file mode 100644 index 000000000..3ef39f38e --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gnat.dg/specs/array3.ads @@ -0,0 +1,18 @@ +-- PR middle-end/56474 +-- Reported by Pavel Zhukov <pavel@zhukoff.net> + +-- { dg-do compile } + +with Ada.Streams; + +package Array3 is + + use type Ada.Streams.Stream_Element_Offset; + + type Vector (Size : Ada.Streams.Stream_Element_Offset) is record + Value : Ada.Streams.Stream_Element_Array (0 .. Size); + end record; + + Empty_Vector : Vector (-1); + +end Array3; diff --git a/gcc-4.8/gcc/testsuite/gnat.dg/specs/last_bit.ads b/gcc-4.8/gcc/testsuite/gnat.dg/specs/last_bit.ads new file mode 100644 index 000000000..ecfc2540a --- /dev/null +++ b/gcc-4.8/gcc/testsuite/gnat.dg/specs/last_bit.ads @@ -0,0 +1,19 @@ +-- { dg-do compile } + +package Last_Bit is + + Max_Components : constant := 100; + type Count_Type is new Natural range 0 .. Max_Components; + subtype Index_Type is Count_Type range 1 .. Count_Type'Last; + + type List_Type is array (Index_Type range <>) of Integer; + + type Record_Type (Count : Count_Type := 0) is record + List : List_Type (1 .. Count); + end record; + + Null_Record : Record_Type (Count => 0); + + List_Last_Bit : Integer := Null_Record.List'Last_Bit; + +end Last_Bit; |