diff options
Diffstat (limited to 'gcc/testsuite')
443 files changed, 8732 insertions, 1413 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4f97f01350f..9c91245d613 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,1077 @@ +2010-06-30 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/nullptr04.C: Use __INTPTR_TYPE__. + * g++.dg/other/pr25632.C: Likewise. + +2010-07-01 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/40421 + * gfortran.fortran-torture/compile/pr40421.f90: New test. + +2010-07-01 Richard Guenther <rguenther@suse.de> + + PR middle-end/42834 + PR middle-end/44468 + * gcc.c-torture/execute/20100316-1.c: New testcase. + * gcc.c-torture/execute/pr44468.c: Likewise. + * gcc.c-torture/compile/20100609-1.c: Likewise. + * gcc.dg/volatile2.c: Adjust. + * gcc.dg/plugin/selfassign.c: Likewise. + * gcc.dg/pr36902.c: Likewise. + * gcc.dg/tree-ssa/foldaddr-2.c: Remove. + * gcc.dg/tree-ssa/foldaddr-3.c: Likewise. + * gcc.dg/tree-ssa/forwprop-8.c: Adjust. + * gcc.dg/tree-ssa/pr17141-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-13.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-14.c: Likewise. + * gcc.dg/tree-ssa/ssa-ccp-21.c: Likewise. + * gcc.dg/tree-ssa/pta-ptrarith-1.c: Likewise. + * gcc.dg/tree-ssa/20030807-7.c: Likewise. + * gcc.dg/tree-ssa/forwprop-10.c: Likewise. + * gcc.dg/tree-ssa/ssa-fre-1.c: Likewise. + * gcc.dg/tree-ssa/pta-ptrarith-2.c: Likewise. + * gcc.dg/tree-ssa/ssa-ccp-23.c: Likewise. + * gcc.dg/tree-ssa/forwprop-1.c: Likewise. + * gcc.dg/tree-ssa/forwprop-2.c: Likewise. + * gcc.dg/tree-ssa/struct-aliasing-1.c: Likewise. + * gcc.dg/tree-ssa/ssa-ccp-25.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-26.c: Likewise. + * gcc.dg/tree-ssa/struct-aliasing-2.c: Likewise. + * gcc.dg/tree-ssa/ssa-ccp-26.c: Likewise. + * gcc.dg/tree-ssa/ssa-sccvn-4.c: Likewise. + * gcc.dg/tree-ssa/ssa-pre-7.c: Likewise. + * gcc.dg/tree-ssa/forwprop-5.c: Likewise. + * gcc.dg/struct/w_prof_two_strs.c: XFAIL. + * gcc.dg/struct/wo_prof_escape_arg_to_local.c: Likewise. + * gcc.dg/struct/wo_prof_global_var.c: Likewise. + * gcc.dg/struct/wo_prof_malloc_size_var.c: Likewise. + * gcc.dg/struct/w_prof_local_array.c: Likewise. + * gcc.dg/struct/w_prof_single_str_global.c: Likewise. + * gcc.dg/struct/wo_prof_escape_str_init.c: Likewise. + * gcc.dg/struct/wo_prof_array_through_pointer.c: Likewise. + * gcc.dg/struct/w_prof_global_array.c: Likewise. + * gcc.dg/struct/wo_prof_array_field.c: Likewise. + * gcc.dg/struct/wo_prof_single_str_local.c: Likewise. + * gcc.dg/struct/w_prof_local_var.c: Likewise. + * gcc.dg/struct/wo_prof_two_strs.c: Likewise. + * gcc.dg/struct/wo_prof_empty_str.c: Likewise. + * gcc.dg/struct/wo_prof_local_array.c: Likewise. + * gcc.dg/struct/w_prof_global_var.c: Likewise. + * gcc.dg/struct/wo_prof_single_str_global.c: Likewise. + * gcc.dg/struct/wo_prof_escape_substr_value.c: Likewise. + * gcc.dg/struct/wo_prof_global_array.c: Likewise. + * gcc.dg/struct/wo_prof_escape_return.c: Likewise. + * gcc.dg/struct/wo_prof_escape_substr_array.c: Likewise. + * gcc.dg/struct/wo_prof_double_malloc.c: Likewise. + * gcc.dg/struct/w_ratio_cold_str.c: Likewise. + * gcc.dg/struct/wo_prof_escape_substr_pointer.c: Likewise. + * gcc.dg/struct/wo_prof_local_var.c: Likewise. + * gcc.dg/tree-prof/stringop-1.c: Adjust. + * g++.dg/tree-ssa/pr31146.C: Likewise. + * g++.dg/tree-ssa/copyprop-1.C: Likewise. + * g++.dg/tree-ssa/pr33604.C: Likewise. + * g++.dg/plugin/selfassign.c: Likewise. + * gfortran.dg/array_memcpy_3.f90: Likewise. + * gfortran.dg/array_memcpy_4.f90: Likewise. + * c-c++-common/torture/pr42834.c: New testcase. + +2010-06-30 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/44628 + * g++.dg/template/crash100.C: New. + +2010-06-30 Jan Hubicka <jh@suse.cz> + + * gcc.dg/tree-ssa/ipa-split-4.c: New testcase. + +2010-06-30 Michael Matz <matz@suse.de> + + PR bootstrap/44699 + * gcc.dg/pr44699.c: New test. + +2010-06-30 Bernd Schmidt <bernds@codesourcery.com> + + PR tree-optimization/39799 + * c-c++-common/uninit-17.c: New test. + +2010-06-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/43298 + * gfortran.dg/read_infnan_1.f90: New test. + +2010-06-29 Jason Merrill <jason@redhat.com> + + Enable implicitly declared move constructor/operator= (N3053). + * g++.dg/cpp0x/implicit3.C: New. + * g++.dg/cpp0x/implicit4.C: New. + * g++.dg/cpp0x/implicit5.C: New. + * g++.dg/cpp0x/implicit-copy.C: Adjust. + * g++.dg/cpp0x/not_special.C: Adjust. + * g++.dg/cpp0x/rv-trivial-bug.C: Adjust. + * g++.dg/cpp0x/rv1n.C: Adjust. + * g++.dg/cpp0x/rv1p.C: Adjust. + * g++.dg/cpp0x/rv2n.C: Adjust. + * g++.dg/cpp0x/rv2p.C: Adjust. + * g++.dg/cpp0x/rv3n.C: Adjust. + * g++.dg/cpp0x/rv3p.C: Adjust. + * g++.dg/cpp0x/rv4n.C: Adjust. + * g++.dg/cpp0x/rv4p.C: Adjust. + * g++.dg/cpp0x/rv5n.C: Adjust. + * g++.dg/cpp0x/rv5p.C: Adjust. + * g++.dg/cpp0x/rv6n.C: Adjust. + * g++.dg/cpp0x/rv6p.C: Adjust. + * g++.dg/cpp0x/rv7n.C: Adjust. + * g++.dg/cpp0x/rv7p.C: Adjust. + * g++.dg/cpp0x/rv8p.C: Adjust. + * g++.dg/gomp/pr26690-1.C: Adjust. + * g++.dg/other/error20.C: Adjust. + * g++.dg/other/error31.C: Adjust. + * g++.dg/parse/error19.C: Adjust. + * g++.dg/template/qualttp5.C: Adjust. + * g++.old-deja/g++.law/ctors5.C: Adjust. + + Enable implicitly deleted functions (N2346) + * g++.dg/cpp0x/defaulted17.C: New. + * g++.dg/cpp0x/implicit1.C: New. + * g++.dg/cpp0x/implicit2.C: New. + * g++.dg/cpp0x/lambda/lambda-ctor-neg.C: Adjust. + * g++.dg/ext/has_virtual_destructor.C: Adjust. + * g++.dg/init/ctor4.C: Adjust. + * g++.dg/init/synth2.C: Adjust. + * g++.dg/lto/20081118_1.C: Adjust. + * g++.dg/other/error13.C: Adjust. + * g++.dg/other/unused1.C: Adjust. + * g++.old-deja/g++.bob/inherit2.C: Adjust. + * g++.old-deja/g++.bugs/900205_04.C: Adjust. + * g++.old-deja/g++.jason/opeq3.C: Adjust. + * g++.old-deja/g++.law/ctors17.C: Adjust. + * g++.old-deja/g++.oliva/delete1.C: Adjust. + * g++.old-deja/g++.pt/assign1.C: Adjust. + * g++.old-deja/g++.pt/crash20.C: Adjust. + + * g++.dg/cpp0x/defaulted10.C: Adjust for new deleted message. + * g++.dg/cpp0x/defaulted13.C: Adjust. + * g++.dg/cpp0x/defaulted2.C: Adjust. + * g++.dg/cpp0x/defaulted3.C: Adjust. + * g++.dg/cpp0x/initlist9.C: Adjust. + * g++.dg/cpp0x/lambda/lambda-errloc.C: Adjust. + * g++.dg/cpp0x/lambda/lambda-errloc2.C: Adjust. + * g++.dg/init/synth2.C: Adjust. + + * g++.dg/cpp0x/defaulted19.C: New. + + * g++.dg/expr/string-1.C: Fix for -std=c++0x. + * g++.dg/template/error23.C: Fix for -std=c++0x. + +2010-06-29 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44718 + * gfortran.dg/proc_ptr_28.f90: New. + +2010-06-29 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/43801 + * g++.dg/torture/pr43801.C: New test. + + PR debug/44668 + * g++.dg/debug/dwarf2/accessibility1.C: New test. + +2010-06-29 Jason Merrill <jason@redhat.com> + + PR c++/44587 + * g++.dg/template/qualified-id2.C: New. + * g++.dg/template/qualified-id3.C: New. + +2010-06-29 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44696 + * gfortran.dg/associated_target_4.f90: New. + +2010-06-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/44582 + * gfortran.dg/aliasing_array_result_1.f90 : New test. + +2010-06-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * lib/lto.exp (lto_prune_warns): Also accept leading single quote. + +2010-06-29 Jan Hubicka <jh@suse.cz> + + * gcc.dg/tree-ssa/ipa-split-3.c: New testcase. + +2010-06-29 Bernd Schmidt <bernds@codesourcery.com> + + PR target/43902 + * gcc.target/arm/wmul-1.c: Test for smlabb instead of smulbb. + * gcc.target/arm/wmul-3.c: New test. + * gcc.target/arm/wmul-4.c: New test. + +2010-06-29 H.J. Lu <hongjiu.lu@intel.com> + + PR rtl-optimization/44659 + * gcc.target/i386/extract-1.c: New. + * gcc.target/i386/extract-2.c: Likewise. + * gcc.target/i386/extract-3.c: Likewise. + * gcc.target/i386/extract-4.c: Likewise. + * gcc.target/i386/extract-5.c: Likewise. + * gcc.target/i386/extract-6.c: Likewise. + +2010-06-28 Jakub Jelinek <jakub@redhat.com> + + PR c++/44682 + * g++.dg/warn/Wunused-var-14.C: New test. + +2010-06-28 Tobias Burnus <burnus@net-b.de> + + PR fortran/43298 + * gfortran.dg/nan_6.f90: New. + +2010-06-28 H.J. Lu <hongjiu.lu@intel.com> + + PR tree-optimization/43781 + * gcc.dg/torture/pr43781.c: New. + +2010-06-28 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/40158 + * gfortran.dg/actual_rank_check_1.f90: New test. + +2010-06-28 Martin Jambor <mjambor@suse.cz> + + * testsuite/gcc.dg/ipa/ipa-sra-6.c: New test. + +2010-06-28 Jan Hubicka <jh@suse.cz> + + PR tree-optimization/44687 + * gcc.c-torture/compile/pr44687.c + +2010-06-28 Martin Jambor <mjambor@suse.cz> + + PR c++/44535 + * g++.dg/torture/pr44535.C: New test. + +2010-06-28 Michael Matz <matz@suse.de> + + PR middle-end/44592 + * gfortran.dg/pr44592.f90: New test. + +2010-06-28 Jan Hubicka <jh@suse.cz> + + PR tree-optimization/44357 + * g++.dg/torture/pr44357.C: New testcase. + +2010-06-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/tree-ssa/ltrans-1.c: Add -march=i486 for i?86-*-* && ilp32. + * gcc.dg/tree-ssa/ltrans-3.c: Likewise. + * gcc.dg/tree-ssa/ltrans-4.c: Likewise. + * gcc.dg/tree-ssa/ltrans-5.c: Likewise. + * gcc.dg/tree-ssa/ltrans-6.c: Likewise. + * gcc.dg/tree-ssa/ltrans-8.c: Likewise. + * gcc.dg/tree-ssa/vrp47.c: Add -march=i586 for i?86-*-* && ilp32. + * gfortran.dg/ltrans-7.f90: Add -march=i486 for i?86-*-* && ilp32. + +2010-06-27 Jan Hubicka <jh@suse.cz> + + * gcc.c-torture/compile/pr44686.c: New file. + +2010-06-27 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44683 + * gcc.c-torture/execute/pr44683.c: New testcase. + +2010-06-27 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/noreturn3.ad[sb]: New test. + +2010-06-26 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/explicit5.C: New. + +2010-06-26 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/44393 + * gcc.dg/pr44393.c: New testcase. + +2010-06-26 Jan Hubicka <jh@suse.cz> + + * gcc.dg/tree-ssa/ipa-split-2.c: New testcase. + +2010-06-26 Richard Guenther <rguenther@suse.de> + + PR middle-end/44674 + * gcc.dg/pr44674.c: New testcase. + +2010-06-26 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/opts-3.c: New test. + +2010-06-26 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/type_decl_1.f90: New. + * gfortran.dg/type_decl_2.f90: New. + +2010-06-26 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/semicolon_fixed.f: Fix dg syntax.. + * gfortran.dg/semicolon_fixed_2.f: Ditto. + +2010-06-25 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR testsuite/38946 + * gfortran.dg/array_constructor_23.f: Update test to allow for small + error in comparing reals. + +2010-06-25 Tobias Burnus <burnus@net-b.de> + + * selected_real_kind_2.f90: New. + * selected_real_kind_3.f90: New. + +2010-06-25 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/entry_19.f90: New. + +2010-06-25 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/end_subroutine_1.f90: New. + * gfortran.dg/end_subroutine_2.f90: New. + * gfortran.dg/interface_proc_end.f90: Update. + +2010-06-25 Tobias Burnus <burnus@net-b.de> + + * gfortran.dg/semicolon_fixed.f: Update. + * gfortran.dg/semicolon_fixed_2.f: New. + * gfortran.dg/semicolon_free_2.f90: New. + * gfortran.dg/semicolon_free.f90: Update. + +2010-06-25 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/44448 + * gfortran.dg/atan2_1.f90: Add -ffloat-store. + +2010-06-25 Martin Jambor <mjambor@suse.cz> + + * g++.dg/ipa/iinline-3.C: New test. + * gcc.dg/ipa/modif-1.c: Removed. + +2010-06-25 Jan Hubicka <jh@suse.cz> + + * testsuite/gcc.dg/tree-ssa/ipa-split-1.c + +2010-06-25 Martin Jambor <mjambor@suse.cz> + + * g++.dg/ipa/iinline-2.C: New test. + +2010-06-25 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/43866 + * gfortran.dg/pr43866.f90: New test. + + PR tree-optimization/44539 + * gcc.dg/pr44539.c: New test. + +2010-06-25 Bernd Schmidt <bernds@codesourcery.com> + + From Jim Wilson: + PR target/43902 + * gcc.target/mips/madd-9.c: New test. + +2010-06-25 Shujing Zhao <pearly.zhao@oracle.com> + + PR c/44517 + * gcc.dg/noncompile/pr44517.c: New. + * gcc.dg/noncompile/990416-1.c: Adjust expected error. + +2010-06-24 Steve Ellcey <sje@cup.hp.com> + + PR testsuite/43283 + * gcc.dg/lto/20091216-1_0.c: Use newline instead of semicolon + and add argument to nop for IA64. + +2010-06-24 H.J. Lu <hongjiu.lu@intel.com> + + PR target/44588 + * gcc.target/i386/mod-1.c: New. + * gcc.target/i386/umod-1.c: Likewise. + * gcc.target/i386/umod-2.c: Likewise. + * gcc.target/i386/umod-3.c: Likewise. + +2010-06-24 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/44492 + * g++.dg/torture/pr44492.C: New test. + +2010-06-24 Andi Kleen <ak@linux.intel.com> + + * c-c++-common/warn-omitted-condop.c: New. + +2010-06-24 Tobias Burnus <burnus@net-b.de> + + PR fortran/44614 + * gfortran.dg/import8.f90: New. + +2010-06-23 Arnaud Charlet <charlet@adacore.com> + + * gnat.dg/not_null.adb: Update test case. + +2010-06-22 Jakub Jelinek <jakub@redhat.com> + + PR c++/44619 + * g++.dg/warn/Wunused-var-13.C: New test. + + PR c++/44627 + * g++.dg/diagnostic/method1.C: New test. + +2010-06-22 Cary Coutant <ccoutant@google.com> + + * g++.dg/debug/dwarf2/dwarf4-typedef.C: New test. + +2010-06-22 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44616 + * gfortran.dg/abstract_type_8.f03: New. + +2010-06-21 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/noexcept08.C: New. + + * g++.dg/ext/unary_trait_incomplete.C: Adjust. + +2010-06-21 H.J. Lu <hongjiu.lu@intel.com> + + PR target/44615 + * gcc.target/i386/sse2-vec-2a.c: New. + +2010-06-21 DJ Delorie <dj@redhat.com> + + * gcc.dg/pragma-diag-1.c: New. + +2010-06-21 H.J. Lu <hongjiu.lu@intel.com> + + PR target/44615 + * gcc.target/i386/amd64-abi-3.c: Add -mtune=k8. + +2010-06-21 Alan Modra <amodra@gmail.com> + + PR testsuite/44505 + * gcc.c-torture/execute/frame-address.c (check_fa): Avoid + tail call to check_fa_mid. + +2010-06-21 Jakub Jelinek <jakub@redhat.com> + + PR target/44575 + * gcc.c-torture/execute/pr44575.c: New test. + +2010-06-21 Tobias Burnus <burnus@net-b.de> + + PR fortran/40632 + * gfortran.dg/contiguous_1.f90: New. + * gfortran.dg/contiguous_2.f90: New. + * gfortran.dg/contiguous_3.f90: New. + +2010-06-21 Kai Tietz <kai.tietz@onevision.com> + + * gcc.target/x86_64/abi/callabi/leaf-1.c: New. + * gcc.target/x86_64/abi/callabi/leaf-2.c: New. + +2010-06-20 Uros Bizjak <ubizjak@gmail.com> + + PR target/44546 + * gcc.target/i386/pr44546.c: New test. + +2010-06-20 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/opts-2.c: New test. + +2010-06-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44584 + * gfortran.dg/typebound_proc_15.f03: Modified. + +2010-06-19 Richard Earnshaw <rearnsha@arm.com> + + PR target/44072 + * gcc.target/arm/thumb2-cmpneg2add-1.c: New test. + * gcc.target/arm/thumb2-cmpneg2add-2.c: New test. + +2010-06-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + * g++.dg/ext/label13.C: Fix typo in last change. + +2010-06-18 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/44477 + * gfortran.dg/eof_3.f90 + * gfortran.dg/endfile_2.f90 + * gfortran.dg/endfile_4.f90 + * gfortran.dg/endfile_3.f90 + +2010-06-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR c++/41090 + * g++.dg/ext/label13.C: xfail on 32-bit hppa*-*-hpux*. + +2010-06-18 Tobias Burnus <burnus@net-b.de> + + PR fortran/44556 + * gfortran.dg/allocate_alloc_opt_11.f90: New. + +2010-06-18 Bernd Schmidt <bernds@codesourcery.com> + + * gcc.target/arm/pr40900.c: New test. + +2010-06-18 Arnaud Charlet <charlet@adacore.com> + + * gnat.dg/class_wide2.adb: Remove bogus message, no longer generated. + +2010-06-17 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44558 + * gfortran.dg/typebound_call_15.f03: New. + +2010-06-17 Manuel López-Ibáñez <manu@gcc.gnu.org> + + PR c++/44486 + * g++.dg/pr44486.C: New. + +2010-06-16 DJ Delorie <dj@redhat.com> + + * gcc.target/i386/volatile-bitfields-1.c: New. + * gcc.target/i386/volatile-bitfields-2.c: New. + +2010-06-16 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/noexcept03.C: Test -Wnoexcept. + + * g++.dg/cpp0x/noexcept01.C: Test defaulted fns. + +2010-06-16 Richard Guenther <rguenther@suse.de> + + PR c/44555 + * gcc.c-torture/execute/pr44555.c: New testcase. + +2010-06-16 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44549 + * gfortran.dg/typebound_proc_16.f03: New. + +2010-06-16 Martin Jambor <mjambor@suse.cz> + + * g++.dg/torture/pr43905.C: New test. + +2010-06-16 Mikael Pettersson <mikpe@it.uu.se> + + PR testsuite/44538 + * gcc.dg/vect/slp-perm-5.c (main): Prevent + initialization loop from being vectorized. + * gcc.dg/vect/slp-perm-6.c (main): Likewise. + +2010-06-16 Alan Modra <amodra@gmail.com> + + PR tree-optimization/44507 + * gcc.dg/vect/pr44507.c (seeIf256ByteArrayIsConstant): Correct cast. + +2010-06-15 Jason Merrill <jason@redhat.com> + + * g++.dg/overload/arg3.C: Adjust error locations. + * g++.dg/overload/copy1.C: Likewise. + * g++.dg/tc1/dr152.C: Likewise. + * g++.dg/template/incomplete4.C: Likewise. + * g++.dg/template/incomplete5.C: Likewise. + * g++.old-deja/g++.bob/inherit2.C: Likewise. + * g++.old-deja/g++.pt/auto_ptr.C: Likewise. + * g++.old-deja/g++.pt/crash9.C: Likewise. + + * g++.dg/inherit/virtual5.C: New. + + * g++.dg/cpp0x/defaulted18.C: New. + + * g++.dg/cpp0x/initlist40.C: New. + + * g++.dg/cpp0x/initlist39.C: New. + +2010-06-15 Sebastian Pop <sebastian.pop@amd.com> + + PR middle-end/44391 + * gcc.dg/graphite/pr44391.c: New. + +2010-06-15 Janus Weil <janus@gcc.gnu.org> + + PR fortran/43388 + * gfortran.dg/allocate_alloc_opt_8.f90: New. + * gfortran.dg/allocate_alloc_opt_9.f90: New. + * gfortran.dg/allocate_alloc_opt_10.f90: New. + * gfortran.dg/class_allocate_2.f03: Modified an error message. + +2010-06-15 Richard Guenther <rguenther@suse.de> + + * gcc.dg/tree-ssa/ssa-sccvn-4.c: Adjust. + +2010-06-15 Richard Guenther <rguenther@suse.de> + + * gcc.dg/vect/bb-slp-21.c: Adjust. + * gcc.dg/vect/bb-slp-13.c: Likewise + * gcc.dg/vect/bb-slp-4.c: Likewise + * gcc.dg/vect/bb-slp-22.c: Likewise + * gcc.dg/vect/bb-slp-14.c: Likewise + * gcc.dg/vect/bb-slp-23.c: Likewise + * gcc.dg/vect/bb-slp-15.c: Likewise + * gcc.dg/vect/bb-slp-17.c: Likewise + * gcc.dg/vect/bb-slp-18.c: Likewise + * gcc.dg/vect/bb-slp-19.c: Likewise + * gcc.dg/vect/bb-slp-10.c: Likewise + * gcc.dg/vect/bb-slp-11.c: Likewise + * gcc.dg/vect/bb-slp-20.c: Likewise + * gcc.dg/vect/bb-slp-3.c: Likewise + +2010-06-15 Jakub Jelinek <jakub@redhat.com> + + PR fortran/44536 + * gfortran.dg/gomp/pr44536.f90: New test. + * gfortran.dg/gomp/sharing-3.f90: Remove xfail. + +2010-06-14 H.J. Lu <hongjiu.lu@intel.com> + + PR target/44534 + * gcc.target/i386/avx-vextractf128-256-3.c: New. + * gcc.target/i386/avx-vextractf128-256-4.c: Likewise. + +2010-06-14 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/44508 + * gcc.dg/tree-ssa/pr21086.c: Adjust. + + PR bootstrap/44509 + * gcc.dg/pr44509.c: New test. + +2010-06-14 Ira Rosen <irar@il.ibm.com> + + PR tree-optimization/44507 + * gcc.dg/vect/pr44507.c: New test. + +2010-06-13 H.J. Lu <hongjiu.lu@intel.com> + + * g++.dg/plugin/header_plugin.c: Add "c-family/" to c-common.h + and c-pretty-print.h. + + * g++.dg/plugin/pragma_plugin.c: Add "c-family/" to c-pragma.h. + +2010-06-13 Daniel Franke <franke.daniel@gmail.com> + + * gfortran.dg/whole_file_18.f90: Updated error message. + +2010-06-12 Daniel Franke <franke.daniel@gmail.com> + + * gfortran.dg/whole_file_20.f03: New. + +2010-06-12 Jan Hubicka <jh@suse.cz> + + * gcc.c-torture/compile/pc44485.c: New testcase. + +2010-06-12 Janus Weil <janus@gcc.gnu.org> + + PR fortran/40117 + * gfortran.dg/typebound_proc_4.f03: Modified error message. + * gfortran.dg/typebound_proc_14.f03: New. + * gfortran.dg/typebound_proc_15.f03: New. + +2010-06-11 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/opts-1.c: New test. + +2010-06-11 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/funroll-loops-all.c: Update expected error. + +2010-06-11 Uros Bizjak <ubizjak@gmail.com> + + PR target/44481 + * gcc.target/i386/pr44481.c: New test. + +2010-06-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/pr42461.c: Compile at -O2 instead of -O. + +2010-06-11 Sebastian Pop <sebastian.pop@amd.com> + + PR middle-end/44483 + * gcc.dg/tree-ssa/pr44483.c: New. + +2010-06-11 Paul Brook <paul@codesourcery.com> + + * g++.dg/other/arm-neon-1.C: New test. + +2010-06-11 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/42051 + PR fortran/43896 + * gfortran.dg/class_23.f03: New test. + +2010-06-11 Jan Hubicka <jh@suse.cz> + + * gcc.dg/ipa/pure-const-2.c: New testcase. + +2010-06-11 Jan Hubicka <jh@suse.cz> + + * gcc.dg/noreturn-7.c: Update. + * gcc.dg/noreturn-4.c: Update. + +2010-06-10 Dodji Seketeli <dodji@redhat.com> + + Fix MIPS bootstrap + * g++.dg/other/typedef4.C: New test. + +2010-06-10 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44207 + * gfortran.dg/allocate_alloc_opt_7.f90: New test. + +2010-06-10 Daniel Franke <franke.daniel@gmail.com> + + PR fortran/44457 + * gfortran.dg/asynchronous_3.f03 + +2010-06-10 Changpeng Fang <changpeng.fang@amd.com> + + PR middle-end/44185 + * gcc.dg/tree-ssa/prefetch-7.c: take the loops that will generate + non-temporal stores out of the tests to form new test cases. As a + result, no non-temporal store should be generated in this case. + + * gcc.dg/tree-ssa/prefetch-8.c: New. Test from original + prefetch-7.c that generate one non-temporal store. + + * gcc.dg/tree-ssa/prefetch-9.c: New. Test from original + prefetch-7.c that generate one non-temporal store and one + one-temporal prefetch. + +2010-06-10 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/44258 + * gcc.dg/tree-ssa/pr44258.c: New test. + +2010-06-10 Daniel Kraft <d@domob.eu> + + PR fortran/38936 + * gfortran.dg/associate_1.f03: New test. + * gfortran.dg/associate_2.f95: New test. + * gfortran.dg/associate_3.f03: New test. + * gfortran.dg/associate_4.f08: New test. + +2010-06-10 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + * gfortran.dg/selected_char_kind_4.f90: New test. + +2010-06-09 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/pr42461.c: New test. + +2010-06-09 Daniel Franke <franke.daniel@gmail.com> + + PR fortran/44347 + * gfortran.dg/selected_real_kind_1.f90: New. + +2010-06-09 Daniel Franke <franke.daniel@gmail.com> + + PR fortran/44359 + * gfortran.dg/warn_conversion.f90: Removed check for redundant + warning. + * gfortran.dg/warn_conversion_2.f90: Use non-constant expression to + check for warning. + +2010-06-09 Steven G. Kargl <kargl@gcc.gnu.org> + + * gfortran.dg/data_namelist_conflict.f90: New test. + +2010-06-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * g++.old-deja/g++.oliva/dwarf2.C: Don't xfail on i386-pc-solaris*. + * g++.old-deja/g++.oliva/dwarf3.C: Likewise. + * g++.old-deja/g++.other/init19.C: Don't xfail on *-*-solaris2*. + +2010-06-09 Steven G. Kargl <kargl@gcc.gnu.org> + + * testsuite/gfortran.dg/mvbits_9.f90: New test. + * testsuite/gfortran.dg/ibset_1.f90: Ditto. + * testsuite/gfortran.dg/ibits_1.f90: Ditto. + * testsuite/gfortran.dg/btest_1.f90: Ditto. + * testsuite/gfortran.dg/ibclr_1.f90: Ditto. + +2010-06-09 Jason Merrill <jason@redhat.com> + + PR c++/44366 + * g++.dg/cpp0x/decltype23.C: Move to... + * g++.dg/diagnostic/parm1.C: ...here, and remove decltype. + +2010-06-09 Janus Weil <janus@gcc.gnu.org> + + PR fortran/44211 + * gfortran.dg/typebound_call_14.f03: New test. + +2010-06-09 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/44423 + * gcc.dg/tree-ssa/pr44423.c: New test. + +2010-06-09 Joern Rennecke <amylaar@spamcop.net> + + PR testsuite/42843 + * gcc.dg/plugin/selfassign.c (pass_warn_self_assign): Use enumerator + TV_NONE to initialize tv_id field. + * g++.dg/plugin/selfassign.c (pass_warn_self_assign): Likewise. + * gcc.dg/plugin/one_time_plugin.c (one_pass): Likewise. + * g++.dg/plugin/dumb_plugin.c (pass_dumb_plugin_example): Likewise. + Include toplev.h . + * gcc.dg/plugin/finish_unit_plugin.c: Include cgraph.h. + * g++.dg/plugin/attribute_plugin.c: Include toplev.h and plugin.h . + * g++.dg/plugin/pragma_plugin.c: Include toplev.h . + +2010-06-08 Sandra Loosemore <sandra@codesourcery.com> + + PR tree-optimization/39874 + PR middle-end/28685 + * gcc.dg/pr39874.c: New file. + +2010-06-08 Nathan Sidwell <nathan@codesourcery.com> + + * g++.dg/ext/attr-alias-1.C: New. + * g++.dg/ext/attr-alias-2.C: New. + +2010-06-07 Tobias Burnus <burnus@net-b.de> + + PR fortran/44446 + * gfortran.dg/proc_ptr_27.f90: New. + +2010-06-07 Jason Merrill <jason@redhat.com> + + PR c++/44366 + * g++.dg/cpp0x/decltype23.C: New. + +2010-06-08 Andrew Pinski <pinskia@gmail.com> + Shujing Zhao <pearly.zhao@oracle.com> + + PR c/37724 + * gcc.dg/c90-const-expr-10.c: Adjust. + * gcc.dg/c99-const-expr-10.c: Adjust. + * gcc.dg/init-bad-7.c: New. + +2010-06-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * lib/target-supports.exp (check_effective_target_gas): New proc. + * gcc.c-torture/execute/960321-1.x: New file. + +2010-06-07 Jason Merrill <jason@redhat.com> + + PR c++/44401 + * g++.dg/tc1/dr147.C: Test case of member with same name as class. + +2010-06-07 Jakub Jelinek <jakub@redhat.com> + + PR c++/44444 + * g++.dg/warn/Wunused-var-12.C: New test. + + PR c++/44443 + * c-c++-common/Wunused-var-11.c: New test. + +2010-06-07 Jan Hubicka <jh@suse.cz> + + * gcc.dg/ipa/pure-const-1.c: New testcase. + +2010-06-07 Kazu Hirata <kazu@codesourcery.com> + + PR rtl-optimization/44404 + * gcc.dg/pr44404.c: New. + +2010-06-07 Kai Tietz <kai.tietz@onevision.com> + + PR target/44159 + * gcc.target/i386/abi-2.c: Check sysv abi here. + * gcc.target/i386/aes-avx-check.h: Call test in noinline + function to avoid failures by different ABIs. + * gcc.target/i386/aes-check.h: Likewise. + * gcc.target/i386/avx-check.h: Likewise. + * gcc.target/i386/fma4-check.h: Likewise. + * gcc.target/i386/mmx-3dnow-check.h: Likewise. + * gcc.target/i386/mmx-check.h: Likewise. + * gcc.target/i386/pclmul-avx-check.h: Likewise. + * gcc.target/i386/pclmul-check.h: Likewise. + * gcc.target/i386/sse-check.h: Likewise. + * gcc.target/i386/sse2-check.h: Likewise. + * gcc.target/i386/sse3-check.h: Likewise. + * gcc.target/i386/sse4_1-check.h: Likewise. + * gcc.target/i386/sse4_2-check.h: Likewise. + * gcc.target/i386/sse4a-check.h: Likewise. + * gcc.target/i386/ssse3-check.h: Likewise. + * gcc.target/i386/xop-check.h: Likewise. + * gcc.target/i386/pr27971.c: Fix for LLP64. + * gcc.target/i386/pr39139.c: Likewise. + * gcc.target/i386/pr39315-check.c: Likewise. + * gcc.target/i386/vararg-1.c: Likewise. + * gcc.target/i386/vararg-2.c: Likewise. + Additional add dg-compile to avoid failure due + missing foo symbol. + + * gcc.dg/compound-literal-1.c: Fix for llp64. + * gcc.dg/pr32370.c: Likewise. + * gcc.dg/pr37561.c: Likewise. + * gcc.dg/pr41340.c: Likewise. + * gcc.dg/pr41551.c: Likewise. + +2010-05-25 Dodji Seketeli <dodji@redhat.com> + + PR c++/44188 + * g++.dg/debug/dwarf2/typedef3.C: New test. + +2010-06-06 Manuel López-Ibáñez <manu@gcc.gnu.org> + + PR c/20000 + * c-c++-common/pr20000.c: New. + +2010-06-05 Fabien Chêne <fabien@gcc.gnu.org> + + PR c++/44086 + * g++.dg/init/pr44086.C: New. + * g++.dg/cpp0x/decltype4.C: Adjust. + +2010-06-05 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/43945 + * gfortran.dg/generic_23.f03: New test. + +2010-06-05 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/43895 + * gfortran.dg/alloc_comp_class_1.f90 : New test. + +2010-06-05 Jakub Jelinek <jakub@redhat.com> + + PR c++/44361 + * c-c++-common/Wunused-var-9.c: New test. + +2010-06-05 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/noexcept06.C: Call set_unexpected. + +2010-06-05 Joseph Myers <joseph@codesourcery.com> + + PR c/44322 + * gcc.dg/c99-restrict-4.c: New test. + +2010-06-04 Magnus Fromreide <magfr@lysator.liu.se> + + * g++.dg/cpp0x/nullptr01.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr02.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr03.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr04.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr05.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr06.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr07.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr08.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr09.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr10.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr11.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr12.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr13.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr14.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr15.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr16.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr17.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr18.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr19.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr20.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr21.C: Test nullptr_t variable. + * g++.dg/cpp0x/nullptr22.C: Test nullptr_t variable. + +2010-06-04 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/noexcept06.C: New. + * g++.dg/cpp0x/noexcept07.C: New. + + * g++.dg/cpp0x/noexcept01.C: New. + * g++.dg/cpp0x/noexcept02.C: New. + * g++.dg/cpp0x/noexcept03.C: New. + * g++.dg/cpp0x/noexcept04.C: New. + * g++.dg/cpp0x/noexcept05.C: New. + +2010-06-04 Jakub Jelinek <jakub@redhat.com> + + PR c++/44412 + * g++.dg/warn/Wunused-var-10.C: New test. + * g++.dg/warn/Wunused-var-11.C: New test. + + PR c++/44362 + * c-c++-common/Wunused-var-10.c: New test. + +2010-06-04 Manuel López-Ibáñez <manu@gcc.gnu.org> + + PR c/25880 + * gcc.dg/assign-warn-2.c: Update. + * gcc.dg/cpp/line3.c: Update. + * gcc.dg/c99-array-lval-8.c: Update. + * gcc.dg/cast-qual-2.c: Update. + * gcc.dg/c99-arraydecl-3.c: Update. + * gcc.dg/assign-warn-1.c: Update. + * gcc.dg/format/gcc_diag-1.c: Update. + +2010-06-04 Bernd Schmidt <bernds@codesourcery.com> + + PR rtl-optimization/39871 + PR rtl-optimization/40615 + PR rtl-optimization/42500 + PR rtl-optimization/42502 + * gcc.target/arm/eliminate.c: New test. + +2010-06-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/44410 + * g++.old-deja/g++.jason/new.C: Qualify size_t with std::. + * g++.old-deja/g++.other/delete3.C: Likewise. + * g++.old-deja/g++.other/new.C: Likewise. + * g++.old-deja/g++.law/operators27.C: Likewise. + * g++.old-deja/g++.mike/p755.C: Likewise. + * g++.dg/eh/new1.C: Likewise. + * g++.dg/init/new5.C: Likewise. + +2010-06-03 Thomas Koenig <tkoenig@gcc.gnu.org> + + * gfortran.dg/unpack_bounds_1.f90: Remove execute property. + * gfortran.dg/unpack_bounds_2.f90: Likewise. + * gfortran.dg/unpack_bounds_3.f90: Likewise. + +2010-06-03 Richard Guenther <rguenther@suse.de> + + PR lto/41921 + * lib/lto.exp: Always load gcc.exp. + (lto-obj): For C source files invoke gcc_target_compile. + * g++.dg/lto/20100603-1_0.C: New testcase. + * g++.dg/lto/20100603-1_1.c: Likewise. + +2010-06-03 H.J. Lu <hongjiu.lu@intel.com> + + PR tree-optimization/43688 + * gfortran.dg/pr43688.f90: New. + +2010-06-03 Richard Guenther <rguenther@suse.de> + + PR lto/41584 + * gcc.dg/lto/20100603-1_0.c: New testcase. + * gcc.dg/lto/20100603-2_0.c: Likewise. + * gcc.dg/lto/20100603-3_0.c: Likewise. + +2010-06-02 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/44218 + * gcc.target/powerpc/recip-1.c: New test for -mrecip support. + * gcc.target/powerpc/recip-2.c: Ditto. + * gcc.target/powerpc/recip-3.c: Ditto. + * gcc.target/powerpc/recip-4.c: Ditto. + * gcc.target/powerpc/recip-5.c: Ditto. + * gcc.target/powerpc/recip-6.c: Ditto. + * gcc.target/powerpc/recip-7.c: Ditto. + * gcc.target/powerpc/recip-test.h: Ditto. + * gcc.target/powerpc/recip-test2.h: Ditto. + 2010-06-02 H.J. Lu <hongjiu.lu@intel.com> * g++.dg/torture/pr44295.C (size_t): Use __SIZE_TYPE__. diff --git a/gcc/testsuite/c-c++-common/Wunused-var-10.c b/gcc/testsuite/c-c++-common/Wunused-var-10.c new file mode 100644 index 00000000000..16d5171d0bf --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wunused-var-10.c @@ -0,0 +1,68 @@ +/* PR c++/44362 */ +/* { dg-options "-Wunused" } */ +/* { dg-do compile } */ + +int +f1 (int u, int v) +{ + int a, b, c, d, e, f, g, h, i; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a : b; + h = 0 ? c : d; + i = 1 ? e : f; + return g + h + i; +} + +int +f2 (int u, int v) +{ + int a, b, c, d, e, f, g, h, i; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a + 1 : b; + h = 0 ? c + 1 : d; + i = 1 ? e + 1 : f; + return g + h + i; +} + +int +f3 (int u, int v) +{ + int a, b, c, d, e, f, g, h, i; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a : b + 1; + h = 0 ? c : d + 1; + i = 1 ? e : f + 1; + return g + h + i; +} + +int +f4 (int u, int v) +{ + int a, c, e, g, h, i; + long b, d, f; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a : b; + h = 0 ? c : d; + i = 1 ? e : f; + return g + h + i; +} diff --git a/gcc/testsuite/c-c++-common/Wunused-var-11.c b/gcc/testsuite/c-c++-common/Wunused-var-11.c new file mode 100644 index 00000000000..a59ef814938 --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wunused-var-11.c @@ -0,0 +1,12 @@ +/* PR c++/44443 */ +/* { dg-options "-Wunused" } */ +/* { dg-do compile } */ + +int i; + +void +f1 () +{ + const int * __attribute__((unused)) a = &i; + const int *b __attribute__((unused)) = &i; +} diff --git a/gcc/testsuite/c-c++-common/Wunused-var-9.c b/gcc/testsuite/c-c++-common/Wunused-var-9.c new file mode 100644 index 00000000000..b2cdc4510e1 --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wunused-var-9.c @@ -0,0 +1,80 @@ +/* { dg-options "-Wunused" } */ +/* { dg-do compile } */ + +int f1 (int *, int); +int f2 (int *); +int f3 (int *); + +int +f4 (int x) +{ + int a, n = 0; + int b; + for (a = f1 (&b, x); f2 (&b); (void) (a = f3 (&b))) + n++; + return n; +} + +void +f5 (int x) +{ + int a; + a = x; + (void) (a = x); +} + +void +f6 (int x) +{ + int a; /* { dg-warning "set but not used" } */ + a = x; +} + +void +f7 (int x) +{ + int a; + ({ a = x; }); +} + +int +f8 (int x) +{ + int a; + int b = ({ a = x; }); + return b; +} + +int v; + +void +f9 (int x) +{ + int a; + ({ v++, a = x; }); +} + +int +f10 (int x) +{ + int a; + int b = ({ v++, a = x; }); + return b; +} + +void +f11 (int x) +{ + int a; + a = x; + ({ v++, a; }); +} + +int +f12 (int x) +{ + int a; + a = x; + int b = ({ v++, a; }); + return b; +} diff --git a/gcc/testsuite/c-c++-common/pr20000.c b/gcc/testsuite/c-c++-common/pr20000.c new file mode 100644 index 00000000000..1fcd17877e8 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr20000.c @@ -0,0 +1,32 @@ +/* PR c/20000 We only want to warn if the function returns + explicitly. We do not care about the return type. */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +int g(void) __attribute__((noreturn)); +int g2(void) __attribute__((noreturn)); /* { dg-bogus ".noreturn. function returns non-void value" } */ +void h(void) __attribute__((noreturn)); + + +int g(void) { + return 1; /* { dg-warning "function declared 'noreturn' has a 'return' statement" } */ +} /* { dg-warning "'noreturn' function does return" } */ + +int g2(void) { + h(); +} + +typedef int ft(void); +volatile ft vg; +volatile ft vg2; + +int vg(void); +int vg2(void); /* { dg-bogus ".noreturn. function returns non-void value" } */ + +int vg(void) { + return 1; /* { dg-warning "function declared 'noreturn' has a 'return' statement" "" { target c } 27 } */ +} /* { dg-warning "'noreturn' function does return" "" { target c } 28 } */ + +int vg2(void) { + h(); +} diff --git a/gcc/testsuite/c-c++-common/torture/pr42834.c b/gcc/testsuite/c-c++-common/torture/pr42834.c new file mode 100644 index 00000000000..a1ba49e46d4 --- /dev/null +++ b/gcc/testsuite/c-c++-common/torture/pr42834.c @@ -0,0 +1,23 @@ +/* { dg-do run } */ + +void __attribute__((noinline,noclone)) +foo(int *p, float *q) { __asm__ volatile ("" : : : "memory"); } + +int main() +{ + if (sizeof (int) == sizeof (float)) + { + int i; + float f; + int *p; + /* Prevent i and f from being rewritten into SSA form. */ + foo (&i, &f); + i = 0; + f = 1.0; + p = (int *)&f; + __builtin_memcpy (&i, p, 4); + if (*(float *)&i != 1.0) + __builtin_abort (); + } + return 0; +} diff --git a/gcc/testsuite/c-c++-common/uninit-17.c b/gcc/testsuite/c-c++-common/uninit-17.c new file mode 100644 index 00000000000..b895ac7dcd9 --- /dev/null +++ b/gcc/testsuite/c-c++-common/uninit-17.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wuninitialized" } */ + +inline int foo(int x) +{ + return x; +} +static void bar(int a, int *ptr) +{ + do + { + int b; /* { dg-message "note: 'b' was declared here" } */ + if (b < 40) { + ptr[0] = b; /* { dg-warning "may be used uninitialized" } */ + } + b += 1; + ptr++; + } + while (--a != 0); +} +void foobar(int a, int *ptr) +{ + bar(foo(a), ptr); +} + diff --git a/gcc/testsuite/c-c++-common/warn-ommitted-condop.c b/gcc/testsuite/c-c++-common/warn-ommitted-condop.c new file mode 100644 index 00000000000..de92b8f2cdc --- /dev/null +++ b/gcc/testsuite/c-c++-common/warn-ommitted-condop.c @@ -0,0 +1,29 @@ +/* { dg-options "-Wparentheses" } */ + +extern void f2 (int); + +void bar (int x, int y, int z) +{ +#define T(op) f2 (x op y ? : 1) +#define T2(op) f2 (x op y ? 2 : 1) + + T(<); /* { dg-warning "omitted middle operand" } */ + T(>); /* { dg-warning "omitted middle operand" } */ + T(<=); /* { dg-warning "omitted middle operand" } */ + T(>=); /* { dg-warning "omitted middle operand" } */ + T(==); /* { dg-warning "omitted middle operand" } */ + T(!=); /* { dg-warning "omitted middle operand" } */ + T(||); /* { dg-warning "omitted middle operand" } */ + T(&&); /* { dg-warning "omitted middle operand" } */ + f2 (!x ? : 1); /* { dg-warning "omitted middle operand" } */ + T2(<); /* { dg-bogus "omitted middle operand" } */ + T2(>); /* { dg-bogus "omitted middle operand" } */ + T2(==); /* { dg-bogus "omitted middle operand" } */ + T2(||); /* { dg-bogus "omitted middle operand" } */ + T2(&&); /* { dg-bogus "omitted middle operand" } */ + T(+); /* { dg-bogus "omitted middle operand" } */ + T(-); /* { dg-bogus "omitted middle operand" } */ + T(*); /* { dg-bogus "omitted middle operand" } */ + T(/); /* { dg-bogus "omitted middle operand" } */ + T(^); /* { dg-bogus "omitted middle operand" } */ +} diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype4.C b/gcc/testsuite/g++.dg/cpp0x/decltype4.C index 23a34344e17..32fbc2b2ec2 100644 --- a/gcc/testsuite/g++.dg/cpp0x/decltype4.C +++ b/gcc/testsuite/g++.dg/cpp0x/decltype4.C @@ -62,6 +62,7 @@ void wibble() { } struct B { + B () : bit(), cbit() {} int bit : 2; const int cbit : 3; diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted10.C b/gcc/testsuite/g++.dg/cpp0x/defaulted10.C index d169e0c6007..64fa5f01930 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted10.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted10.C @@ -3,12 +3,12 @@ struct A { - template<typename T> void foo(T) = delete; // { dg-error "previously|deleted" } + template<typename T> void foo(T) = delete; // { dg-error "previously|declared" } }; template<typename T> void A::foo(T) {} // { dg-error "redefinition" } void bar() { - A().foo(0); // { dg-error "used" } + A().foo(0); // { dg-error "use" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted13.C b/gcc/testsuite/g++.dg/cpp0x/defaulted13.C index 87b8100ac77..8b23579217e 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted13.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted13.C @@ -7,22 +7,22 @@ struct NonCopyable { }; template<> -NonCopyable<int>::NonCopyable(NonCopyable<int> const&) = delete; // { dg-error "deleted" } +NonCopyable<int>::NonCopyable(NonCopyable<int> const&) = delete; // { dg-error "declared" } template<typename T> NonCopyable<T>::NonCopyable(NonCopyable<T> const&) = default; template<> -NonCopyable<double>::NonCopyable(NonCopyable<double> const&) = delete; // { dg-error "deleted" } +NonCopyable<double>::NonCopyable(NonCopyable<double> const&) = delete; // { dg-error "declared" } int main() { NonCopyable<double> nc_dbl; - NonCopyable<double> nc_dbl_cpy(nc_dbl); // { dg-error "used here" } + NonCopyable<double> nc_dbl_cpy(nc_dbl); // { dg-error "use" } NonCopyable<int> nc_int; - NonCopyable<int> nc_int_cpy(nc_int); // { dg-error "used here" } + NonCopyable<int> nc_int_cpy(nc_int); // { dg-error "use" } NonCopyable<char> nc_char; NonCopyable<char> nc_char_cpy(nc_char); diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted17.C b/gcc/testsuite/g++.dg/cpp0x/defaulted17.C new file mode 100644 index 00000000000..79e91a0eb61 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted17.C @@ -0,0 +1,12 @@ +// { dg-options -std=c++0x } + +struct A // { dg-error "const|operator=" } +{ + const int i; +}; + +int main() +{ + A a = { 0 }; + a = a; // { dg-error "deleted" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted18.C b/gcc/testsuite/g++.dg/cpp0x/defaulted18.C new file mode 100644 index 00000000000..ae055e3bc63 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted18.C @@ -0,0 +1,9 @@ +// { dg-options "-std=c++0x" } + +void f(char i, int j) = delete; // { dg-message "<deleted>" } +void f(int i, ...); // { dg-message "void f" } + +int main() +{ + f(1,1); // { dg-error "ambiguous" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted19.C b/gcc/testsuite/g++.dg/cpp0x/defaulted19.C new file mode 100644 index 00000000000..ea33df39838 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted19.C @@ -0,0 +1,21 @@ +// We allocate a cookie to help us run the destructor even if it's deleted. +// { dg-options -std=c++0x } +// { dg-do run } + +struct A +{ + ~A() = delete; +}; + +void *p = 0; +void *operator new[](__SIZE_TYPE__ t) +{ + p = ::operator new (t); + return p; +} + +int main() +{ + A* ap = new A[5]; + return ap == p; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C index ad3274a2ea9..909ebc5e6e0 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C @@ -41,7 +41,7 @@ struct E struct F { F() = default; - F(const F&) = delete; // { dg-error "deleted" } + F(const F&) = delete; // { dg-error "declared" } }; struct G @@ -60,7 +60,7 @@ union U int main() { F f; - F f2(f); // { dg-error "used" } + F f2(f); // { dg-error "use" } B* b = new const B; // { dg-error "uninitialized const" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted3.C b/gcc/testsuite/g++.dg/cpp0x/defaulted3.C index efde415936d..5e2116b53b3 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted3.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted3.C @@ -4,7 +4,7 @@ template<class T> struct A { template<class U> - bool operator==(const A<U>&) = delete; // { dg-error "deleted function" } + bool operator==(const A<U>&) = delete; // { dg-error "declared" } operator bool () { return true; } }; @@ -12,5 +12,5 @@ int main() { A<int> a1; A<void> a2; - if(a1 == a2) {} // { dg-error "used here" } + if(a1 == a2) {} // { dg-error "use" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/explicit5.C b/gcc/testsuite/g++.dg/cpp0x/explicit5.C new file mode 100644 index 00000000000..88a47071db1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/explicit5.C @@ -0,0 +1,25 @@ +// test for extension of DR 899 to handle template ctors +// { dg-options "-std=c++0x" } +// { dg-do run } + +int r = 1; + +struct C { + C() { } + template <class T = int> C(C&, T = 0) { r = 0; } +}; + +C c; + +struct A +{ + explicit operator C&() const { return c; } +}; + +int main() +{ + A a; + C c2 (a); + + return r; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C b/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C index ea680a8961b..861fe201f10 100644 --- a/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C +++ b/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C @@ -3,13 +3,13 @@ struct S { S(); private: - S(S const &&); - S & operator=(S const &&); + S(S const &&); // { dg-error "" } + S & operator=(S const &&); // { dg-error "" } }; void f() { S a; - S b(a); - a = b; + S b(a); // { dg-error "" } + a = b; // { dg-error "" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit1.C b/gcc/testsuite/g++.dg/cpp0x/implicit1.C new file mode 100644 index 00000000000..2efbde6a93a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit1.C @@ -0,0 +1,26 @@ +// Test for implicitly deleted destructors. +// { dg-options "-std=c++0x" } +// { dg-prune-output "default definition would be ill-formed" } +// { dg-prune-output "within this context" } + +class C +{ + void operator delete (void *); // { dg-error "private" } +public: + virtual ~C(); // { dg-error "overriding" } +}; + +struct D: C { }; // { dg-error "deleted" } +D d; // { dg-error "deleted" } + +struct E +{ + ~E() = delete; // { dg-error "declared here" } +}; + +struct F +{ + virtual ~F(); // { dg-error "overriding" } +}; + +struct G: E, F { }; // { dg-error "deleted" } diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit2.C b/gcc/testsuite/g++.dg/cpp0x/implicit2.C new file mode 100644 index 00000000000..f24a78838fa --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit2.C @@ -0,0 +1,33 @@ +// Test that the synthesized C copy constructor calls the A template +// constructor and has the appropriate exception specification. +// { dg-options -std=c++0x } +// { dg-do run } + +int r = 1; + +struct A +{ + A() {} + A(const A&) throw () { } + template <class T> + A(T& t) { r = 0; } +}; + +struct B +{ + B() {} + B(B&) throw () { } +}; + +struct C: A, B { }; + +#define SA(E) static_assert(E, #E) + +C c; +SA (!noexcept(C(c))); + +int main() +{ + (C(c)); + return r; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit3.C b/gcc/testsuite/g++.dg/cpp0x/implicit3.C new file mode 100644 index 00000000000..a43eca708c0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit3.C @@ -0,0 +1,56 @@ +// Basic runtime test for implicit move constructor +// { dg-do run } +// { dg-options -std=c++0x } + +int m; + +struct A +{ + A() = default; + A(A&&) { ++m; } + A& operator=(A&&) { ++m; return *this; } +}; + +struct B +{ + B() = default; + B(const B&); + B(B&&) { ++m; } + B& operator=(const B&); + B& operator=(B&&) { ++m; return *this; } +}; + +struct C +{ + C() = default; + C(C&); + C(C&&) { ++m; } + C& operator=(C&); + C& operator=(C&&) { ++m; return *this; } +}; + +struct D: public A, public B +{ + C c; + int i; +}; + +struct E: public A, public B +{ + C c; + int i; + E() = default; + E(E&&) = default; + E& operator=(E&&) = default; +}; + +int main() +{ + D d1; + D d2 (static_cast<D&&>(d1)); + d1 = static_cast<D&&>(d2); + E e1; + E e2 (static_cast<E&&>(e1)); + e1 = static_cast<E&&>(e2); + return m != 12; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit4.C b/gcc/testsuite/g++.dg/cpp0x/implicit4.C new file mode 100644 index 00000000000..75606a3ce7e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit4.C @@ -0,0 +1,20 @@ +// Test that a base with only a move constructor causes the implicit copy +// constructor to be deleted. +// { dg-options "-std=c++0x" } + +struct A +{ + A(); // { dg-message "A::A" } + A(A&&); // { dg-message "A::A" } +}; + +struct B: A // { dg-error "implicit|no match" } +{ +}; + +int main() +{ + B b1; + B b2(b1); // { dg-error "deleted function .B::B.const" } + B b3(static_cast<B&&>(b1)); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit5.C b/gcc/testsuite/g++.dg/cpp0x/implicit5.C new file mode 100644 index 00000000000..f25c08530db --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/implicit5.C @@ -0,0 +1,19 @@ +// Test that the default B copy constructor calls the A member template +// constructor. +// { dg-options -std=c++0x } + +struct A +{ + A() = default; + A(A&&) = default; + template <class T> + A(const T& t) { t.i; } // { dg-error "no member" } +}; + +struct B: A { }; + +int main() +{ + B b; + B b2(b); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist15.C b/gcc/testsuite/g++.dg/cpp0x/initlist15.C index d59e5af640b..b75cc81729f 100644 --- a/gcc/testsuite/g++.dg/cpp0x/initlist15.C +++ b/gcc/testsuite/g++.dg/cpp0x/initlist15.C @@ -1,5 +1,8 @@ // { dg-options "-std=c++0x" } +// Just discard errors pointing at header files +// { dg-prune-output "include" } + #include <vector> #include <typeinfo> diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist19.C b/gcc/testsuite/g++.dg/cpp0x/initlist19.C index 418cddc618a..9cb197c9be2 100644 --- a/gcc/testsuite/g++.dg/cpp0x/initlist19.C +++ b/gcc/testsuite/g++.dg/cpp0x/initlist19.C @@ -1,8 +1,10 @@ // { dg-options "-std=c++0x" } +// Allow other errors, too +// { dg-prune-output "error" } + void f(double); int main() { f({{1}}); // { dg-error "too many braces" } - // { dg-error "" "" { target *-*-* } 6 } allow other errors, too } diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist39.C b/gcc/testsuite/g++.dg/cpp0x/initlist39.C new file mode 100644 index 00000000000..a6dd1ec43d1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist39.C @@ -0,0 +1,15 @@ +// { dg-options -std=c++0x } + +struct A { int i; }; + +void f (const A &); +void f (A &&); + +void g (A, int); +void g (A, double); + +int main() +{ + f ( { 1 } ); + g ( { 1 }, 1 ); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist40.C b/gcc/testsuite/g++.dg/cpp0x/initlist40.C new file mode 100644 index 00000000000..f2703602c9e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist40.C @@ -0,0 +1,12 @@ +// { dg-options "-std=c++0x" } + +struct A +{ + explicit A(int = 42); +}; + +int main() +{ + A a1 = { }; + A a2 = { 24 }; // { dg-error "explicit" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist9.C b/gcc/testsuite/g++.dg/cpp0x/initlist9.C index 2bc2d1782f9..d596b391508 100644 --- a/gcc/testsuite/g++.dg/cpp0x/initlist9.C +++ b/gcc/testsuite/g++.dg/cpp0x/initlist9.C @@ -8,7 +8,7 @@ struct b b() = default; ~b() = default; b& operator=(const b&) = delete; - b(const b&) = delete; // { dg-error "deleted" } + b(const b&) = delete; // { dg-error "declared" } b(bool _t): t (_t) { } }; @@ -19,7 +19,7 @@ int main() b tst1 = { false }; // copy initialization. - b tst2 = false; // { dg-error "used here" } + b tst2 = false; // { dg-error "use" } // direct list initialization b tst3 { false }; diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C index c38f2955d46..76ed7445f45 100644 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ctor-neg.C @@ -3,7 +3,7 @@ void f() { int i; - auto lam = [i]{}; // { dg-message "note" } + auto lam = [i]{}; // { dg-message "" } decltype(lam) lam2 = { 1 }; // { dg-error "" "not an aggregate" } decltype(lam) lam3; // { dg-error "" "deleted default ctor" } lam3 = lam; // { dg-error "" "deleted assignment op" } @@ -12,7 +12,7 @@ void f() template <class T> void g(T i) { - auto lam = [i]{}; // { dg-message "note" } + auto lam = [i]{}; // { dg-message "" } decltype(lam) lam2 = { 1 }; // { dg-error "" "not an aggregate" } decltype(lam) lam3; // { dg-error "" "deleted default ctor" } lam3 = lam; // { dg-error "" "deleted assignment op" } diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C index 4037331ee37..f4766691eec 100644 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc.C @@ -5,7 +5,7 @@ struct A { A(); - A(const A& a) = delete; // { dg-error "deleted" } + A(const A& a) = delete; // { dg-error "declared" } }; int main() diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C index 3d53c139fe6..dab53f1276e 100644 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-errloc2.C @@ -3,14 +3,14 @@ struct A { A(); - A(const A&) = delete; // { dg-error "deleted function" } + A(const A&) = delete; // { dg-error "declared" } }; template <class T> void f() { T t; - [t] { return 0; }; // { dg-error "used here" } + [t] { return 0; }; // { dg-error "use" } } int main() diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept01.C b/gcc/testsuite/g++.dg/cpp0x/noexcept01.C new file mode 100644 index 00000000000..f314684eae8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept01.C @@ -0,0 +1,83 @@ +// Test for noexcept-expression +// { dg-options "-std=c++0x -O2" } + +#include <typeinfo> + +#define SA(X) static_assert(X, #X) + +void f(); +void g() throw(); +SA(noexcept(g())); +SA(!noexcept(f())); +SA(!noexcept(throw 1)); +SA(noexcept(42)); + +struct A +{ + virtual ~A(); +}; + +struct B: public A +{ + virtual ~B(); +}; + +A* ap; + +struct C { }; +C* cp; + +SA (noexcept (dynamic_cast<B*>(ap))); +SA (!noexcept (dynamic_cast<B&>(*ap))); +SA (!noexcept (typeid (*ap))); +SA (noexcept (typeid (*cp))); + +SA (!noexcept (true ? 1 : throw 1)); +SA (!noexcept (true || true ? 1 : throw 1)); + +SA (noexcept (C())); + +struct D +{ + D() throw(); +}; + +SA (noexcept (D())); + +struct E +{ + E() throw(); + ~E(); +}; + +SA (!noexcept (E())); + +struct F +{ + virtual void f(); +}; + +SA (noexcept (F())); + +struct G +{ + G() = default; + ~G() = default; +}; + +SA (noexcept (G())); + +template <class T, bool b> +void tf() +{ + SA (noexcept (T()) == b); +} + +template void tf<int,true>(); +template void tf<E, false>(); + +// Make sure that noexcept uses the declared exception-specification, not +// any knowledge we might have about whether or not the function really +// throws. +void h() { } +SA(!noexcept(h())); diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept02.C b/gcc/testsuite/g++.dg/cpp0x/noexcept02.C new file mode 100644 index 00000000000..be6fa00dd09 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept02.C @@ -0,0 +1,52 @@ +// Test for noexcept-specification +// { dg-options "-std=c++0x" } + +#define SA(X) static_assert(X, #X) + +void f(); +void f() noexcept(false); +void f() noexcept(1 == 0); +void f(); + +SA(!noexcept(f())); + +void g() throw (int); +void g() noexcept(false); // { dg-error "previous declaration" } +void g(); // { dg-error "different exception" } + +void h() throw(); +void h() noexcept; +void h() throw(); +void h() noexcept; + +template <class T> +void g (T) noexcept(noexcept(T())); // { dg-error "previous declaration" } +template <class T> +void g (T) noexcept(noexcept(T(0))); // { dg-error "different exception" } + +template <class T> +void f (T) noexcept(noexcept(T()) && noexcept(T())); +template <class T> +void f (T) noexcept(noexcept(T()) && noexcept(T())); +template <class T> +void f2(T a) noexcept (noexcept (f (a))); + +struct A { A(); }; +SA(noexcept(f(1))); +SA(!noexcept(f(A()))); +SA(noexcept(f2(1))); +SA(!noexcept(f2(A()))); + +template <class... Ts> +void f3(Ts... ts) noexcept (noexcept (f(ts...))); + +SA(noexcept(f3(1))); +SA(!noexcept(f3(A()))); + +template <class T1, class T2> +void f (T1, T2) noexcept(noexcept(T1(), T2())); + +SA(noexcept(f3(1,1))); +SA(!noexcept(f3(1,A()))); +SA(!noexcept(f3(A(),1))); +SA(!noexcept(f3(A(),A()))); diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept03.C b/gcc/testsuite/g++.dg/cpp0x/noexcept03.C new file mode 100644 index 00000000000..c759f6fb21d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept03.C @@ -0,0 +1,68 @@ +// Runtime test for noexcept-specification. +// { dg-options "-std=c++0x -Wnoexcept" } +// { dg-do run } + +#include <exception> +#include <cstdlib> + +void my_terminate () +{ + std::exit (0); +} + +void my_unexpected () +{ + throw; +} + +void g() { throw 1; } +void (*p)() = g; +void f () noexcept (false) +{ + p(); +} + +template <class T> +void f(T) noexcept (noexcept (T())) // { dg-warning "false" } +{ + p(); +} + +template <class T> +void f2(T a) noexcept (noexcept (f (a))) +{ + f(a); +} + +struct A { A() { } }; // { dg-warning "does not throw" } + +// throw(int) overrides noexcept(false) in either order. +void h() throw (int, std::bad_exception); +void h() noexcept (false) +{ + throw 1.0; +} + +void i() noexcept (false); +void i() throw (int, std::bad_exception) +{ + throw 1.0; +} + +int main() +{ + // noexcept(false) allows throw. + try { f(); } catch (int) { } + // noexcept(noexcept(A())) == noexcept(false). + try { f(A()); } catch (int) { } + try { f2(A()); } catch (int) { } + + std::set_unexpected (my_unexpected); + try { h(); } catch (std::bad_exception) { } + try { i(); } catch (std::bad_exception) { } + + std::set_terminate (my_terminate); + // noexcept(noexcept(int())) == noexcept(true). + try { f2(1); } catch (...) { } + return 1; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept04.C b/gcc/testsuite/g++.dg/cpp0x/noexcept04.C new file mode 100644 index 00000000000..8df818610f5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept04.C @@ -0,0 +1,31 @@ +// Make sure that we call terminate when a noexcept spec is violated. +// The function pointers are there to make sure that +// the compiler doesn't get clever about optimizing the calls based on +// knowledge about the called functions. + +// { dg-options "-std=c++0x" } +// { dg-do run } + +#include <exception> +#include <cstdlib> + +void my_terminate () +{ + std::exit (0); +} + +void g() { throw 1; } +void (*p1)() = g; +void f() noexcept { p1(); } +void (*p2)() = f; +void h() { p2(); } + +int main() +{ + std::set_terminate (my_terminate); + + try { h(); } + catch (int) { } + + return 1; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept05.C b/gcc/testsuite/g++.dg/cpp0x/noexcept05.C new file mode 100644 index 00000000000..6acea432736 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept05.C @@ -0,0 +1,19 @@ +// Make sure that we force an LSDA for a noexcept spec so +// that the personality routine will call terminate. Also check that we +// optimize away the EH cleanup for var because the personality routine +// will call terminate before unwinding: there should not be an EH region +// (i.e. LEHB/LEHE labels) around the call to g(). + +// { dg-final { scan-assembler-not "_ZSt9terminatev" } } +// { dg-final { scan-assembler-not "EHB" } } +// { dg-final { scan-assembler "LSDA" } } + +// { dg-options "-std=c++0x" } + +struct A { ~A(); }; +void g(); +void f() noexcept +{ + A var; + g(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept06.C b/gcc/testsuite/g++.dg/cpp0x/noexcept06.C new file mode 100644 index 00000000000..3babdffdad5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept06.C @@ -0,0 +1,30 @@ +// Test that checking of a nothrow specification uses the one on the +// definition. +// { dg-options "-std=c++0x" } +// { dg-do run } + +#include <exception> +#include <cstdlib> + +void my_unexpected () +{ + std::abort (); +} +void my_terminate () +{ + std::exit (0); +} + +void f() throw(); +void f() noexcept +{ + throw 1; +} + +int main() +{ + std::set_unexpected (my_unexpected); + std::set_terminate (my_terminate); + f(); + return 1; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept07.C b/gcc/testsuite/g++.dg/cpp0x/noexcept07.C new file mode 100644 index 00000000000..0a5773fc86b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept07.C @@ -0,0 +1,25 @@ +// Test that checking of a nothrow specification uses the one on the +// definition. +// { dg-options "-std=c++0x" } +// { dg-do run } + +#include <exception> +#include <cstdlib> + +void my_unexpected () +{ + std::exit (0); +} + +void f() noexcept; +void f() throw() +{ + throw 1; +} + +int main() +{ + std::set_unexpected (my_unexpected); + f(); + return 1; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept08.C b/gcc/testsuite/g++.dg/cpp0x/noexcept08.C new file mode 100644 index 00000000000..c45033246eb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept08.C @@ -0,0 +1,56 @@ +// { dg-options "-std=c++0x" } +// { dg-prune-output "overriding" } + +struct A +{ + virtual void f(); + virtual void g() throw(); + virtual void h() noexcept; + virtual void i() noexcept(false); + virtual void j() throw(int); +}; + +struct B: A +{ + void f() noexcept; + void g() noexcept; + void h() noexcept; + void i() noexcept; + void j() noexcept; +}; + +struct C: A +{ + void f() throw(); + void g() throw(); + void h() throw(); + void i() throw(); + void j() throw(); +}; + +struct D: A +{ + void f() noexcept(false); + void g() noexcept(false); // { dg-error "looser" } + void h() noexcept(false); // { dg-error "looser" } + void i() noexcept(false); + void j() noexcept(false); // compatible; treated as throw(int) +}; + +struct E: A +{ + void f() throw(int); + void g() throw(int); // { dg-error "looser" } + void h() throw(int); // { dg-error "looser" } + void i() throw(int); + void j() throw(int); +}; + +struct F: A +{ + void f(); + void g(); // { dg-error "looser" } + void h(); // { dg-error "looser" } + void i(); + void j(); // { dg-error "looser" } +}; diff --git a/gcc/testsuite/g++.dg/cpp0x/not_special.C b/gcc/testsuite/g++.dg/cpp0x/not_special.C index f94b82a0c1a..6d73bd086ca 100644 --- a/gcc/testsuite/g++.dg/cpp0x/not_special.C +++ b/gcc/testsuite/g++.dg/cpp0x/not_special.C @@ -1,11 +1,9 @@ // I, Howard Hinnant, hereby place this code in the public domain. -// Test that move constructor and move assignement are not special. -// That is, their presence should not inhibit compiler generated -// copy ctor or assignment. Rather they should overload with the -// compiler generated special members. +// Test that move constructor and move assignement are special. +// That is, their presence should inhibit compiler generated +// copy ctor or assignment. -// { dg-do run } // { dg-options "-std=c++0x" } #include <assert.h> @@ -30,8 +28,8 @@ struct derived : base { derived() {} - derived(derived&&) {} - derived& operator=(derived&&) {return *this;} + derived(derived&&) {} // { dg-error "argument 1" } + derived& operator=(derived&&) {return *this;} // { dg-error "argument 1" } }; int test1() @@ -39,11 +37,11 @@ int test1() derived d; derived d2(static_cast<derived&&>(d)); // should not call base::(const base&) assert(copy == 0); - derived d3(d); // should call base::(const base&) + derived d3(d); // { dg-error "lvalue" } assert(copy == 1); d2 = static_cast<derived&&>(d); // should not call base::operator= assert(assign == 0); - d3 = d; // should call base::operator= + d3 = d; // { dg-error "lvalue" } assert(assign == 1); return 0; } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr01.C b/gcc/testsuite/g++.dg/cpp0x/nullptr01.C index 8de877bab50..de3860c9ea4 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr01.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr01.C @@ -6,3 +6,5 @@ char* const cp1 = nullptr; char* const cp2 = __null; char* const cp3 = 0; +decltype(nullptr) mynull = 0; +char* const cp4 = mynull; diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr02.C b/gcc/testsuite/g++.dg/cpp0x/nullptr02.C index 2272152cf73..80977cb2f00 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr02.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr02.C @@ -8,3 +8,9 @@ typedef decltype(nullptr) nullptr_t; const nullptr_t np1 = nullptr; const nullptr_t np2 = __null; const nullptr_t np3 = 0; +const nullptr_t np4 = np1; +const nullptr_t np5 = np2; +const nullptr_t np6 = np3; +const nullptr_t np7 = np4; +const nullptr_t np8 = np5; +const nullptr_t np9 = np6; diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr03.C b/gcc/testsuite/g++.dg/cpp0x/nullptr03.C index 1c9e521bd88..b6df8963740 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr03.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr03.C @@ -3,4 +3,7 @@ // Test assignment to int -const int n = nullptr; // { dg-error "cannot convert " } +const int n1 = nullptr; // { dg-error "cannot convert " } +decltype(nullptr) mynull = 0; +const int n2 = mynull; // { dg-error "cannot convert " } + diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C index 28e37156f8c..be581bcb6e3 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C @@ -3,11 +3,15 @@ // Test cast to int -#define unsigned -__extension__ typedef __SIZE_TYPE__ ssize_t; -#undef unsigned +__extension__ typedef __INTPTR_TYPE__ intptr_t; const int n4 = static_cast<const int>(nullptr); // { dg-error "invalid static_cast " } const short int n5 = reinterpret_cast<short int>(nullptr); // { dg-error "loses precision" } -const ssize_t n6 = reinterpret_cast<ssize_t>(nullptr); -const ssize_t n7 = (ssize_t)nullptr; +const intptr_t n6 = reinterpret_cast<intptr_t>(nullptr); +const intptr_t n7 = (intptr_t)nullptr; + +decltype(nullptr) mynull = 0; +const int n8 = static_cast<const int>(mynull); // { dg-error "invalid static_cast " } +const short int n9 = reinterpret_cast<short int>(mynull); // { dg-error "loses precision" } +const intptr_t n10 = reinterpret_cast<intptr_t>(mynull); +const intptr_t n11 = (intptr_t)mynull; diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr05.C b/gcc/testsuite/g++.dg/cpp0x/nullptr05.C index 7c3f8b7093d..22a8b51c1c7 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr05.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr05.C @@ -10,3 +10,5 @@ typedef void (F::*pmf)(); const pmf pmf1 = nullptr; const pmf pmf2 = __null; const pmf pmf3 = 0; +decltype(nullptr) mynull = 0; +const pmf pmf4 = mynull; diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr06.C b/gcc/testsuite/g++.dg/cpp0x/nullptr06.C index 5dea1fbf171..c50bb9bc113 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr06.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr06.C @@ -10,4 +10,6 @@ char* const cp1 = nullptr; void fun() { assert_true(cp1 == nullptr); + decltype(nullptr) mynull = 0; + assert_true(cp1 == mynull); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr07.C b/gcc/testsuite/g++.dg/cpp0x/nullptr07.C index cebed8862df..64d442be331 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr07.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr07.C @@ -9,4 +9,7 @@ void fun() if( n == nullptr ); // { dg-error "invalid operands of types " } const int m = 1; if( m == nullptr ); // { dg-error "invalid operands of types " } + decltype(nullptr) mynull = 0; + if( n == mynull ); // { dg-error "invalid operands of types " } + if( m == mynull ); // { dg-error "invalid operands of types " } } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr08.C b/gcc/testsuite/g++.dg/cpp0x/nullptr08.C index d7d9169f5a1..1e5db278ddf 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr08.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr08.C @@ -8,4 +8,6 @@ void fun() { assert_true(nullptr ? false : true); + decltype(nullptr) mynull = 0; + assert_true(mynull ? false : true); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr09.C b/gcc/testsuite/g++.dg/cpp0x/nullptr09.C index a42821cbfa6..b35a3c3207d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr09.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr09.C @@ -6,4 +6,6 @@ void fun() { if( nullptr == 0 ); + decltype(nullptr) mynull = 0; + if( mynull == 0 ); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr10.C b/gcc/testsuite/g++.dg/cpp0x/nullptr10.C index cd131864a33..fa32267ec02 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr10.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr10.C @@ -7,4 +7,8 @@ void fun() { nullptr = 0; // { dg-error "lvalue required as left operand" } nullptr + 2; // { dg-error "invalid operands of types " } + decltype(nullptr) mynull = 0; + mynull = 1; // { dg-error "cannot convert" } + mynull = 0; + mynull + 2; // { dg-error "invalid operands of types " } } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr11.C b/gcc/testsuite/g++.dg/cpp0x/nullptr11.C index 85402a1a2a3..5907816a847 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr11.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr11.C @@ -14,4 +14,27 @@ void fun() assert_false(nullptr > nullptr); assert_true(nullptr <= nullptr); assert_true(nullptr >= nullptr); + + decltype(nullptr) mynull = 0; + + assert_true(mynull == nullptr); + assert_false(mynull != nullptr); + assert_false(mynull < nullptr); + assert_false(mynull > nullptr); + assert_true(mynull <= nullptr); + assert_true(mynull >= nullptr); + + assert_true(nullptr == mynull); + assert_false(nullptr != mynull); + assert_false(nullptr < mynull); + assert_false(nullptr > mynull); + assert_true(nullptr <= mynull); + assert_true(nullptr >= mynull); + + assert_true(mynull == mynull); + assert_false(mynull != mynull); + assert_false(mynull < mynull); + assert_false(mynull > mynull); + assert_true(mynull <= mynull); + assert_true(mynull >= mynull); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr12.C b/gcc/testsuite/g++.dg/cpp0x/nullptr12.C index f68652c999e..1713259f103 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr12.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr12.C @@ -4,3 +4,5 @@ // Test sizeof static_assert(sizeof(nullptr) == sizeof(void*), "sizeof(nullptr) is wrong"); +const decltype(nullptr) mynull = 0; +static_assert(sizeof(mynull) == sizeof(void*), "sizeof(nullptr) is wrong"); diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr13.C b/gcc/testsuite/g++.dg/cpp0x/nullptr13.C index 633e971feca..a9377584c56 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr13.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr13.C @@ -5,7 +5,12 @@ #include <typeinfo> +#define assert_true(b) do { char c[2 * bool(b) - 1]; } while(0) + void fun() { typeid(nullptr); + const decltype(nullptr) mynull = 0; + typeid(mynull); + assert_true(typeid(nullptr) == typeid(mynull)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr14.C b/gcc/testsuite/g++.dg/cpp0x/nullptr14.C index 0493bcca006..4c4627b541b 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr14.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr14.C @@ -20,4 +20,6 @@ void test_f() // type_equal<char*>(f(nullptr)); type_equal<int>(f(0)); + decltype(nullptr) mynull = 0; + type_equal<char*>(f(mynull)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr15.C b/gcc/testsuite/g++.dg/cpp0x/nullptr15.C index abb45f4e937..67d9d4a2311 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr15.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr15.C @@ -18,4 +18,7 @@ void test_g() // g(nullptr); // { dg-error "no matching function for call to " } type_equal<float*>(g((float*)nullptr)); + decltype(nullptr) mynull = 0; + g(mynull); // { dg-error "no matching function for call to " } + type_equal<float*>(g((float*)mynull)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr16.C b/gcc/testsuite/g++.dg/cpp0x/nullptr16.C index 7561b21cfe3..0ec0b6a12b6 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr16.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr16.C @@ -19,4 +19,7 @@ void test_h() type_equal<int>(h(0)); type_equal<nullptr_t>(h(nullptr)); type_equal<float*>(h((float*)nullptr)); + nullptr_t mynull = 0; + type_equal<nullptr_t>(h(mynull)); + type_equal<float*>(h((float*)mynull)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr17.C b/gcc/testsuite/g++.dg/cpp0x/nullptr17.C index acedbae3787..2e580557bc3 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr17.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr17.C @@ -18,4 +18,6 @@ void test_i() { // Overload to bool, not int type_equal<bool>(i(nullptr)); + decltype(nullptr) mynull = 0; + type_equal<bool>(i(mynull)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr18.C b/gcc/testsuite/g++.dg/cpp0x/nullptr18.C index 192b646efb4..b8fa38c718d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr18.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr18.C @@ -16,4 +16,6 @@ bool j( bool ); void test_j() { type_equal<char*>(j(nullptr)); + decltype(nullptr) mynull = 0; + type_equal<char*>(j(mynull)); } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr20.C b/gcc/testsuite/g++.dg/cpp0x/nullptr20.C index a959b00786f..3e58406770d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr20.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr20.C @@ -10,8 +10,11 @@ int main() { char buf1[64]; char buf2[64]; + char buf3[64]; std::sprintf(buf1, "%p", (void*)0); std::sprintf(buf2, "%p", nullptr); - return std::strcmp(buf1, buf2) != 0; + decltype(nullptr) mynull = 0; + std::sprintf(buf3, "%p", nullptr); + return std::strcmp(buf1, buf2) != 0 || std::strcmp(buf1, buf3) != 0; } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr21.C b/gcc/testsuite/g++.dg/cpp0x/nullptr21.C index 84c34dd1e0a..c30cb3c8b6d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr21.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr21.C @@ -24,4 +24,21 @@ int main() } catch (...) { printf("Test 1 Fail"); } // { dg-output "Test 1 OK" } + + nullptr_t mynull = 0; + try { + throw mynull; + } catch (void*) { + printf("Test 2 Fail"); + } catch (bool) { + printf("Test 2 Fail"); + } catch (int) { + printf("Test 2 Fail"); + } catch (long int) { + printf("Test 2 Fail"); + } catch (nullptr_t) { + printf("Test 2 OK"); + } catch (...) { + printf("Test 2 Fail"); + } // { dg-output "Test 2 OK" } } diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr22.C b/gcc/testsuite/g++.dg/cpp0x/nullptr22.C index 13cb8e3aab1..d800f9869d2 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr22.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr22.C @@ -13,4 +13,8 @@ void f() f2(nullptr); // { dg-warning "null argument where non-null required " } f3("x", "y", __null); // { dg-warning "missing sentinel in function call" } f3("x", "y", nullptr); + decltype(nullptr) mynull = 0; + f1("%p", mynull); + f2(mynull); // { dg-warning "null argument where non-null required " } + f3("x", "y", mynull); } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C index beb8acb5a50..2765b5f3c30 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C @@ -1,4 +1,3 @@ -// { dg-do "run" } // { dg-options "-std=c++0x" } // PR c++/33235 #include <cassert> @@ -9,19 +8,19 @@ int move_assign = 0; struct base2 { base2() {} - base2(base2&&) {++move_construct;} - base2& operator=(base2&&) {++move_assign; return *this;} + base2(base2&&) {++move_construct;} // { dg-error "argument 1" } + base2& operator=(base2&&) {++move_assign; return *this;} // { dg-error "argument 1" } }; int test2() { base2 b; - base2 b2(b); + base2 b2(b); // { dg-error "lvalue" } assert(move_construct == 0); base2 b3(static_cast<base2&&>(b)); base2 b4 = static_cast<base2&&>(b); assert(move_construct == 2); - b = b2; + b = b2; // { dg-error "lvalue" } assert(move_assign == 0); b = static_cast<base2&&>(b2); assert(move_assign == 1); diff --git a/gcc/testsuite/g++.dg/cpp0x/rv1n.C b/gcc/testsuite/g++.dg/cpp0x/rv1n.C index b7b9b6e25ce..5224d3eb70e 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv1n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv1n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -35,9 +35,9 @@ one sink_1_1( A&); // { dg-error "" } int test1_1() { A a; - const A ca = a; + const A ca = a; // { dg-error "cannot bind" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "cannot bind" } sink_1_1(ca); // { dg-error "invalid initialization" } sink_1_1(va); // { dg-error "invalid initialization" } sink_1_1(cva); // { dg-error "invalid initialization" } @@ -53,9 +53,9 @@ two sink_1_2(const A&); // { dg-error "" } int test1_2() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_2(va); // { dg-error "invalid initialization" } sink_1_2(cva); // { dg-error "invalid initialization" } sink_1_2(v_source()); // { dg-error "invalid initialization" } @@ -68,9 +68,9 @@ three sink_1_3(volatile A&); // { dg-error "" } int test1_3() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_3(ca); // { dg-error "invalid initialization" } sink_1_3(cva); // { dg-error "invalid initialization" } sink_1_3(source()); // { dg-error "invalid initialization" } @@ -85,9 +85,9 @@ four sink_1_4(const volatile A&); // { dg-error "" } int test1_4() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_4(source()); // { dg-error "invalid initialization" } sink_1_4(c_source()); // { dg-error "invalid initialization" } sink_1_4(v_source()); // { dg-error "invalid initialization" } @@ -100,9 +100,9 @@ five sink_1_5( A&&); // { dg-error "" } int test1_5() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_5(a); // { dg-error "lvalue" } sink_1_5(ca); // { dg-error "invalid initialization" } sink_1_5(va); // { dg-error "invalid initialization" } @@ -118,9 +118,9 @@ six sink_1_6(const A&&); // { dg-error "" } int test1_6() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_6(a); // { dg-error "lvalue" } sink_1_6(ca); // { dg-error "lvalue" } sink_1_6(va); // { dg-error "invalid initialization" } @@ -135,9 +135,9 @@ seven sink_1_7(volatile A&&); // { dg-error "" } int test1_7() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_7(a); // { dg-error "lvalue" } sink_1_7(ca); // { dg-error "invalid initialization" } sink_1_7(va); // { dg-error "lvalue" } @@ -152,9 +152,9 @@ eight sink_1_8(const volatile A&&); // { dg-error "" } int test1_8() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_1_8(a); // { dg-error "lvalue" } sink_1_8(ca); // { dg-error "lvalue" } sink_1_8(va); // { dg-error "lvalue" } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv1p.C b/gcc/testsuite/g++.dg/cpp0x/rv1p.C index b2770ef33d5..4990165a465 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv1p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv1p.C @@ -35,9 +35,9 @@ one sink_1_1( A&); int test1_1() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_1(a)) == 1> t1; return 0; } @@ -47,9 +47,9 @@ two sink_1_2(const A&); int test1_2() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_2(a)) == 2> t1; sa<sizeof(sink_1_2(ca)) == 2> t2; sa<sizeof(sink_1_2(source())) == 2> t5; @@ -62,9 +62,9 @@ three sink_1_3(volatile A&); int test1_3() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_3(a)) == 3> t1; sa<sizeof(sink_1_3(va)) == 3> t3; return 0; @@ -75,9 +75,9 @@ four sink_1_4(const volatile A&); int test1_4() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_4(a)) == 4> t1; sa<sizeof(sink_1_4(ca)) == 4> t2; sa<sizeof(sink_1_4(va)) == 4> t3; @@ -90,9 +90,9 @@ five sink_1_5( A&&); int test1_5() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_5(source())) == 5> t5; return 0; } @@ -102,9 +102,9 @@ six sink_1_6(const A&&); int test1_6() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_6(source())) == 6> t5; sa<sizeof(sink_1_6(c_source())) == 6> t6; return 0; @@ -115,9 +115,9 @@ seven sink_1_7(volatile A&&); int test1_7() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_7(source())) == 7> t5; sa<sizeof(sink_1_7(v_source())) == 7> t7; return 0; @@ -128,9 +128,9 @@ eight sink_1_8(const volatile A&&); int test1_8() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_1_8(source())) == 8> t5; sa<sizeof(sink_1_8(c_source())) == 8> t6; sa<sizeof(sink_1_8(v_source())) == 8> t7; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv2n.C b/gcc/testsuite/g++.dg/cpp0x/rv2n.C index 5eee82c4bcf..a5c51778e34 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv2n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv2n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -36,9 +36,9 @@ two sink_2_12(const A&); // { dg-message "note|argument" } int test2_12() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_12(va); // { dg-error "no match" } sink_2_12(cva); // { dg-error "no match" } sink_2_12(v_source()); // { dg-error "no match" } @@ -52,9 +52,9 @@ three sink_2_13(volatile A&); // { dg-message "note|argument" } int test2_13() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_13(ca); // { dg-error "no match" } sink_2_13(cva); // { dg-error "no match" } sink_2_13(source()); // { dg-error "no match" } @@ -70,9 +70,9 @@ four sink_2_14(const volatile A&); // { dg-message "note|argument" } int test2_14() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_14(source()); // { dg-error "no match" } sink_2_14(c_source()); // { dg-error "no match" } sink_2_14(v_source()); // { dg-error "no match" } @@ -86,9 +86,9 @@ five sink_2_15( A&&); // { dg-message "note|argument" } int test2_15() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_15(ca); // { dg-error "no match" } sink_2_15(va); // { dg-error "no match" } sink_2_15(cva); // { dg-error "no match" } @@ -104,9 +104,9 @@ six sink_2_16(const A&&); // { dg-message "note|argument" } int test2_16() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_16(ca); // { dg-error "lvalue" } sink_2_16(va); // { dg-error "no match" } sink_2_16(cva); // { dg-error "no match" } @@ -121,9 +121,9 @@ seven sink_2_17(volatile A&&); // { dg-message "note|argument" } int test2_17() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_17(ca); // { dg-error "no match" } sink_2_17(va); // { dg-error "lvalue" } sink_2_17(cva); // { dg-error "no match" } @@ -138,9 +138,9 @@ eight sink_2_18(const volatile A&&); // { dg-error "argument" } int test2_18() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_18(ca); // { dg-error "lvalue" } sink_2_18(va); // { dg-error "lvalue" } sink_2_18(cva); // { dg-error "lvalue" } @@ -152,9 +152,9 @@ three sink_2_23(volatile A&); // { dg-message "note|argument" } int test2_23() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_23(a); // { dg-error "ambiguous" } sink_2_23(cva); // { dg-error "no match" } sink_2_23(v_source()); // { dg-error "no match" } @@ -168,9 +168,9 @@ four sink_2_24(const volatile A&); // { dg-message "note|argument" } int test2_24() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_24(v_source()); // { dg-error "no match" } sink_2_24(cv_source()); // { dg-error "no match" } return 0; @@ -182,9 +182,9 @@ four sink_2_34(const volatile A&); // { dg-message "note|argument" } int test2_34() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_34(source()); // { dg-error "no match" } sink_2_34(c_source()); // { dg-error "no match" } sink_2_34(v_source()); // { dg-error "no match" } @@ -198,9 +198,9 @@ five sink_2_25( A&&); // { dg-message "note|argument" } int test2_25() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_25(va); // { dg-error "no match" } sink_2_25(cva); // { dg-error "no match" } sink_2_25(v_source()); // { dg-error "no match" } @@ -214,9 +214,9 @@ six sink_2_26(const A&&); // { dg-message "note|argument" } int test2_26() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_26(va); // { dg-error "no match" } sink_2_26(cva); // { dg-error "no match" } sink_2_26(v_source()); // { dg-error "no match" } @@ -230,9 +230,9 @@ seven sink_2_27(volatile A&&); // { dg-message "note|argument" } int test2_27() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_27(va); // { dg-error "lvalue" } sink_2_27(cva); // { dg-error "no match" } sink_2_27(cv_source()); // { dg-error "no match" } @@ -245,9 +245,9 @@ eight sink_2_28(const volatile A&&); // { dg-error "argument" } int test2_28() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_28(va); // { dg-error "lvalue" } sink_2_28(cva); // { dg-error "lvalue" } } @@ -258,9 +258,9 @@ five sink_2_35( A&&); // { dg-message "note|argument" } int test2_35() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_35(ca); // { dg-error "no match" } sink_2_35(cva); // { dg-error "no match" } sink_2_35(c_source()); // { dg-error "no match" } @@ -275,9 +275,9 @@ six sink_2_36(const A&&); // { dg-message "note|argument" } int test2_36() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_36(ca); // { dg-error "lvalue" } sink_2_36(cva); // { dg-error "no match" } sink_2_36(v_source()); // { dg-error "no match" } @@ -291,9 +291,9 @@ seven sink_2_37(volatile A&&); // { dg-message "note|argument" } int test2_37() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_37(ca); // { dg-error "no match" } sink_2_37(cva); // { dg-error "no match" } sink_2_37(c_source()); // { dg-error "no match" } @@ -307,9 +307,9 @@ eight sink_2_38(const volatile A&&); // { dg-error "argument" } int test2_38() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_38(ca); // { dg-error "lvalue" } sink_2_38(cva); // { dg-error "lvalue" } } @@ -320,9 +320,9 @@ five sink_2_45( A&&); // { dg-message "note|argument" } int test2_45() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_45(c_source()); // { dg-error "no match" } sink_2_45(v_source()); // { dg-error "no match" } sink_2_45(cv_source()); // { dg-error "no match" } @@ -335,9 +335,9 @@ six sink_2_46(const A&&); // { dg-message "note|argument" } int test2_46() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_46(v_source()); // { dg-error "no match" } sink_2_46(cv_source()); // { dg-error "no match" } return 0; @@ -349,9 +349,9 @@ seven sink_2_47(volatile A&&); // { dg-message "note|argument" } int test2_47() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_47(c_source()); // { dg-error "no match" } sink_2_47(cv_source()); // { dg-error "no match" } return 0; @@ -363,9 +363,9 @@ six sink_2_56(const A&&); // { dg-message "note|argument" } int test2_56() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_56(a); // { dg-error "lvalue" } sink_2_56(ca); // { dg-error "lvalue" } sink_2_56(va); // { dg-error "no match" } @@ -381,9 +381,9 @@ seven sink_2_57(volatile A&&); // { dg-message "note|argument" } int test2_57() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_57(a); // { dg-error "lvalue" } sink_2_57(va); // { dg-error "lvalue" } sink_2_57(ca); // { dg-error "no match" } @@ -399,9 +399,9 @@ eight sink_2_58(const volatile A&&); // { dg-error "argument" } int test2_58() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_58(a); // { dg-error "lvalue" } sink_2_58(ca); // { dg-error "lvalue" } sink_2_58(va); // { dg-error "lvalue" } @@ -414,9 +414,9 @@ seven sink_2_67(volatile A&&); // { dg-message "note|argument" } int test2_67() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_67(a); // { dg-error "ambiguous" } sink_2_67(ca); // { dg-error "lvalue" } sink_2_67(va); // { dg-error "lvalue" } @@ -432,9 +432,9 @@ eight sink_2_68(const volatile A&&); // { dg-error "argument" } int test2_68() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_68(a); // { dg-error "lvalue" } sink_2_68(ca); // { dg-error "lvalue" } sink_2_68(va); // { dg-error "lvalue" } @@ -447,9 +447,9 @@ eight sink_2_78(const volatile A&&); // { dg-error "argument" } int test2_78() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_2_78(a); // { dg-error "lvalue" } sink_2_78(ca); // { dg-error "lvalue" } sink_2_78(va); // { dg-error "lvalue" } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv2p.C b/gcc/testsuite/g++.dg/cpp0x/rv2p.C index 61c4fb046b6..4ed9238a1a1 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv2p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv2p.C @@ -36,9 +36,9 @@ two sink_2_12(const A&); int test2_12() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_12(a)) == 1> t1; sa<sizeof(sink_2_12(ca)) == 2> t2; sa<sizeof(sink_2_12(source())) == 2> t5; @@ -52,9 +52,9 @@ three sink_2_13(volatile A&); int test2_13() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_13(a)) == 1> t1; sa<sizeof(sink_2_13(va)) == 3> t3; return 0; @@ -66,9 +66,9 @@ four sink_2_14(const volatile A&); int test2_14() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_14(a)) == 1> t1; sa<sizeof(sink_2_14(ca)) == 4> t2; sa<sizeof(sink_2_14(va)) == 4> t3; @@ -82,9 +82,9 @@ five sink_2_15( A&&); int test2_15() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_15(a)) == 1> t1; sa<sizeof(sink_2_15(source())) == 5> t5; return 0; @@ -96,9 +96,9 @@ six sink_2_16(const A&&); int test2_16() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_16(a)) == 1> t1; sa<sizeof(sink_2_16(source())) == 6> t5; sa<sizeof(sink_2_16(c_source())) == 6> t6; @@ -111,9 +111,9 @@ seven sink_2_17(volatile A&&); int test2_17() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_17(a)) == 1> t1; sa<sizeof(sink_2_17(source())) == 7> t5; sa<sizeof(sink_2_17(v_source())) == 7> t7; @@ -126,9 +126,9 @@ eight sink_2_18(const volatile A&&); int test2_18() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_18(a)) == 1> t1; sa<sizeof(sink_2_18(source())) == 8> t5; sa<sizeof(sink_2_18(c_source())) == 8> t6; @@ -143,9 +143,9 @@ three sink_2_23(volatile A&); int test2_23() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_23(ca)) == 2> t2; sa<sizeof(sink_2_23(va)) == 3> t3; sa<sizeof(sink_2_23(source())) == 2> t5; @@ -159,9 +159,9 @@ four sink_2_24(const volatile A&); int test2_24() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_24(a)) == 2> t1; sa<sizeof(sink_2_24(ca)) == 2> t2; sa<sizeof(sink_2_24(va)) == 4> t3; @@ -179,9 +179,9 @@ five sink_2_25( A&&); int test2_25() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_25(a)) == 2> t1; sa<sizeof(sink_2_25(ca)) == 2> t2; sa<sizeof(sink_2_25(source())) == 5> t5; @@ -195,9 +195,9 @@ six sink_2_26(const A&&); int test2_26() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_26(a)) == 2> t1; sa<sizeof(sink_2_26(ca)) == 2> t2; sa<sizeof(sink_2_26(source())) == 6> t5; @@ -211,9 +211,9 @@ seven sink_2_27(volatile A&&); int test2_27() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_27(a)) == 2> t1; sa<sizeof(sink_2_27(ca)) == 2> t2; sa<sizeof(sink_2_27(source())) == 7> t5; @@ -228,9 +228,9 @@ eight sink_2_28(const volatile A&&); int test2_28() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_28(a)) == 2> t1; sa<sizeof(sink_2_28(ca)) == 2> t2; sa<sizeof(sink_2_28(source())) == 8> t5; @@ -246,9 +246,9 @@ four sink_2_34(const volatile A&); int test2_34() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_34(a)) == 3> t1; sa<sizeof(sink_2_34(ca)) == 4> t2; sa<sizeof(sink_2_34(va)) == 3> t3; @@ -266,9 +266,9 @@ five sink_2_35( A&&); int test2_35() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_35(a)) == 3> t1; sa<sizeof(sink_2_35(va)) == 3> t3; sa<sizeof(sink_2_35(source())) == 5> t5; @@ -281,9 +281,9 @@ six sink_2_36(const A&&); int test2_36() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_36(a)) == 3> t1; sa<sizeof(sink_2_36(va)) == 3> t3; sa<sizeof(sink_2_36(source())) == 6> t5; @@ -297,9 +297,9 @@ seven sink_2_37(volatile A&&); int test2_37() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_37(a)) == 3> t1; sa<sizeof(sink_2_37(va)) == 3> t3; sa<sizeof(sink_2_37(source())) == 7> t5; @@ -313,9 +313,9 @@ eight sink_2_38(const volatile A&&); int test2_38() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_38(a)) == 3> t1; sa<sizeof(sink_2_38(va)) == 3> t3; sa<sizeof(sink_2_38(source())) == 8> t5; @@ -331,9 +331,9 @@ five sink_2_45( A&&); int test2_45() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_45(a)) == 4> t1; sa<sizeof(sink_2_45(ca)) == 4> t2; sa<sizeof(sink_2_45(va)) == 4> t3; @@ -351,9 +351,9 @@ six sink_2_46(const A&&); int test2_46() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_46(a)) == 4> t1; sa<sizeof(sink_2_46(ca)) == 4> t2; sa<sizeof(sink_2_46(va)) == 4> t3; @@ -371,9 +371,9 @@ seven sink_2_47(volatile A&&); int test2_47() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_47(a)) == 4> t1; sa<sizeof(sink_2_47(ca)) == 4> t2; sa<sizeof(sink_2_47(va)) == 4> t3; @@ -391,9 +391,9 @@ eight sink_2_48(const volatile A&&); int test2_48() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_48(a)) == 4> t1; sa<sizeof(sink_2_48(ca)) == 4> t2; sa<sizeof(sink_2_48(va)) == 4> t3; @@ -411,9 +411,9 @@ six sink_2_56(const A&&); int test2_56() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_56(source())) == 5> t5; sa<sizeof(sink_2_56(c_source())) == 6> t6; return 0; @@ -425,9 +425,9 @@ seven sink_2_57(volatile A&&); int test2_57() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_57(source())) == 5> t5; sa<sizeof(sink_2_57(v_source())) == 7> t7; return 0; @@ -439,9 +439,9 @@ eight sink_2_58(const volatile A&&); int test2_58() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_58(source())) == 5> t5; sa<sizeof(sink_2_58(c_source())) == 8> t6; sa<sizeof(sink_2_58(v_source())) == 8> t7; @@ -455,9 +455,9 @@ seven sink_2_67(volatile A&&); int test2_67() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_67(c_source())) == 6> t6; sa<sizeof(sink_2_67(v_source())) == 7> t7; return 0; @@ -469,9 +469,9 @@ eight sink_2_68(const volatile A&&); int test2_68() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_68(source())) == 6> t5; sa<sizeof(sink_2_68(c_source())) == 6> t6; sa<sizeof(sink_2_68(v_source())) == 8> t7; @@ -485,9 +485,9 @@ eight sink_2_78(const volatile A&&); int test2_78() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_2_78(source())) == 7> t5; sa<sizeof(sink_2_78(c_source())) == 8> t6; sa<sizeof(sink_2_78(v_source())) == 7> t7; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv3n.C b/gcc/testsuite/g++.dg/cpp0x/rv3n.C index 0c208ab6ed0..cacbdb395e7 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv3n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv3n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -37,9 +37,9 @@ three sink_3_123(volatile A&); // { dg-message "note" } int test3_123() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_123(cva); // { dg-error "no match" } sink_3_123(v_source()); // { dg-error "no match" } sink_3_123(cv_source()); // { dg-error "no match" } @@ -57,9 +57,9 @@ four sink_3_124(const volatile A&); // { dg-message "note" } int test3_124() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_124(v_source()); // { dg-error "no match" } sink_3_124(cv_source()); // { dg-error "no match" } return 0; @@ -68,9 +68,9 @@ int test3_124() int test3_125() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_125(va); // { dg-error "no match" } sink_3_125(cva); // { dg-error "no match" } sink_3_125(v_source()); // { dg-error "no match" } @@ -85,9 +85,9 @@ six sink_3_126(const A&&); // { dg-message "note" } int test3_126() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_126(va); // { dg-error "no match" } sink_3_126(cva); // { dg-error "no match" } sink_3_126(v_source()); // { dg-error "no match" } @@ -102,9 +102,9 @@ seven sink_3_127(volatile A&&); // { dg-message "" } int test3_127() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_127(va); // { dg-error "lvalue" } sink_3_127(cva); // { dg-error "no match" } sink_3_127(cv_source()); // { dg-error "no match" } @@ -118,9 +118,9 @@ eight sink_3_128(const volatile A&&); // { dg-message "" } int test3_128() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_128(va); // { dg-error "lvalue" } sink_3_128(cva); // { dg-error "lvalue" } @@ -133,9 +133,9 @@ four sink_3_134(const volatile A&); // { dg-message "note" } int test3_134() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_134(source()); // { dg-error "no match" } sink_3_134(c_source()); // { dg-error "no match" } sink_3_134(v_source()); // { dg-error "no match" } @@ -150,9 +150,9 @@ five sink_3_135( A&&); // { dg-message "note" } int test3_135() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_135(ca); // { dg-error "no match" } sink_3_135(cva); // { dg-error "no match" } sink_3_135(c_source()); // { dg-error "no match" } @@ -168,9 +168,9 @@ six sink_3_136(const A&&); // { dg-message "" } int test3_136() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_136(ca); // { dg-error "lvalue" } sink_3_136(cva); // { dg-error "no match" } sink_3_136(v_source()); // { dg-error "no match" } @@ -185,9 +185,9 @@ seven sink_3_137(volatile A&&); // { dg-message "note" } int test3_137() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_137(ca); // { dg-error "no match" } sink_3_137(cva); // { dg-error "no match" } sink_3_137(c_source()); // { dg-error "no match" } @@ -202,9 +202,9 @@ eight sink_3_138(const volatile A&&); // { dg-message "" } int test3_138() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_138(ca); // { dg-error "lvalue" } sink_3_138(cva); // { dg-error "lvalue" } return 0; @@ -217,9 +217,9 @@ five sink_3_145( A&&); // { dg-message "note" } int test3_145() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_145(c_source()); // { dg-error "no match" } sink_3_145(v_source()); // { dg-error "no match" } sink_3_145(cv_source()); // { dg-error "no match" } @@ -233,9 +233,9 @@ six sink_3_146(const A&&); // { dg-message "note" } int test3_146() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_146(v_source()); // { dg-error "no match" } sink_3_146(cv_source()); // { dg-error "no match" } return 0; @@ -248,9 +248,9 @@ seven sink_3_147(volatile A&&); // { dg-message "note" } int test3_147() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_147(c_source()); // { dg-error "no match" } sink_3_147(cv_source()); // { dg-error "no match" } return 0; @@ -263,9 +263,9 @@ six sink_3_156(const A&&); // { dg-message "" } int test3_156() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_156(ca); // { dg-error "lvalue" } sink_3_156(va); // { dg-error "no match" } sink_3_156(cva); // { dg-error "no match" } @@ -281,9 +281,9 @@ seven sink_3_157(volatile A&&); // { dg-message "" } int test3_157() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_157(ca); // { dg-error "no match" } sink_3_157(va); // { dg-error "lvalue" } sink_3_157(cva); // { dg-error "no match" } @@ -299,9 +299,9 @@ eight sink_3_158(const volatile A&&); // { dg-message "" } int test3_158() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_158(ca); // { dg-error "lvalue" } sink_3_158(va); // { dg-error "lvalue" } sink_3_158(cva); // { dg-error "lvalue" } @@ -315,9 +315,9 @@ seven sink_3_167(volatile A&&); // { dg-message "" } int test3_167() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_167(ca); // { dg-error "lvalue" } sink_3_167(va); // { dg-error "lvalue" } sink_3_167(cva); // { dg-error "no match" } @@ -333,9 +333,9 @@ eight sink_3_168(const volatile A&&); // { dg-message "" } int test3_168() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_168(ca); // { dg-error "lvalue" } sink_3_168(va); // { dg-error "lvalue" } sink_3_168(cva); // { dg-error "lvalue" } @@ -349,9 +349,9 @@ eight sink_3_178(const volatile A&&); // { dg-message "" } int test3_178() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_178(ca); // { dg-error "lvalue" } sink_3_178(va); // { dg-error "lvalue" } sink_3_178(cva); // { dg-error "lvalue" } @@ -365,9 +365,9 @@ four sink_3_234(const volatile A&); // { dg-message "note" } int test3_234() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_234(a); // { dg-error "ambiguous" } sink_3_234(v_source()); // { dg-error "no match" } sink_3_234(cv_source()); // { dg-error "no match" } @@ -381,9 +381,9 @@ five sink_3_235( A&&); // { dg-message "note" } int test3_235() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_235(a); // { dg-error "ambiguous" } sink_3_235(cva); // { dg-error "no match" } sink_3_235(v_source()); // { dg-error "no match" } @@ -398,9 +398,9 @@ six sink_3_236(const A&&); // { dg-message "note" } int test3_236() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_236(a); // { dg-error "ambiguous" } sink_3_236(cva); // { dg-error "no match" } sink_3_236(v_source()); // { dg-error "no match" } @@ -415,9 +415,9 @@ seven sink_3_237(volatile A&&); // { dg-message "note" } int test3_237() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_237(a); // { dg-error "ambiguous" } sink_3_237(cva); // { dg-error "no match" } sink_3_237(cv_source()); // { dg-error "no match" } @@ -431,9 +431,9 @@ eight sink_3_238(const volatile A&&); // { dg-message "" } int test3_238() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_238(a); // { dg-error "ambiguous" } sink_3_238(cva); // { dg-error "lvalue" } return 0; @@ -446,9 +446,9 @@ five sink_3_245( A&&); // { dg-message "note" } int test3_245() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_245(v_source()); // { dg-error "no match" } sink_3_245(cv_source()); // { dg-error "no match" } return 0; @@ -461,9 +461,9 @@ six sink_3_246(const A&&); // { dg-message "note" } int test3_246() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_246(v_source()); // { dg-error "no match" } sink_3_246(cv_source()); // { dg-error "no match" } return 0; @@ -476,9 +476,9 @@ seven sink_3_247(volatile A&&); // { dg-message "note" } int test3_247() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_247(cv_source()); // { dg-error "no match" } return 0; } @@ -490,9 +490,9 @@ six sink_3_256(const A&&); // { dg-message "note" } int test3_256() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_256(va); // { dg-error "no match" } sink_3_256(cva); // { dg-error "no match" } sink_3_256(v_source()); // { dg-error "no match" } @@ -507,9 +507,9 @@ seven sink_3_257(volatile A&&); // { dg-message "" } int test3_257() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_257(va); // { dg-error "lvalue" } sink_3_257(cva); // { dg-error "no match" } sink_3_257(cv_source()); // { dg-error "no match" } @@ -523,9 +523,9 @@ eight sink_3_258(const volatile A&&); // { dg-message "" } int test3_258() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_258(va); // { dg-error "lvalue" } sink_3_258(cva); // { dg-error "lvalue" } return 0; @@ -538,9 +538,9 @@ seven sink_3_267(volatile A&&); // { dg-message "" } int test3_267() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_267(va); // { dg-error "lvalue" } sink_3_267(cva); // { dg-error "no match" } sink_3_267(source()); // { dg-error "ambiguous" } @@ -555,9 +555,9 @@ eight sink_3_268(const volatile A&&); // { dg-message "" } int test3_268() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_268(va); // { dg-error "lvalue" } sink_3_268(cva); // { dg-error "lvalue" } return 0; @@ -570,9 +570,9 @@ eight sink_3_278(const volatile A&&); // { dg-message "" } int test3_278() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_278(va); // { dg-error "lvalue" } sink_3_278(cva); // { dg-error "lvalue" } return 0; @@ -585,9 +585,9 @@ five sink_3_345( A&&); // { dg-message "note" } int test3_345() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_345(c_source()); // { dg-error "no match" } sink_3_345(v_source()); // { dg-error "no match" } sink_3_345(cv_source()); // { dg-error "no match" } @@ -601,9 +601,9 @@ six sink_3_346(const A&&); // { dg-message "note" } int test3_346() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_346(v_source()); // { dg-error "no match" } sink_3_346(cv_source()); // { dg-error "no match" } return 0; @@ -616,9 +616,9 @@ seven sink_3_347(volatile A&&); // { dg-message "note" } int test3_347() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_347(c_source()); // { dg-error "no match" } sink_3_347(cv_source()); // { dg-error "no match" } return 0; @@ -631,9 +631,9 @@ six sink_3_356(const A&&); // { dg-message "" } int test3_356() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_356(ca); // { dg-error "lvalue" } sink_3_356(cva); // { dg-error "no match" } sink_3_356(v_source()); // { dg-error "no match" } @@ -648,9 +648,9 @@ seven sink_3_357(volatile A&&); // { dg-message "note" } int test3_357() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_357(ca); // { dg-error "no match" } sink_3_357(cva); // { dg-error "no match" } sink_3_357(c_source()); // { dg-error "no match" } @@ -665,9 +665,9 @@ eight sink_3_358(const volatile A&&); // { dg-message "" } int test3_358() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_358(ca); // { dg-error "lvalue" } sink_3_358(cva); // { dg-error "lvalue" } return 0; @@ -680,9 +680,9 @@ seven sink_3_367(volatile A&&); // { dg-message "note" } int test3_367() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_367(ca); // { dg-error "lvalue" } sink_3_367(cva); // { dg-error "no match" } sink_3_367(source()); // { dg-error "ambiguous" } @@ -697,9 +697,9 @@ eight sink_3_368(const volatile A&&); // { dg-message "" } int test3_368() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_368(ca); // { dg-error "lvalue" } sink_3_368(cva); // { dg-error "lvalue" } return 0; @@ -712,9 +712,9 @@ eight sink_3_378(const volatile A&&); // { dg-message "" } int test3_378() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_378(ca); // { dg-error "lvalue" } sink_3_378(cva); // { dg-error "lvalue" } return 0; @@ -727,9 +727,9 @@ six sink_3_456(const A&&); // { dg-message "note" } int test3_456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_456(v_source()); // { dg-error "no match" } sink_3_456(cv_source()); // { dg-error "no match" } return 0; @@ -742,9 +742,9 @@ seven sink_3_457(volatile A&&); // { dg-message "note" } int test3_457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_457(c_source()); // { dg-error "no match" } sink_3_457(cv_source()); // { dg-error "no match" } return 0; @@ -757,9 +757,9 @@ seven sink_3_467(volatile A&&); // { dg-message "note" } int test3_467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_467(source()); // { dg-error "ambiguous" } sink_3_467(cv_source()); // { dg-error "no match" } return 0; @@ -772,9 +772,9 @@ seven sink_3_567(volatile A&&); // { dg-message "" } int test3_567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_567(a); // { dg-error "lvalue" } sink_3_567(ca); // { dg-error "lvalue" } sink_3_567(va); // { dg-error "lvalue" } @@ -790,9 +790,9 @@ eight sink_3_568(const volatile A&&); // { dg-message "" } int test3_568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_568(a); // { dg-error "lvalue" } sink_3_568(ca); // { dg-error "lvalue" } sink_3_568(va); // { dg-error "lvalue" } @@ -807,9 +807,9 @@ eight sink_3_578(const volatile A&&); // { dg-message "" } int test3_578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_578(a); // { dg-error "lvalue" } sink_3_578(ca); // { dg-error "lvalue" } sink_3_578(va); // { dg-error "lvalue" } @@ -824,9 +824,9 @@ eight sink_3_678(const volatile A&&); // { dg-message "" } int test3_678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_3_678(a); // { dg-error "ambiguous" } sink_3_678(ca); // { dg-error "lvalue" } sink_3_678(va); // { dg-error "lvalue" } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv3p.C b/gcc/testsuite/g++.dg/cpp0x/rv3p.C index 5ab171f2655..5f59920bba6 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv3p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv3p.C @@ -37,9 +37,9 @@ three sink_3_123(volatile A&); int test3_123() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_123(a)) == 1> t1; sa<sizeof(sink_3_123(ca)) == 2> t2; sa<sizeof(sink_3_123(va)) == 3> t3; @@ -55,9 +55,9 @@ four sink_3_124(const volatile A&); int test3_124() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_124(a)) == 1> t1; sa<sizeof(sink_3_124(ca)) == 2> t2; sa<sizeof(sink_3_124(va)) == 4> t3; @@ -74,9 +74,9 @@ five sink_3_125( A&&); int test3_125() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_125(a)) == 1> t1; sa<sizeof(sink_3_125(ca)) == 2> t2; sa<sizeof(sink_3_125(source())) == 5> t5; @@ -91,9 +91,9 @@ six sink_3_126(const A&&); int test3_126() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_126(a)) == 1> t1; sa<sizeof(sink_3_126(ca)) == 2> t2; sa<sizeof(sink_3_126(source())) == 6> t5; @@ -108,9 +108,9 @@ seven sink_3_127(volatile A&&); int test3_127() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_127(a)) == 1> t1; sa<sizeof(sink_3_127(ca)) == 2> t2; sa<sizeof(sink_3_127(source())) == 7> t5; @@ -126,9 +126,9 @@ eight sink_3_128(const volatile A&&); int test3_128() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_128(a)) == 1> t1; sa<sizeof(sink_3_128(ca)) == 2> t2; sa<sizeof(sink_3_128(source())) == 8> t5; @@ -145,9 +145,9 @@ four sink_3_134(const volatile A&); int test3_134() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_134(a)) == 1> t1; sa<sizeof(sink_3_134(ca)) == 4> t2; sa<sizeof(sink_3_134(va)) == 3> t3; @@ -162,9 +162,9 @@ five sink_3_135( A&&); int test3_135() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_135(a)) == 1> t1; sa<sizeof(sink_3_135(va)) == 3> t3; sa<sizeof(sink_3_135(source())) == 5> t5; @@ -178,9 +178,9 @@ six sink_3_136(const A&&); int test3_136() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_136(a)) == 1> t1; sa<sizeof(sink_3_136(va)) == 3> t3; sa<sizeof(sink_3_136(source())) == 6> t5; @@ -195,9 +195,9 @@ seven sink_3_137(volatile A&&); int test3_137() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_137(a)) == 1> t1; sa<sizeof(sink_3_137(va)) == 3> t3; sa<sizeof(sink_3_137(source())) == 7> t5; @@ -212,9 +212,9 @@ eight sink_3_138(const volatile A&&); int test3_138() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_138(a)) == 1> t1; sa<sizeof(sink_3_138(va)) == 3> t3; sa<sizeof(sink_3_138(source())) == 8> t5; @@ -231,9 +231,9 @@ five sink_3_145( A&&); int test3_145() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_145(a)) == 1> t1; sa<sizeof(sink_3_145(ca)) == 4> t2; sa<sizeof(sink_3_145(va)) == 4> t3; @@ -249,9 +249,9 @@ six sink_3_146(const A&&); int test3_146() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_146(a)) == 1> t1; sa<sizeof(sink_3_146(ca)) == 4> t2; sa<sizeof(sink_3_146(va)) == 4> t3; @@ -268,9 +268,9 @@ seven sink_3_147(volatile A&&); int test3_147() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_147(a)) == 1> t1; sa<sizeof(sink_3_147(ca)) == 4> t2; sa<sizeof(sink_3_147(va)) == 4> t3; @@ -287,9 +287,9 @@ eight sink_3_148(const volatile A&&); int test3_148() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_148(a)) == 1> t1; sa<sizeof(sink_3_148(ca)) == 4> t2; sa<sizeof(sink_3_148(va)) == 4> t3; @@ -308,9 +308,9 @@ six sink_3_156(const A&&); int test3_156() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_156(a)) == 1> t1; sa<sizeof(sink_3_156(source())) == 5> t5; sa<sizeof(sink_3_156(c_source())) == 6> t6; @@ -324,9 +324,9 @@ seven sink_3_157(volatile A&&); int test3_157() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_157(a)) == 1> t1; sa<sizeof(sink_3_157(source())) == 5> t5; sa<sizeof(sink_3_157(v_source())) == 7> t7; @@ -340,9 +340,9 @@ eight sink_3_158(const volatile A&&); int test3_158() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_158(a)) == 1> t1; sa<sizeof(sink_3_158(source())) == 5> t5; sa<sizeof(sink_3_158(c_source())) == 8> t6; @@ -358,9 +358,9 @@ seven sink_3_167(volatile A&&); int test3_167() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_167(a)) == 1> t1; sa<sizeof(sink_3_167(c_source())) == 6> t6; sa<sizeof(sink_3_167(v_source())) == 7> t7; @@ -374,9 +374,9 @@ eight sink_3_168(const volatile A&&); int test3_168() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_168(a)) == 1> t1; sa<sizeof(sink_3_168(source())) == 6> t5; sa<sizeof(sink_3_168(c_source())) == 6> t6; @@ -392,9 +392,9 @@ eight sink_3_178(const volatile A&&); int test3_178() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_178(a)) == 1> t1; sa<sizeof(sink_3_178(source())) == 7> t5; sa<sizeof(sink_3_178(c_source())) == 8> t6; @@ -410,9 +410,9 @@ four sink_3_234(const volatile A&); int test3_234() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_234(ca)) == 2> t2; sa<sizeof(sink_3_234(va)) == 3> t3; sa<sizeof(sink_3_234(cva)) == 4> t4; @@ -428,9 +428,9 @@ five sink_3_235( A&&); int test3_235() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_235(ca)) == 2> t2; sa<sizeof(sink_3_235(va)) == 3> t3; sa<sizeof(sink_3_235(source())) == 5> t5; @@ -445,9 +445,9 @@ six sink_3_236(const A&&); int test3_236() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_236(ca)) == 2> t2; sa<sizeof(sink_3_236(va)) == 3> t3; sa<sizeof(sink_3_236(source())) == 6> t5; @@ -462,9 +462,9 @@ seven sink_3_237(volatile A&&); int test3_237() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_237(ca)) == 2> t2; sa<sizeof(sink_3_237(va)) == 3> t3; sa<sizeof(sink_3_237(source())) == 7> t5; @@ -480,9 +480,9 @@ eight sink_3_238(const volatile A&&); int test3_238() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_238(ca)) == 2> t2; sa<sizeof(sink_3_238(va)) == 3> t3; sa<sizeof(sink_3_238(source())) == 8> t5; @@ -499,9 +499,9 @@ five sink_3_245( A&&); int test3_245() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_245(a)) == 2> t1; sa<sizeof(sink_3_245(ca)) == 2> t2; sa<sizeof(sink_3_245(va)) == 4> t3; @@ -518,9 +518,9 @@ six sink_3_246(const A&&); int test3_246() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_246(a)) == 2> t1; sa<sizeof(sink_3_246(ca)) == 2> t2; sa<sizeof(sink_3_246(va)) == 4> t3; @@ -537,9 +537,9 @@ seven sink_3_247(volatile A&&); int test3_247() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_247(a)) == 2> t1; sa<sizeof(sink_3_247(ca)) == 2> t2; sa<sizeof(sink_3_247(va)) == 4> t3; @@ -557,9 +557,9 @@ eight sink_3_248(const volatile A&&); int test3_248() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_248(a)) == 2> t1; sa<sizeof(sink_3_248(ca)) == 2> t2; sa<sizeof(sink_3_248(va)) == 4> t3; @@ -578,9 +578,9 @@ six sink_3_256(const A&&); int test3_256() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_256(a)) == 2> t1; sa<sizeof(sink_3_256(ca)) == 2> t2; sa<sizeof(sink_3_256(source())) == 5> t5; @@ -595,9 +595,9 @@ seven sink_3_257(volatile A&&); int test3_257() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_257(a)) == 2> t1; sa<sizeof(sink_3_257(ca)) == 2> t2; sa<sizeof(sink_3_257(source())) == 5> t5; @@ -613,9 +613,9 @@ eight sink_3_258(const volatile A&&); int test3_258() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_258(a)) == 2> t1; sa<sizeof(sink_3_258(ca)) == 2> t2; sa<sizeof(sink_3_258(source())) == 5> t5; @@ -632,9 +632,9 @@ seven sink_3_267(volatile A&&); int test3_267() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_267(a)) == 2> t1; sa<sizeof(sink_3_267(ca)) == 2> t2; sa<sizeof(sink_3_267(c_source())) == 6> t6; @@ -649,9 +649,9 @@ eight sink_3_268(const volatile A&&); int test3_268() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_268(a)) == 2> t1; sa<sizeof(sink_3_268(ca)) == 2> t2; sa<sizeof(sink_3_268(source())) == 6> t5; @@ -668,9 +668,9 @@ eight sink_3_278(const volatile A&&); int test3_278() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_278(a)) == 2> t1; sa<sizeof(sink_3_278(ca)) == 2> t2; sa<sizeof(sink_3_278(source())) == 7> t5; @@ -687,9 +687,9 @@ five sink_3_345( A&&); int test3_345() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_345(a)) == 3> t1; sa<sizeof(sink_3_345(ca)) == 4> t2; sa<sizeof(sink_3_345(va)) == 3> t3; @@ -705,9 +705,9 @@ six sink_3_346(const A&&); int test3_346() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_346(a)) == 3> t1; sa<sizeof(sink_3_346(ca)) == 4> t2; sa<sizeof(sink_3_346(va)) == 3> t3; @@ -724,9 +724,9 @@ seven sink_3_347(volatile A&&); int test3_347() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_347(a)) == 3> t1; sa<sizeof(sink_3_347(ca)) == 4> t2; sa<sizeof(sink_3_347(va)) == 3> t3; @@ -743,9 +743,9 @@ eight sink_3_348(const volatile A&&); int test3_348() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_348(a)) == 3> t1; sa<sizeof(sink_3_348(ca)) == 4> t2; sa<sizeof(sink_3_348(va)) == 3> t3; @@ -764,9 +764,9 @@ six sink_3_356(const A&&); int test3_356() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_356(a)) == 3> t1; sa<sizeof(sink_3_356(va)) == 3> t3; sa<sizeof(sink_3_356(source())) == 5> t5; @@ -781,9 +781,9 @@ seven sink_3_357(volatile A&&); int test3_357() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_357(a)) == 3> t1; sa<sizeof(sink_3_357(va)) == 3> t3; sa<sizeof(sink_3_357(source())) == 5> t5; @@ -798,9 +798,9 @@ eight sink_3_358(const volatile A&&); int test3_358() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_358(a)) == 3> t1; sa<sizeof(sink_3_358(va)) == 3> t3; sa<sizeof(sink_3_358(source())) == 5> t5; @@ -817,9 +817,9 @@ seven sink_3_367(volatile A&&); int test3_367() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_367(a)) == 3> t1; sa<sizeof(sink_3_367(va)) == 3> t3; sa<sizeof(sink_3_367(c_source())) == 6> t6; @@ -834,9 +834,9 @@ eight sink_3_368(const volatile A&&); int test3_368() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_368(a)) == 3> t1; sa<sizeof(sink_3_368(va)) == 3> t3; sa<sizeof(sink_3_368(source())) == 6> t5; @@ -853,9 +853,9 @@ eight sink_3_378(const volatile A&&); int test3_378() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_378(a)) == 3> t1; sa<sizeof(sink_3_378(va)) == 3> t3; sa<sizeof(sink_3_378(source())) == 7> t5; @@ -872,9 +872,9 @@ six sink_3_456(const A&&); int test3_456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_456(a)) == 4> t1; sa<sizeof(sink_3_456(ca)) == 4> t2; sa<sizeof(sink_3_456(va)) == 4> t3; @@ -891,9 +891,9 @@ seven sink_3_457(volatile A&&); int test3_457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_457(a)) == 4> t1; sa<sizeof(sink_3_457(ca)) == 4> t2; sa<sizeof(sink_3_457(va)) == 4> t3; @@ -910,9 +910,9 @@ eight sink_3_458(const volatile A&&); int test3_458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_458(a)) == 4> t1; sa<sizeof(sink_3_458(ca)) == 4> t2; sa<sizeof(sink_3_458(va)) == 4> t3; @@ -931,9 +931,9 @@ seven sink_3_467(volatile A&&); int test3_467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_467(a)) == 4> t1; sa<sizeof(sink_3_467(ca)) == 4> t2; sa<sizeof(sink_3_467(va)) == 4> t3; @@ -950,9 +950,9 @@ eight sink_3_468(const volatile A&&); int test3_468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_468(a)) == 4> t1; sa<sizeof(sink_3_468(ca)) == 4> t2; sa<sizeof(sink_3_468(va)) == 4> t3; @@ -971,9 +971,9 @@ eight sink_3_478(const volatile A&&); int test3_478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_478(a)) == 4> t1; sa<sizeof(sink_3_478(ca)) == 4> t2; sa<sizeof(sink_3_478(va)) == 4> t3; @@ -992,9 +992,9 @@ seven sink_3_567(volatile A&&); int test3_567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_567(source())) == 5> t5; sa<sizeof(sink_3_567(c_source())) == 6> t6; sa<sizeof(sink_3_567(v_source())) == 7> t7; @@ -1008,9 +1008,9 @@ eight sink_3_568(const volatile A&&); int test3_568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_568(source())) == 5> t5; sa<sizeof(sink_3_568(c_source())) == 6> t6; sa<sizeof(sink_3_568(v_source())) == 8> t7; @@ -1025,9 +1025,9 @@ eight sink_3_578(const volatile A&&); int test3_578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_578(source())) == 5> t5; sa<sizeof(sink_3_578(c_source())) == 8> t6; sa<sizeof(sink_3_578(v_source())) == 7> t7; @@ -1042,9 +1042,9 @@ eight sink_3_678(const volatile A&&); int test3_678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_3_678(c_source())) == 6> t6; sa<sizeof(sink_3_678(v_source())) == 7> t7; sa<sizeof(sink_3_678(cv_source())) == 8> t8; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv4n.C b/gcc/testsuite/g++.dg/cpp0x/rv4n.C index cf627aed3f0..524885f1d60 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv4n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv4n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -38,9 +38,9 @@ four sink_4_1234(const volatile A&); // { dg-message "note" } int test4_1234() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1234(v_source()); // { dg-error "no match" } sink_4_1234(cv_source()); // { dg-error "no match" } return 0; @@ -54,9 +54,9 @@ five sink_4_1235( A&&); // { dg-message "note" } int test4_1235() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1235(cva); // { dg-error "no match" } sink_4_1235(v_source()); // { dg-error "no match" } sink_4_1235(cv_source()); // { dg-error "no match" } @@ -71,9 +71,9 @@ six sink_4_1236(const A&&); // { dg-message "note" } int test4_1236() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1236(cva); // { dg-error "no match" } sink_4_1236(v_source()); // { dg-error "no match" } sink_4_1236(cv_source()); // { dg-error "no match" } @@ -88,9 +88,9 @@ seven sink_4_1237(volatile A&&); // { dg-message "note" } int test4_1237() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1237(cva); // { dg-error "no match" } sink_4_1237(cv_source()); // { dg-error "no match" } return 0; @@ -104,9 +104,9 @@ eight sink_4_1238(const volatile A&&); // { dg-message "" } int test4_1238() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1238(cva); // { dg-error "lvalue" } return 0; } @@ -119,9 +119,9 @@ five sink_4_1245( A&&); // { dg-message "note" } int test4_1245() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1245(v_source()); // { dg-error "no match" } sink_4_1245(cv_source()); // { dg-error "no match" } return 0; @@ -135,9 +135,9 @@ six sink_4_1246(const A&&); // { dg-message "note" } int test4_1246() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1246(v_source()); // { dg-error "no match" } sink_4_1246(cv_source()); // { dg-error "no match" } return 0; @@ -151,9 +151,9 @@ seven sink_4_1247(volatile A&&); // { dg-message "note" } int test4_1247() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1247(cv_source()); // { dg-error "no match" } return 0; } @@ -166,9 +166,9 @@ six sink_4_1256(const A&&); // { dg-message "note" } int test4_1256() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1256(va); // { dg-error "no match" } sink_4_1256(cva); // { dg-error "no match" } sink_4_1256(v_source()); // { dg-error "no match" } @@ -184,9 +184,9 @@ seven sink_4_1257(volatile A&&); // { dg-message "" } int test4_1257() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1257(va); // { dg-error "lvalue" } sink_4_1257(cva); // { dg-error "no match" } sink_4_1257(cv_source()); // { dg-error "no match" } @@ -201,9 +201,9 @@ eight sink_4_1258(const volatile A&&); // { dg-message "" } int test4_1258() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1258(va); // { dg-error "lvalue" } sink_4_1258(cva); // { dg-error "lvalue" } return 0; @@ -217,9 +217,9 @@ seven sink_4_1267(volatile A&&); // { dg-message "" } int test4_1267() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1267(va); // { dg-error "lvalue" } sink_4_1267(cva); // { dg-error "no match" } sink_4_1267(source()); // { dg-error "ambiguous" } @@ -235,9 +235,9 @@ eight sink_4_1268(const volatile A&&); // { dg-message "" } int test4_1268() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1268(va); // { dg-error "lvalue" } sink_4_1268(cva); // { dg-error "lvalue" } return 0; @@ -251,9 +251,9 @@ eight sink_4_1278(const volatile A&&); // { dg-message "" } int test4_1278() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1278(va); // { dg-error "lvalue" } sink_4_1278(cva); // { dg-error "lvalue" } return 0; @@ -267,9 +267,9 @@ five sink_4_1345( A&&); // { dg-message "note" } int test4_1345() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1345(c_source()); // { dg-error "no match" } sink_4_1345(v_source()); // { dg-error "no match" } sink_4_1345(cv_source()); // { dg-error "no match" } @@ -284,9 +284,9 @@ six sink_4_1346(const A&&); // { dg-message "note" } int test4_1346() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1346(v_source()); // { dg-error "no match" } sink_4_1346(cv_source()); // { dg-error "no match" } return 0; @@ -300,9 +300,9 @@ seven sink_4_1347(volatile A&&); // { dg-message "note" } int test4_1347() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1347(c_source()); // { dg-error "no match" } sink_4_1347(cv_source()); // { dg-error "no match" } return 0; @@ -316,9 +316,9 @@ six sink_4_1356(const A&&); // { dg-message "" } int test4_1356() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1356(ca); // { dg-error "lvalue" } sink_4_1356(cva); // { dg-error "no match" } sink_4_1356(v_source()); // { dg-error "no match" } @@ -334,9 +334,9 @@ seven sink_4_1357(volatile A&&); // { dg-message "note" } int test4_1357() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1357(ca); // { dg-error "no match" } sink_4_1357(cva); // { dg-error "no match" } sink_4_1357(c_source()); // { dg-error "no match" } @@ -352,9 +352,9 @@ eight sink_4_1358(const volatile A&&); // { dg-message "" } int test4_1358() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1358(ca); // { dg-error "lvalue" } sink_4_1358(cva); // { dg-error "lvalue" } return 0; @@ -368,9 +368,9 @@ seven sink_4_1367(volatile A&&); // { dg-message "note" } int test4_1367() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1367(ca); // { dg-error "lvalue" } sink_4_1367(cva); // { dg-error "no match" } sink_4_1367(source()); // { dg-error "ambiguous" } @@ -386,9 +386,9 @@ eight sink_4_1368(const volatile A&&); // { dg-message "" } int test4_1368() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1368(ca); // { dg-error "lvalue" } sink_4_1368(cva); // { dg-error "lvalue" } return 0; @@ -402,9 +402,9 @@ eight sink_4_1378(const volatile A&&); // { dg-message "" } int test4_1378() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1378(ca); // { dg-error "lvalue" } sink_4_1378(cva); // { dg-error "lvalue" } return 0; @@ -418,9 +418,9 @@ six sink_4_1456(const A&&); // { dg-message "note" } int test4_1456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1456(v_source()); // { dg-error "no match" } sink_4_1456(cv_source()); // { dg-error "no match" } return 0; @@ -434,9 +434,9 @@ seven sink_4_1457(volatile A&&); // { dg-message "note" } int test4_1457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1457(c_source()); // { dg-error "no match" } sink_4_1457(cv_source()); // { dg-error "no match" } return 0; @@ -450,9 +450,9 @@ seven sink_4_1467(volatile A&&); // { dg-message "note" } int test4_1467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1467(source()); // { dg-error "ambiguous" } sink_4_1467(cv_source()); // { dg-error "no match" } return 0; @@ -466,9 +466,9 @@ seven sink_4_1567(volatile A&&); // { dg-message "" } int test4_1567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1567(ca); // { dg-error "lvalue" } sink_4_1567(va); // { dg-error "lvalue" } sink_4_1567(cva); // { dg-error "no match" } @@ -484,9 +484,9 @@ eight sink_4_1568(const volatile A&&); // { dg-message "" } int test4_1568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1568(ca); // { dg-error "lvalue" } sink_4_1568(va); // { dg-error "lvalue" } sink_4_1568(cva); // { dg-error "lvalue" } @@ -501,9 +501,9 @@ eight sink_4_1578(const volatile A&&); // { dg-message "" } int test4_1578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1578(ca); // { dg-error "lvalue" } sink_4_1578(va); // { dg-error "lvalue" } sink_4_1578(cva); // { dg-error "lvalue" } @@ -518,9 +518,9 @@ eight sink_4_1678(const volatile A&&); // { dg-message "" } int test4_1678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_1678(ca); // { dg-error "lvalue" } sink_4_1678(va); // { dg-error "lvalue" } sink_4_1678(cva); // { dg-error "lvalue" } @@ -536,9 +536,9 @@ five sink_4_2345( A&&); // { dg-message "note" } int test4_2345() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2345(a); // { dg-error "ambiguous" } sink_4_2345(v_source()); // { dg-error "no match" } sink_4_2345(cv_source()); // { dg-error "no match" } @@ -553,9 +553,9 @@ six sink_4_2346(const A&&); // { dg-message "note" } int test4_2346() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2346(a); // { dg-error "ambiguous" } sink_4_2346(v_source()); // { dg-error "no match" } sink_4_2346(cv_source()); // { dg-error "no match" } @@ -570,9 +570,9 @@ seven sink_4_2347(volatile A&&); // { dg-message "note" } int test4_2347() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2347(a); // { dg-error "ambiguous" } sink_4_2347(cv_source()); // { dg-error "no match" } return 0; @@ -586,9 +586,9 @@ eight sink_4_2348(const volatile A&&); // { dg-message "note" } int test4_2348() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2348(a); // { dg-error "ambiguous" } return 0; } @@ -601,9 +601,9 @@ six sink_4_2356(const A&&); // { dg-message "note" } int test4_2356() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2356(a); // { dg-error "ambiguous" } sink_4_2356(cva); // { dg-error "no match" } sink_4_2356(v_source()); // { dg-error "no match" } @@ -619,9 +619,9 @@ seven sink_4_2357(volatile A&&); // { dg-message "note" } int test4_2357() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2357(a); // { dg-error "ambiguous" } sink_4_2357(cva); // { dg-error "no match" } sink_4_2357(cv_source()); // { dg-error "no match" } @@ -636,9 +636,9 @@ eight sink_4_2358(const volatile A&&); // { dg-message "" } int test4_2358() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2358(a); // { dg-error "ambiguous" } sink_4_2358(cva); // { dg-error "lvalue" } return 0; @@ -652,9 +652,9 @@ seven sink_4_2367(volatile A&&); // { dg-message "note" } int test4_2367() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2367(a); // { dg-error "ambiguous" } sink_4_2367(cva); // { dg-error "no match" } sink_4_2367(source()); // { dg-error "ambiguous" } @@ -670,9 +670,9 @@ eight sink_4_2368(const volatile A&&); // { dg-message "" } int test4_2368() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2368(a); // { dg-error "ambiguous" } sink_4_2368(cva); // { dg-error "lvalue" } return 0; @@ -686,9 +686,9 @@ eight sink_4_2378(const volatile A&&); // { dg-message "" } int test4_2378() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2378(a); // { dg-error "ambiguous" } sink_4_2378(cva); // { dg-error "lvalue" } return 0; @@ -702,9 +702,9 @@ six sink_4_2456(const A&&); // { dg-message "note" } int test4_2456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2456(v_source()); // { dg-error "no match" } sink_4_2456(cv_source()); // { dg-error "no match" } return 0; @@ -718,9 +718,9 @@ seven sink_4_2457(volatile A&&); // { dg-message "note" } int test4_2457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2457(cv_source()); // { dg-error "no match" } return 0; } @@ -733,9 +733,9 @@ seven sink_4_2467(volatile A&&); // { dg-message "note" } int test4_2467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2467(source()); // { dg-error "ambiguous" } sink_4_2467(cv_source()); // { dg-error "no match" } return 0; @@ -749,9 +749,9 @@ seven sink_4_2567(volatile A&&); // { dg-message "" } int test4_2567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2567(va); // { dg-error "lvalue" } sink_4_2567(cva); // { dg-error "no match" } sink_4_2567(cv_source()); // { dg-error "no match" } @@ -766,9 +766,9 @@ eight sink_4_2568(const volatile A&&); // { dg-message "" } int test4_2568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2568(va); // { dg-error "lvalue" } sink_4_2568(cva); // { dg-error "lvalue" } return 0; @@ -782,9 +782,9 @@ eight sink_4_2578(const volatile A&&); // { dg-message "" } int test4_2578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2578(va); // { dg-error "lvalue" } sink_4_2578(cva); // { dg-error "lvalue" } return 0; @@ -798,9 +798,9 @@ eight sink_4_2678(const volatile A&&); // { dg-message "" } int test4_2678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_2678(va); // { dg-error "lvalue" } sink_4_2678(cva); // { dg-error "lvalue" } sink_4_2678(source()); // { dg-error "ambiguous" } @@ -815,9 +815,9 @@ six sink_4_3456(const A&&); // { dg-message "note" } int test4_3456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3456(v_source()); // { dg-error "no match" } sink_4_3456(cv_source()); // { dg-error "no match" } return 0; @@ -831,9 +831,9 @@ seven sink_4_3457(volatile A&&); // { dg-message "note" } int test4_3457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3457(c_source()); // { dg-error "no match" } sink_4_3457(cv_source()); // { dg-error "no match" } return 0; @@ -847,9 +847,9 @@ seven sink_4_3467(volatile A&&); // { dg-message "note" } int test4_3467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3467(source()); // { dg-error "ambiguous" } sink_4_3467(cv_source()); // { dg-error "no match" } return 0; @@ -863,9 +863,9 @@ seven sink_4_3567(volatile A&&); // { dg-message "note" } int test4_3567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3567(ca); // { dg-error "lvalue" } sink_4_3567(cva); // { dg-error "no match" } sink_4_3567(cv_source()); // { dg-error "no match" } @@ -880,9 +880,9 @@ eight sink_4_3568(const volatile A&&); // { dg-message "" } int test4_3568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3568(ca); // { dg-error "lvalue" } sink_4_3568(cva); // { dg-error "lvalue" } return 0; @@ -896,9 +896,9 @@ eight sink_4_3578(const volatile A&&); // { dg-message "" } int test4_3578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3578(ca); // { dg-error "lvalue" } sink_4_3578(cva); // { dg-error "lvalue" } return 0; @@ -912,9 +912,9 @@ eight sink_4_3678(const volatile A&&); // { dg-message "" } int test4_3678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_3678(ca); // { dg-error "lvalue" } sink_4_3678(cva); // { dg-error "lvalue" } sink_4_3678(source()); // { dg-error "ambiguous" } @@ -929,9 +929,9 @@ seven sink_4_4567(volatile A&&); // { dg-message "note" } int test4_4567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_4567(cv_source()); // { dg-error "no match" } return 0; } @@ -944,9 +944,9 @@ eight sink_4_4678(const volatile A&&); // { dg-message "note" } int test4_4678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_4678(source()); // { dg-error "ambiguous" } return 0; } @@ -959,9 +959,9 @@ eight sink_4_5678(const volatile A&&); // { dg-message "" } int test4_5678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_4_5678(a); // { dg-error "lvalue" } sink_4_5678(ca); // { dg-error "lvalue" } sink_4_5678(va); // { dg-error "lvalue" } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv4p.C b/gcc/testsuite/g++.dg/cpp0x/rv4p.C index 03ad9734614..33a90f854d1 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv4p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv4p.C @@ -38,9 +38,9 @@ four sink_4_1234(const volatile A&); int test4_1234() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1234(a)) == 1> t1; sa<sizeof(sink_4_1234(ca)) == 2> t2; sa<sizeof(sink_4_1234(va)) == 3> t3; @@ -58,9 +58,9 @@ five sink_4_1235( A&&); int test4_1235() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1235(a)) == 1> t1; sa<sizeof(sink_4_1235(ca)) == 2> t2; sa<sizeof(sink_4_1235(va)) == 3> t3; @@ -77,9 +77,9 @@ six sink_4_1236(const A&&); int test4_1236() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1236(a)) == 1> t1; sa<sizeof(sink_4_1236(ca)) == 2> t2; sa<sizeof(sink_4_1236(va)) == 3> t3; @@ -96,9 +96,9 @@ seven sink_4_1237(volatile A&&); int test4_1237() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1237(a)) == 1> t1; sa<sizeof(sink_4_1237(ca)) == 2> t2; sa<sizeof(sink_4_1237(va)) == 3> t3; @@ -116,9 +116,9 @@ eight sink_4_1238(const volatile A&&); int test4_1238() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1238(a)) == 1> t1; sa<sizeof(sink_4_1238(ca)) == 2> t2; sa<sizeof(sink_4_1238(va)) == 3> t3; @@ -137,9 +137,9 @@ five sink_4_1245( A&&); int test4_1245() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1245(a)) == 1> t1; sa<sizeof(sink_4_1245(ca)) == 2> t2; sa<sizeof(sink_4_1245(va)) == 4> t3; @@ -157,9 +157,9 @@ six sink_4_1246(const A&&); int test4_1246() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1246(a)) == 1> t1; sa<sizeof(sink_4_1246(ca)) == 2> t2; sa<sizeof(sink_4_1246(va)) == 4> t3; @@ -177,9 +177,9 @@ seven sink_4_1247(volatile A&&); int test4_1247() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1247(a)) == 1> t1; sa<sizeof(sink_4_1247(ca)) == 2> t2; sa<sizeof(sink_4_1247(va)) == 4> t3; @@ -198,9 +198,9 @@ eight sink_4_1248(const volatile A&&); int test4_1248() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1248(a)) == 1> t1; sa<sizeof(sink_4_1248(ca)) == 2> t2; sa<sizeof(sink_4_1248(va)) == 4> t3; @@ -220,9 +220,9 @@ six sink_4_1256(const A&&); int test4_1256() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1256(a)) == 1> t1; sa<sizeof(sink_4_1256(ca)) == 2> t2; sa<sizeof(sink_4_1256(source())) == 5> t5; @@ -238,9 +238,9 @@ seven sink_4_1257(volatile A&&); int test4_1257() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1257(a)) == 1> t1; sa<sizeof(sink_4_1257(ca)) == 2> t2; sa<sizeof(sink_4_1257(source())) == 5> t5; @@ -257,9 +257,9 @@ eight sink_4_1258(const volatile A&&); int test4_1258() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1258(a)) == 1> t1; sa<sizeof(sink_4_1258(ca)) == 2> t2; sa<sizeof(sink_4_1258(source())) == 5> t5; @@ -277,9 +277,9 @@ seven sink_4_1267(volatile A&&); int test4_1267() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1267(a)) == 1> t1; sa<sizeof(sink_4_1267(ca)) == 2> t2; sa<sizeof(sink_4_1267(c_source())) == 6> t6; @@ -295,9 +295,9 @@ eight sink_4_1268(const volatile A&&); int test4_1268() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1268(a)) == 1> t1; sa<sizeof(sink_4_1268(ca)) == 2> t2; sa<sizeof(sink_4_1268(source())) == 6> t5; @@ -315,9 +315,9 @@ eight sink_4_1278(const volatile A&&); int test4_1278() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1278(a)) == 1> t1; sa<sizeof(sink_4_1278(ca)) == 2> t2; sa<sizeof(sink_4_1278(source())) == 7> t5; @@ -335,9 +335,9 @@ five sink_4_1345( A&&); int test4_1345() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1345(a)) == 1> t1; sa<sizeof(sink_4_1345(ca)) == 4> t2; sa<sizeof(sink_4_1345(va)) == 3> t3; @@ -354,9 +354,9 @@ six sink_4_1346(const A&&); int test4_1346() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1346(a)) == 1> t1; sa<sizeof(sink_4_1346(ca)) == 4> t2; sa<sizeof(sink_4_1346(va)) == 3> t3; @@ -374,9 +374,9 @@ seven sink_4_1347(volatile A&&); int test4_1347() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1347(a)) == 1> t1; sa<sizeof(sink_4_1347(ca)) == 4> t2; sa<sizeof(sink_4_1347(va)) == 3> t3; @@ -394,9 +394,9 @@ eight sink_4_1348(const volatile A&&); int test4_1348() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1348(a)) == 1> t1; sa<sizeof(sink_4_1348(ca)) == 4> t2; sa<sizeof(sink_4_1348(va)) == 3> t3; @@ -416,9 +416,9 @@ six sink_4_1356(const A&&); int test4_1356() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1356(a)) == 1> t1; sa<sizeof(sink_4_1356(va)) == 3> t3; sa<sizeof(sink_4_1356(source())) == 5> t5; @@ -434,9 +434,9 @@ seven sink_4_1357(volatile A&&); int test4_1357() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1357(a)) == 1> t1; sa<sizeof(sink_4_1357(va)) == 3> t3; sa<sizeof(sink_4_1357(source())) == 5> t5; @@ -452,9 +452,9 @@ eight sink_4_1358(const volatile A&&); int test4_1358() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1358(a)) == 1> t1; sa<sizeof(sink_4_1358(va)) == 3> t3; sa<sizeof(sink_4_1358(source())) == 5> t5; @@ -472,9 +472,9 @@ seven sink_4_1367(volatile A&&); int test4_1367() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1367(a)) == 1> t1; sa<sizeof(sink_4_1367(va)) == 3> t3; sa<sizeof(sink_4_1367(c_source())) == 6> t6; @@ -490,9 +490,9 @@ eight sink_4_1368(const volatile A&&); int test4_1368() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1368(a)) == 1> t1; sa<sizeof(sink_4_1368(va)) == 3> t3; sa<sizeof(sink_4_1368(source())) == 6> t5; @@ -510,9 +510,9 @@ eight sink_4_1378(const volatile A&&); int test4_1378() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1378(a)) == 1> t1; sa<sizeof(sink_4_1378(va)) == 3> t3; sa<sizeof(sink_4_1378(source())) == 7> t5; @@ -530,9 +530,9 @@ six sink_4_1456(const A&&); int test4_1456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1456(a)) == 1> t1; sa<sizeof(sink_4_1456(ca)) == 4> t2; sa<sizeof(sink_4_1456(va)) == 4> t3; @@ -550,9 +550,9 @@ seven sink_4_1457(volatile A&&); int test4_1457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1457(a)) == 1> t1; sa<sizeof(sink_4_1457(ca)) == 4> t2; sa<sizeof(sink_4_1457(va)) == 4> t3; @@ -570,9 +570,9 @@ eight sink_4_1458(const volatile A&&); int test4_1458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1458(a)) == 1> t1; sa<sizeof(sink_4_1458(ca)) == 4> t2; sa<sizeof(sink_4_1458(va)) == 4> t3; @@ -592,9 +592,9 @@ seven sink_4_1467(volatile A&&); int test4_1467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1467(a)) == 1> t1; sa<sizeof(sink_4_1467(ca)) == 4> t2; sa<sizeof(sink_4_1467(va)) == 4> t3; @@ -612,9 +612,9 @@ eight sink_4_1468(const volatile A&&); int test4_1468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1468(a)) == 1> t1; sa<sizeof(sink_4_1468(ca)) == 4> t2; sa<sizeof(sink_4_1468(va)) == 4> t3; @@ -634,9 +634,9 @@ eight sink_4_1478(const volatile A&&); int test4_1478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1478(a)) == 1> t1; sa<sizeof(sink_4_1478(ca)) == 4> t2; sa<sizeof(sink_4_1478(va)) == 4> t3; @@ -656,9 +656,9 @@ seven sink_4_1567(volatile A&&); int test4_1567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1567(a)) == 1> t1; sa<sizeof(sink_4_1567(source())) == 5> t5; sa<sizeof(sink_4_1567(c_source())) == 6> t6; @@ -674,9 +674,9 @@ eight sink_4_1568(const volatile A&&); int test4_1568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1568(a)) == 1> t1; sa<sizeof(sink_4_1568(source())) == 5> t5; sa<sizeof(sink_4_1568(c_source())) == 6> t6; @@ -693,9 +693,9 @@ eight sink_4_1578(const volatile A&&); int test4_1578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1578(a)) == 1> t1; sa<sizeof(sink_4_1578(source())) == 5> t5; sa<sizeof(sink_4_1578(c_source())) == 8> t6; @@ -712,9 +712,9 @@ eight sink_4_1678(const volatile A&&); int test4_1678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_1678(a)) == 1> t1; sa<sizeof(sink_4_1678(c_source())) == 6> t6; sa<sizeof(sink_4_1678(v_source())) == 7> t7; @@ -730,9 +730,9 @@ five sink_4_2345( A&&); int test4_2345() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2345(ca)) == 2> t2; sa<sizeof(sink_4_2345(va)) == 3> t3; sa<sizeof(sink_4_2345(cva)) == 4> t4; @@ -749,9 +749,9 @@ six sink_4_2346(const A&&); int test4_2346() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2346(ca)) == 2> t2; sa<sizeof(sink_4_2346(va)) == 3> t3; sa<sizeof(sink_4_2346(cva)) == 4> t4; @@ -768,9 +768,9 @@ seven sink_4_2347(volatile A&&); int test4_2347() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2347(ca)) == 2> t2; sa<sizeof(sink_4_2347(va)) == 3> t3; sa<sizeof(sink_4_2347(cva)) == 4> t4; @@ -788,9 +788,9 @@ eight sink_4_2348(const volatile A&&); int test4_2348() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2348(ca)) == 2> t2; sa<sizeof(sink_4_2348(va)) == 3> t3; sa<sizeof(sink_4_2348(cva)) == 4> t4; @@ -809,9 +809,9 @@ six sink_4_2356(const A&&); int test4_2356() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2356(ca)) == 2> t2; sa<sizeof(sink_4_2356(va)) == 3> t3; sa<sizeof(sink_4_2356(source())) == 5> t5; @@ -827,9 +827,9 @@ seven sink_4_2357(volatile A&&); int test4_2357() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2357(ca)) == 2> t2; sa<sizeof(sink_4_2357(va)) == 3> t3; sa<sizeof(sink_4_2357(source())) == 5> t5; @@ -846,9 +846,9 @@ eight sink_4_2358(const volatile A&&); int test4_2358() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2358(ca)) == 2> t2; sa<sizeof(sink_4_2358(va)) == 3> t3; sa<sizeof(sink_4_2358(source())) == 5> t5; @@ -866,9 +866,9 @@ seven sink_4_2367(volatile A&&); int test4_2367() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2367(ca)) == 2> t2; sa<sizeof(sink_4_2367(va)) == 3> t3; sa<sizeof(sink_4_2367(c_source())) == 6> t6; @@ -884,9 +884,9 @@ eight sink_4_2368(const volatile A&&); int test4_2368() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2368(ca)) == 2> t2; sa<sizeof(sink_4_2368(va)) == 3> t3; sa<sizeof(sink_4_2368(source())) == 6> t5; @@ -904,9 +904,9 @@ eight sink_4_2378(const volatile A&&); int test4_2378() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2378(ca)) == 2> t2; sa<sizeof(sink_4_2378(va)) == 3> t3; sa<sizeof(sink_4_2378(source())) == 7> t5; @@ -924,9 +924,9 @@ six sink_4_2456(const A&&); int test4_2456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2456(a)) == 2> t1; sa<sizeof(sink_4_2456(ca)) == 2> t2; sa<sizeof(sink_4_2456(va)) == 4> t3; @@ -944,9 +944,9 @@ seven sink_4_2457(volatile A&&); int test4_2457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2457(a)) == 2> t1; sa<sizeof(sink_4_2457(ca)) == 2> t2; sa<sizeof(sink_4_2457(va)) == 4> t3; @@ -965,9 +965,9 @@ eight sink_4_2458(const volatile A&&); int test4_2458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2458(a)) == 2> t1; sa<sizeof(sink_4_2458(ca)) == 2> t2; sa<sizeof(sink_4_2458(va)) == 4> t3; @@ -987,9 +987,9 @@ seven sink_4_2467(volatile A&&); int test4_2467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2467(a)) == 2> t1; sa<sizeof(sink_4_2467(ca)) == 2> t2; sa<sizeof(sink_4_2467(va)) == 4> t3; @@ -1007,9 +1007,9 @@ eight sink_4_2468(const volatile A&&); int test4_2468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2468(a)) == 2> t1; sa<sizeof(sink_4_2468(ca)) == 2> t2; sa<sizeof(sink_4_2468(va)) == 4> t3; @@ -1029,9 +1029,9 @@ eight sink_4_2478(const volatile A&&); int test4_2478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2478(a)) == 2> t1; sa<sizeof(sink_4_2478(ca)) == 2> t2; sa<sizeof(sink_4_2478(va)) == 4> t3; @@ -1051,9 +1051,9 @@ seven sink_4_2567(volatile A&&); int test4_2567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2567(a)) == 2> t1; sa<sizeof(sink_4_2567(ca)) == 2> t2; sa<sizeof(sink_4_2567(source())) == 5> t5; @@ -1070,9 +1070,9 @@ eight sink_4_2568(const volatile A&&); int test4_2568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2568(a)) == 2> t1; sa<sizeof(sink_4_2568(ca)) == 2> t2; sa<sizeof(sink_4_2568(source())) == 5> t5; @@ -1090,9 +1090,9 @@ eight sink_4_2578(const volatile A&&); int test4_2578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2578(a)) == 2> t1; sa<sizeof(sink_4_2578(ca)) == 2> t2; sa<sizeof(sink_4_2578(source())) == 5> t5; @@ -1110,9 +1110,9 @@ eight sink_4_2678(const volatile A&&); int test4_2678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_2678(a)) == 2> t1; sa<sizeof(sink_4_2678(ca)) == 2> t2; sa<sizeof(sink_4_2678(c_source())) == 6> t6; @@ -1129,9 +1129,9 @@ six sink_4_3456(const A&&); int test4_3456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3456(a)) == 3> t1; sa<sizeof(sink_4_3456(ca)) == 4> t2; sa<sizeof(sink_4_3456(va)) == 3> t3; @@ -1149,9 +1149,9 @@ seven sink_4_3457(volatile A&&); int test4_3457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3457(a)) == 3> t1; sa<sizeof(sink_4_3457(ca)) == 4> t2; sa<sizeof(sink_4_3457(va)) == 3> t3; @@ -1169,9 +1169,9 @@ eight sink_4_3458(const volatile A&&); int test4_3458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3458(a)) == 3> t1; sa<sizeof(sink_4_3458(ca)) == 4> t2; sa<sizeof(sink_4_3458(va)) == 3> t3; @@ -1191,9 +1191,9 @@ seven sink_4_3467(volatile A&&); int test4_3467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3467(a)) == 3> t1; sa<sizeof(sink_4_3467(ca)) == 4> t2; sa<sizeof(sink_4_3467(va)) == 3> t3; @@ -1211,9 +1211,9 @@ eight sink_4_3468(const volatile A&&); int test4_3468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3468(a)) == 3> t1; sa<sizeof(sink_4_3468(ca)) == 4> t2; sa<sizeof(sink_4_3468(va)) == 3> t3; @@ -1233,9 +1233,9 @@ eight sink_4_3478(const volatile A&&); int test4_3478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3478(a)) == 3> t1; sa<sizeof(sink_4_3478(ca)) == 4> t2; sa<sizeof(sink_4_3478(va)) == 3> t3; @@ -1255,9 +1255,9 @@ seven sink_4_3567(volatile A&&); int test4_3567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3567(a)) == 3> t1; sa<sizeof(sink_4_3567(va)) == 3> t3; sa<sizeof(sink_4_3567(source())) == 5> t5; @@ -1274,9 +1274,9 @@ eight sink_4_3568(const volatile A&&); int test4_3568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3568(a)) == 3> t1; sa<sizeof(sink_4_3568(va)) == 3> t3; sa<sizeof(sink_4_3568(source())) == 5> t5; @@ -1294,9 +1294,9 @@ eight sink_4_3578(const volatile A&&); int test4_3578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3578(a)) == 3> t1; sa<sizeof(sink_4_3578(va)) == 3> t3; sa<sizeof(sink_4_3578(source())) == 5> t5; @@ -1314,9 +1314,9 @@ eight sink_4_3678(const volatile A&&); int test4_3678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_3678(a)) == 3> t1; sa<sizeof(sink_4_3678(va)) == 3> t3; sa<sizeof(sink_4_3678(c_source())) == 6> t6; @@ -1333,9 +1333,9 @@ seven sink_4_4567(volatile A&&); int test4_4567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_4567(a)) == 4> t1; sa<sizeof(sink_4_4567(ca)) == 4> t2; sa<sizeof(sink_4_4567(va)) == 4> t3; @@ -1354,9 +1354,9 @@ eight sink_4_4568(const volatile A&&); int test4_4568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_4568(a)) == 4> t1; sa<sizeof(sink_4_4568(ca)) == 4> t2; sa<sizeof(sink_4_4568(va)) == 4> t3; @@ -1376,9 +1376,9 @@ eight sink_4_4578(const volatile A&&); int test4_4578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_4578(a)) == 4> t1; sa<sizeof(sink_4_4578(ca)) == 4> t2; sa<sizeof(sink_4_4578(va)) == 4> t3; @@ -1398,9 +1398,9 @@ eight sink_4_4678(const volatile A&&); int test4_4678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_4678(a)) == 4> t1; sa<sizeof(sink_4_4678(ca)) == 4> t2; sa<sizeof(sink_4_4678(va)) == 4> t3; @@ -1419,9 +1419,9 @@ eight sink_4_5678(const volatile A&&); int test4_5678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_4_5678(source())) == 5> t5; sa<sizeof(sink_4_5678(c_source())) == 6> t6; sa<sizeof(sink_4_5678(v_source())) == 7> t7; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv5n.C b/gcc/testsuite/g++.dg/cpp0x/rv5n.C index c31a30b2d6f..92ec1d925e1 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv5n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv5n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -39,9 +39,9 @@ five sink_5_12345( A&&); // { dg-message "note" } int test5_12345() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12345(v_source()); // { dg-error "no match" } sink_5_12345(cv_source()); // { dg-error "no match" } return 0; @@ -56,9 +56,9 @@ six sink_5_12346(const A&&); // { dg-message "note" } int test5_12346() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12346(v_source()); // { dg-error "no match" } sink_5_12346(cv_source()); // { dg-error "no match" } return 0; @@ -73,9 +73,9 @@ seven sink_5_12347(volatile A&&); // { dg-message "note" } int test5_12347() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12347(cv_source()); // { dg-error "no match" } return 0; } @@ -89,9 +89,9 @@ six sink_5_12356(const A&&); // { dg-message "note" } int test5_12356() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12356(cva); // { dg-error "no match" } sink_5_12356(v_source()); // { dg-error "no match" } sink_5_12356(cv_source()); // { dg-error "no match" } @@ -107,9 +107,9 @@ seven sink_5_12357(volatile A&&); // { dg-message "note" } int test5_12357() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12357(cva); // { dg-error "no match" } sink_5_12357(cv_source()); // { dg-error "no match" } return 0; @@ -124,9 +124,9 @@ eight sink_5_12358(const volatile A&&); // { dg-message "" } int test5_12358() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12358(cva); // { dg-error "lvalue" } return 0; } @@ -140,9 +140,9 @@ seven sink_5_12367(volatile A&&); // { dg-message "note" } int test5_12367() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12367(cva); // { dg-error "no match" } sink_5_12367(source()); // { dg-error "ambiguous" } sink_5_12367(cv_source()); // { dg-error "no match" } @@ -158,9 +158,9 @@ eight sink_5_12368(const volatile A&&); // { dg-message "" } int test5_12368() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12368(cva); // { dg-error "lvalue" } return 0; } @@ -174,9 +174,9 @@ eight sink_5_12378(const volatile A&&); // { dg-message "" } int test5_12378() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12378(cva); // { dg-error "lvalue" } return 0; } @@ -190,9 +190,9 @@ six sink_5_12456(const A&&); // { dg-message "note" } int test5_12456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12456(v_source()); // { dg-error "no match" } sink_5_12456(cv_source()); // { dg-error "no match" } return 0; @@ -207,9 +207,9 @@ seven sink_5_12457(volatile A&&); // { dg-message "note" } int test5_12457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12457(cv_source()); // { dg-error "no match" } return 0; } @@ -223,9 +223,9 @@ seven sink_5_12467(volatile A&&); // { dg-message "note" } int test5_12467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12467(source()); // { dg-error "ambiguous" } sink_5_12467(cv_source()); // { dg-error "no match" } return 0; @@ -240,9 +240,9 @@ seven sink_5_12567(volatile A&&); // { dg-message "" } int test5_12567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12567(va); // { dg-error "lvalue" } sink_5_12567(cva); // { dg-error "no match" } sink_5_12567(cv_source()); // { dg-error "no match" } @@ -258,9 +258,9 @@ eight sink_5_12568(const volatile A&&); // { dg-message "" } int test5_12568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12568(va); // { dg-error "lvalue" } sink_5_12568(cva); // { dg-error "lvalue" } return 0; @@ -275,9 +275,9 @@ eight sink_5_12578(const volatile A&&); // { dg-message "" } int test5_12578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12578(va); // { dg-error "lvalue" } sink_5_12578(cva); // { dg-error "lvalue" } return 0; @@ -292,9 +292,9 @@ eight sink_5_12678(const volatile A&&); // { dg-message "" } int test5_12678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_12678(va); // { dg-error "lvalue" } sink_5_12678(cva); // { dg-error "lvalue" } sink_5_12678(source()); // { dg-error "ambiguous" } @@ -310,9 +310,9 @@ six sink_5_13456(const A&&); // { dg-message "note" } int test5_13456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13456(v_source()); // { dg-error "no match" } sink_5_13456(cv_source()); // { dg-error "no match" } return 0; @@ -327,9 +327,9 @@ seven sink_5_13457(volatile A&&); // { dg-message "note" } int test5_13457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13457(c_source()); // { dg-error "no match" } sink_5_13457(cv_source()); // { dg-error "no match" } return 0; @@ -344,9 +344,9 @@ seven sink_5_13467(volatile A&&); // { dg-message "note" } int test5_13467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13467(source()); // { dg-error "ambiguous" } sink_5_13467(cv_source()); // { dg-error "no match" } return 0; @@ -361,9 +361,9 @@ seven sink_5_13567(volatile A&&); // { dg-message "note" } int test5_13567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13567(ca); // { dg-error "lvalue" } sink_5_13567(cva); // { dg-error "no match" } sink_5_13567(cv_source()); // { dg-error "no match" } @@ -379,9 +379,9 @@ eight sink_5_13568(const volatile A&&); // { dg-message "" } int test5_13568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13568(ca); // { dg-error "lvalue" } sink_5_13568(cva); // { dg-error "lvalue" } return 0; @@ -396,9 +396,9 @@ eight sink_5_13578(const volatile A&&); // { dg-message "" } int test5_13578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13578(ca); // { dg-error "lvalue" } sink_5_13578(cva); // { dg-error "lvalue" } return 0; @@ -413,9 +413,9 @@ eight sink_5_13678(const volatile A&&); // { dg-message "" } int test5_13678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_13678(ca); // { dg-error "lvalue" } sink_5_13678(cva); // { dg-error "lvalue" } sink_5_13678(source()); // { dg-error "ambiguous" } @@ -431,9 +431,9 @@ seven sink_5_14567(volatile A&&); // { dg-message "note" } int test5_14567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_14567(cv_source()); // { dg-error "no match" } return 0; } @@ -447,9 +447,9 @@ eight sink_5_14678(const volatile A&&); // { dg-message "note" } int test5_14678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_14678(source()); // { dg-error "ambiguous" } return 0; } @@ -463,9 +463,9 @@ eight sink_5_15678(const volatile A&&); // { dg-message "" } int test5_15678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_15678(ca); // { dg-error "lvalue" } sink_5_15678(va); // { dg-error "lvalue" } sink_5_15678(cva); // { dg-error "lvalue" } @@ -481,9 +481,9 @@ six sink_5_23456(const A&&); // { dg-message "note" } int test5_23456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23456(a); // { dg-error "ambiguous" } sink_5_23456(v_source()); // { dg-error "no match" } sink_5_23456(cv_source()); // { dg-error "no match" } @@ -499,9 +499,9 @@ seven sink_5_23457(volatile A&&); // { dg-message "note" } int test5_23457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23457(a); // { dg-error "ambiguous" } sink_5_23457(cv_source()); // { dg-error "no match" } return 0; @@ -516,9 +516,9 @@ eight sink_5_23458(const volatile A&&); // { dg-message "note" } int test5_23458() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23458(a); // { dg-error "ambiguous" } return 0; } @@ -532,9 +532,9 @@ seven sink_5_23467(volatile A&&); // { dg-message "note" } int test5_23467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23467(a); // { dg-error "ambiguous" } sink_5_23467(source()); // { dg-error "ambiguous" } sink_5_23467(cv_source()); // { dg-error "no match" } @@ -550,9 +550,9 @@ eight sink_5_23468(const volatile A&&); // { dg-message "note" } int test5_23468() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23468(a); // { dg-error "ambiguous" } return 0; } @@ -566,9 +566,9 @@ eight sink_5_23478(const volatile A&&); // { dg-message "note" } int test5_23478() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23478(a); // { dg-error "ambiguous" } return 0; } @@ -582,9 +582,9 @@ seven sink_5_23567(volatile A&&); // { dg-message "note" } int test5_23567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23567(a); // { dg-error "ambiguous" } sink_5_23567(cva); // { dg-error "no match" } sink_5_23567(cv_source()); // { dg-error "no match" } @@ -600,9 +600,9 @@ eight sink_5_23568(const volatile A&&); // { dg-message "" } int test5_23568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23568(cva); // { dg-error "lvalue" } sink_5_23568(a); // { dg-error "ambiguous" } return 0; @@ -617,9 +617,9 @@ eight sink_5_23578(const volatile A&&); // { dg-message "" } int test5_23578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23578(cva); // { dg-error "lvalue" } sink_5_23578(a); // { dg-error "ambiguous" } return 0; @@ -634,9 +634,9 @@ eight sink_5_23678(const volatile A&&); // { dg-message "" } int test5_23678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_23678(a); // { dg-error "ambiguous" } sink_5_23678(cva); // { dg-error "lvalue" } sink_5_23678(source()); // { dg-error "ambiguous" } @@ -652,9 +652,9 @@ seven sink_5_24567(volatile A&&); // { dg-message "note" } int test5_24567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_24567(cv_source()); // { dg-error "no match" } return 0; } @@ -668,9 +668,9 @@ eight sink_5_24678(const volatile A&&); // { dg-message "note" } int test5_24678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_24678(source()); // { dg-error "ambiguous" } return 0; } @@ -684,9 +684,9 @@ eight sink_5_25678(const volatile A&&); // { dg-message "" } int test5_25678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_25678(va); // { dg-error "lvalue" } sink_5_25678(cva); // { dg-error "lvalue" } return 0; @@ -701,9 +701,9 @@ seven sink_5_34567(volatile A&&); // { dg-message "note" } int test5_34567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_34567(cv_source()); // { dg-error "no match" } return 0; } @@ -717,9 +717,9 @@ eight sink_5_34678(const volatile A&&); // { dg-message "note" } int test5_34678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_34678(source()); // { dg-error "ambiguous" } return 0; } @@ -733,9 +733,9 @@ eight sink_5_35678(const volatile A&&); // { dg-message "" } int test5_35678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_5_35678(ca); // { dg-error "lvalue" } sink_5_35678(cva); // { dg-error "lvalue" } return 0; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv5p.C b/gcc/testsuite/g++.dg/cpp0x/rv5p.C index 7555867f709..cd12028fc93 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv5p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv5p.C @@ -39,9 +39,9 @@ five sink_5_12345( A&&); int test5_12345() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12345(a)) == 1> t1; sa<sizeof(sink_5_12345(ca)) == 2> t2; sa<sizeof(sink_5_12345(va)) == 3> t3; @@ -60,9 +60,9 @@ six sink_5_12346(const A&&); int test5_12346() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12346(a)) == 1> t1; sa<sizeof(sink_5_12346(ca)) == 2> t2; sa<sizeof(sink_5_12346(va)) == 3> t3; @@ -81,9 +81,9 @@ seven sink_5_12347(volatile A&&); int test5_12347() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12347(a)) == 1> t1; sa<sizeof(sink_5_12347(ca)) == 2> t2; sa<sizeof(sink_5_12347(va)) == 3> t3; @@ -103,9 +103,9 @@ eight sink_5_12348(const volatile A&&); int test5_12348() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12348(a)) == 1> t1; sa<sizeof(sink_5_12348(ca)) == 2> t2; sa<sizeof(sink_5_12348(va)) == 3> t3; @@ -126,9 +126,9 @@ six sink_5_12356(const A&&); int test5_12356() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12356(a)) == 1> t1; sa<sizeof(sink_5_12356(ca)) == 2> t2; sa<sizeof(sink_5_12356(va)) == 3> t3; @@ -146,9 +146,9 @@ seven sink_5_12357(volatile A&&); int test5_12357() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12357(a)) == 1> t1; sa<sizeof(sink_5_12357(ca)) == 2> t2; sa<sizeof(sink_5_12357(va)) == 3> t3; @@ -167,9 +167,9 @@ eight sink_5_12358(const volatile A&&); int test5_12358() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12358(a)) == 1> t1; sa<sizeof(sink_5_12358(ca)) == 2> t2; sa<sizeof(sink_5_12358(va)) == 3> t3; @@ -189,9 +189,9 @@ seven sink_5_12367(volatile A&&); int test5_12367() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12367(a)) == 1> t1; sa<sizeof(sink_5_12367(ca)) == 2> t2; sa<sizeof(sink_5_12367(va)) == 3> t3; @@ -209,9 +209,9 @@ eight sink_5_12368(const volatile A&&); int test5_12368() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12368(a)) == 1> t1; sa<sizeof(sink_5_12368(ca)) == 2> t2; sa<sizeof(sink_5_12368(va)) == 3> t3; @@ -231,9 +231,9 @@ eight sink_5_12378(const volatile A&&); int test5_12378() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12378(a)) == 1> t1; sa<sizeof(sink_5_12378(ca)) == 2> t2; sa<sizeof(sink_5_12378(va)) == 3> t3; @@ -253,9 +253,9 @@ six sink_5_12456(const A&&); int test5_12456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12456(a)) == 1> t1; sa<sizeof(sink_5_12456(ca)) == 2> t2; sa<sizeof(sink_5_12456(va)) == 4> t3; @@ -274,9 +274,9 @@ seven sink_5_12457(volatile A&&); int test5_12457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12457(a)) == 1> t1; sa<sizeof(sink_5_12457(ca)) == 2> t2; sa<sizeof(sink_5_12457(va)) == 4> t3; @@ -296,9 +296,9 @@ eight sink_5_12458(const volatile A&&); int test5_12458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12458(a)) == 1> t1; sa<sizeof(sink_5_12458(ca)) == 2> t2; sa<sizeof(sink_5_12458(va)) == 4> t3; @@ -319,9 +319,9 @@ seven sink_5_12467(volatile A&&); int test5_12467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12467(a)) == 1> t1; sa<sizeof(sink_5_12467(ca)) == 2> t2; sa<sizeof(sink_5_12467(va)) == 4> t3; @@ -340,9 +340,9 @@ eight sink_5_12468(const volatile A&&); int test5_12468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12468(a)) == 1> t1; sa<sizeof(sink_5_12468(ca)) == 2> t2; sa<sizeof(sink_5_12468(va)) == 4> t3; @@ -363,9 +363,9 @@ eight sink_5_12478(const volatile A&&); int test5_12478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12478(a)) == 1> t1; sa<sizeof(sink_5_12478(ca)) == 2> t2; sa<sizeof(sink_5_12478(va)) == 4> t3; @@ -386,9 +386,9 @@ seven sink_5_12567(volatile A&&); int test5_12567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12567(a)) == 1> t1; sa<sizeof(sink_5_12567(ca)) == 2> t2; sa<sizeof(sink_5_12567(source())) == 5> t5; @@ -406,9 +406,9 @@ eight sink_5_12568(const volatile A&&); int test5_12568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12568(a)) == 1> t1; sa<sizeof(sink_5_12568(ca)) == 2> t2; sa<sizeof(sink_5_12568(source())) == 5> t5; @@ -427,9 +427,9 @@ eight sink_5_12578(const volatile A&&); int test5_12578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12578(a)) == 1> t1; sa<sizeof(sink_5_12578(ca)) == 2> t2; sa<sizeof(sink_5_12578(source())) == 5> t5; @@ -448,9 +448,9 @@ eight sink_5_12678(const volatile A&&); int test5_12678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_12678(a)) == 1> t1; sa<sizeof(sink_5_12678(ca)) == 2> t2; sa<sizeof(sink_5_12678(c_source())) == 6> t6; @@ -468,9 +468,9 @@ six sink_5_13456(const A&&); int test5_13456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13456(a)) == 1> t1; sa<sizeof(sink_5_13456(ca)) == 4> t2; sa<sizeof(sink_5_13456(va)) == 3> t3; @@ -489,9 +489,9 @@ seven sink_5_13457(volatile A&&); int test5_13457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13457(a)) == 1> t1; sa<sizeof(sink_5_13457(ca)) == 4> t2; sa<sizeof(sink_5_13457(va)) == 3> t3; @@ -510,9 +510,9 @@ eight sink_5_13458(const volatile A&&); int test5_13458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13458(a)) == 1> t1; sa<sizeof(sink_5_13458(ca)) == 4> t2; sa<sizeof(sink_5_13458(va)) == 3> t3; @@ -533,9 +533,9 @@ seven sink_5_13467(volatile A&&); int test5_13467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13467(a)) == 1> t1; sa<sizeof(sink_5_13467(ca)) == 4> t2; sa<sizeof(sink_5_13467(va)) == 3> t3; @@ -554,9 +554,9 @@ eight sink_5_13468(const volatile A&&); int test5_13468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13468(a)) == 1> t1; sa<sizeof(sink_5_13468(ca)) == 4> t2; sa<sizeof(sink_5_13468(va)) == 3> t3; @@ -577,9 +577,9 @@ eight sink_5_13478(const volatile A&&); int test5_13478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13478(a)) == 1> t1; sa<sizeof(sink_5_13478(ca)) == 4> t2; sa<sizeof(sink_5_13478(va)) == 3> t3; @@ -600,9 +600,9 @@ seven sink_5_13567(volatile A&&); int test5_13567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13567(a)) == 1> t1; sa<sizeof(sink_5_13567(va)) == 3> t3; sa<sizeof(sink_5_13567(source())) == 5> t5; @@ -620,9 +620,9 @@ eight sink_5_13568(const volatile A&&); int test5_13568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13568(a)) == 1> t1; sa<sizeof(sink_5_13568(va)) == 3> t3; sa<sizeof(sink_5_13568(source())) == 5> t5; @@ -641,9 +641,9 @@ eight sink_5_13578(const volatile A&&); int test5_13578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13578(a)) == 1> t1; sa<sizeof(sink_5_13578(va)) == 3> t3; sa<sizeof(sink_5_13578(source())) == 5> t5; @@ -662,9 +662,9 @@ eight sink_5_13678(const volatile A&&); int test5_13678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_13678(a)) == 1> t1; sa<sizeof(sink_5_13678(va)) == 3> t3; sa<sizeof(sink_5_13678(c_source())) == 6> t6; @@ -682,9 +682,9 @@ seven sink_5_14567(volatile A&&); int test5_14567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_14567(a)) == 1> t1; sa<sizeof(sink_5_14567(ca)) == 4> t2; sa<sizeof(sink_5_14567(va)) == 4> t3; @@ -704,9 +704,9 @@ eight sink_5_14568(const volatile A&&); int test5_14568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_14568(a)) == 1> t1; sa<sizeof(sink_5_14568(ca)) == 4> t2; sa<sizeof(sink_5_14568(va)) == 4> t3; @@ -727,9 +727,9 @@ eight sink_5_14578(const volatile A&&); int test5_14578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_14578(a)) == 1> t1; sa<sizeof(sink_5_14578(ca)) == 4> t2; sa<sizeof(sink_5_14578(va)) == 4> t3; @@ -750,9 +750,9 @@ eight sink_5_14678(const volatile A&&); int test5_14678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_14678(a)) == 1> t1; sa<sizeof(sink_5_14678(ca)) == 4> t2; sa<sizeof(sink_5_14678(va)) == 4> t3; @@ -772,9 +772,9 @@ eight sink_5_15678(const volatile A&&); int test5_15678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_15678(a)) == 1> t1; sa<sizeof(sink_5_15678(source())) == 5> t5; sa<sizeof(sink_5_15678(c_source())) == 6> t6; @@ -792,9 +792,9 @@ six sink_5_23456(const A&&); int test5_23456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23456(ca)) == 2> t2; sa<sizeof(sink_5_23456(va)) == 3> t3; sa<sizeof(sink_5_23456(cva)) == 4> t4; @@ -812,9 +812,9 @@ seven sink_5_23457(volatile A&&); int test5_23457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23457(ca)) == 2> t2; sa<sizeof(sink_5_23457(va)) == 3> t3; sa<sizeof(sink_5_23457(cva)) == 4> t4; @@ -833,9 +833,9 @@ eight sink_5_23458(const volatile A&&); int test5_23458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23458(ca)) == 2> t2; sa<sizeof(sink_5_23458(va)) == 3> t3; sa<sizeof(sink_5_23458(cva)) == 4> t4; @@ -855,9 +855,9 @@ seven sink_5_23467(volatile A&&); int test5_23467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23467(ca)) == 2> t2; sa<sizeof(sink_5_23467(va)) == 3> t3; sa<sizeof(sink_5_23467(cva)) == 4> t4; @@ -875,9 +875,9 @@ eight sink_5_23468(const volatile A&&); int test5_23468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23468(ca)) == 2> t2; sa<sizeof(sink_5_23468(va)) == 3> t3; sa<sizeof(sink_5_23468(cva)) == 4> t4; @@ -897,9 +897,9 @@ eight sink_5_23478(const volatile A&&); int test5_23478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23478(ca)) == 2> t2; sa<sizeof(sink_5_23478(va)) == 3> t3; sa<sizeof(sink_5_23478(cva)) == 4> t4; @@ -919,9 +919,9 @@ seven sink_5_23567(volatile A&&); int test5_23567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23567(ca)) == 2> t2; sa<sizeof(sink_5_23567(va)) == 3> t3; sa<sizeof(sink_5_23567(source())) == 5> t5; @@ -939,9 +939,9 @@ eight sink_5_23568(const volatile A&&); int test5_23568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23568(ca)) == 2> t2; sa<sizeof(sink_5_23568(va)) == 3> t3; sa<sizeof(sink_5_23568(source())) == 5> t5; @@ -960,9 +960,9 @@ eight sink_5_23578(const volatile A&&); int test5_23578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23578(ca)) == 2> t2; sa<sizeof(sink_5_23578(va)) == 3> t3; sa<sizeof(sink_5_23578(source())) == 5> t5; @@ -981,9 +981,9 @@ eight sink_5_23678(const volatile A&&); int test5_23678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_23678(ca)) == 2> t2; sa<sizeof(sink_5_23678(va)) == 3> t3; sa<sizeof(sink_5_23678(c_source())) == 6> t6; @@ -1001,9 +1001,9 @@ seven sink_5_24567(volatile A&&); int test5_24567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_24567(a)) == 2> t1; sa<sizeof(sink_5_24567(ca)) == 2> t2; sa<sizeof(sink_5_24567(va)) == 4> t3; @@ -1023,9 +1023,9 @@ eight sink_5_24568(const volatile A&&); int test5_24568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_24568(a)) == 2> t1; sa<sizeof(sink_5_24568(ca)) == 2> t2; sa<sizeof(sink_5_24568(va)) == 4> t3; @@ -1046,9 +1046,9 @@ eight sink_5_24578(const volatile A&&); int test5_24578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_24578(a)) == 2> t1; sa<sizeof(sink_5_24578(ca)) == 2> t2; sa<sizeof(sink_5_24578(va)) == 4> t3; @@ -1069,9 +1069,9 @@ eight sink_5_24678(const volatile A&&); int test5_24678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_24678(a)) == 2> t1; sa<sizeof(sink_5_24678(ca)) == 2> t2; sa<sizeof(sink_5_24678(va)) == 4> t3; @@ -1091,9 +1091,9 @@ eight sink_5_25678(const volatile A&&); int test5_25678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_25678(a)) == 2> t1; sa<sizeof(sink_5_25678(ca)) == 2> t2; sa<sizeof(sink_5_25678(source())) == 5> t5; @@ -1112,9 +1112,9 @@ seven sink_5_34567(volatile A&&); int test5_34567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_34567(a)) == 3> t1; sa<sizeof(sink_5_34567(ca)) == 4> t2; sa<sizeof(sink_5_34567(va)) == 3> t3; @@ -1134,9 +1134,9 @@ eight sink_5_34568(const volatile A&&); int test5_34568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_34568(a)) == 3> t1; sa<sizeof(sink_5_34568(ca)) == 4> t2; sa<sizeof(sink_5_34568(va)) == 3> t3; @@ -1157,9 +1157,9 @@ eight sink_5_34578(const volatile A&&); int test5_34578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_34578(a)) == 3> t1; sa<sizeof(sink_5_34578(ca)) == 4> t2; sa<sizeof(sink_5_34578(va)) == 3> t3; @@ -1180,9 +1180,9 @@ eight sink_5_34678(const volatile A&&); int test5_34678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_34678(a)) == 3> t1; sa<sizeof(sink_5_34678(ca)) == 4> t2; sa<sizeof(sink_5_34678(va)) == 3> t3; @@ -1202,9 +1202,9 @@ eight sink_5_35678(const volatile A&&); int test5_35678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_35678(a)) == 3> t1; sa<sizeof(sink_5_35678(va)) == 3> t3; sa<sizeof(sink_5_35678(source())) == 5> t5; @@ -1223,9 +1223,9 @@ eight sink_5_45678(const volatile A&&); int test5_45678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_5_45678(a)) == 4> t1; sa<sizeof(sink_5_45678(ca)) == 4> t2; sa<sizeof(sink_5_45678(va)) == 4> t3; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv6n.C b/gcc/testsuite/g++.dg/cpp0x/rv6n.C index 2a2520c7599..6a81f66fa5c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv6n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv6n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -40,9 +40,9 @@ six sink_6_123456(const A&&); // { dg-message "note" } int test6_123456() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123456(v_source()); // { dg-error "no match" } sink_6_123456(cv_source()); // { dg-error "no match" } return 0; @@ -58,9 +58,9 @@ seven sink_6_123457(volatile A&&); // { dg-message "note" } int test6_123457() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123457(cv_source()); // { dg-error "no match" } return 0; } @@ -75,9 +75,9 @@ eight sink_6_235678(const volatile A&&); // { dg-message "" } int test6_235678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_235678(a); // { dg-error "ambiguous" } sink_6_235678(cva); // { dg-error "lvalue" } return 0; @@ -93,9 +93,9 @@ eight sink_6_234678(const volatile A&&); // { dg-message "note" } int test6_234678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_234678(a); // { dg-error "ambiguous" } sink_6_234678(source()); // { dg-error "ambiguous" } return 0; @@ -111,9 +111,9 @@ eight sink_6_234578(const volatile A&&); // { dg-message "note" } int test6_234578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_234578(a); // { dg-error "ambiguous" } return 0; } @@ -128,9 +128,9 @@ eight sink_6_234568(const volatile A&&); // { dg-message "note" } int test6_234568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_234568(a); // { dg-error "ambiguous" } return 0; } @@ -145,9 +145,9 @@ seven sink_6_234567(volatile A&&); // { dg-message "note" } int test6_234567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_234567(a); // { dg-error "ambiguous" } sink_6_234567(cv_source()); // { dg-error "no match" } return 0; @@ -163,9 +163,9 @@ eight sink_6_134678(const volatile A&&); // { dg-message "note" } int test6_134678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_134678(source()); // { dg-error "ambiguous" } return 0; } @@ -180,9 +180,9 @@ eight sink_6_124678(const volatile A&&); // { dg-message "note" } int test6_124678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_124678(source()); // { dg-error "ambiguous" } return 0; } @@ -197,9 +197,9 @@ eight sink_6_123678(const volatile A&&); // { dg-message "" } int test6_123678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123678(cva); // { dg-error "lvalue" } sink_6_123678(source()); // { dg-error "ambiguous" } return 0; @@ -215,9 +215,9 @@ seven sink_6_123567(volatile A&&); // { dg-message "note" } int test6_123567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123567(cva); // { dg-error "no match" } sink_6_123567(cv_source()); // { dg-error "no match" } return 0; @@ -233,9 +233,9 @@ eight sink_6_123568(const volatile A&&); // { dg-message "" } int test6_123568() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123568(cva); // { dg-error "lvalue" } return 0; } @@ -250,9 +250,9 @@ eight sink_6_123578(const volatile A&&); // { dg-message "" } int test6_123578() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123578(cva); // { dg-error "lvalue" } return 0; } @@ -267,9 +267,9 @@ seven sink_6_123467(volatile A&&); // { dg-message "note" } int test6_123467() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_123467(source()); // { dg-error "ambiguous" } sink_6_123467(cv_source()); // { dg-error "no match" } return 0; @@ -285,9 +285,9 @@ seven sink_6_124567(volatile A&&); // { dg-message "note" } int test6_124567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_124567(cv_source()); // { dg-error "no match" } return 0; } @@ -302,9 +302,9 @@ eight sink_6_125678(const volatile A&&); // { dg-message "" } int test6_125678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_125678(va); // { dg-error "lvalue" } sink_6_125678(cva); // { dg-error "lvalue" } return 0; @@ -320,9 +320,9 @@ seven sink_6_134567(volatile A&&); // { dg-message "note" } int test6_134567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_134567(cv_source()); // { dg-error "no match" } return 0; } @@ -337,9 +337,9 @@ eight sink_6_135678(const volatile A&&); // { dg-message "" } int test6_135678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_6_135678(ca); // { dg-error "lvalue" } sink_6_135678(cva); // { dg-error "lvalue" } return 0; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv6p.C b/gcc/testsuite/g++.dg/cpp0x/rv6p.C index 0e5352bf8b1..bb17d7929fe 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv6p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv6p.C @@ -40,9 +40,9 @@ six sink_6_123456(const A&&); int test6_123456() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123456(a)) == 1> t1; sa<sizeof(sink_6_123456(ca)) == 2> t2; sa<sizeof(sink_6_123456(va)) == 3> t3; @@ -62,9 +62,9 @@ seven sink_6_123457(volatile A&&); int test6_123457() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123457(a)) == 1> t1; sa<sizeof(sink_6_123457(ca)) == 2> t2; sa<sizeof(sink_6_123457(va)) == 3> t3; @@ -85,9 +85,9 @@ eight sink_6_123458(const volatile A&&); int test6_123458() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123458(a)) == 1> t1; sa<sizeof(sink_6_123458(ca)) == 2> t2; sa<sizeof(sink_6_123458(va)) == 3> t3; @@ -109,9 +109,9 @@ seven sink_6_123467(volatile A&&); int test6_123467() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123467(a)) == 1> t1; sa<sizeof(sink_6_123467(ca)) == 2> t2; sa<sizeof(sink_6_123467(va)) == 3> t3; @@ -131,9 +131,9 @@ eight sink_6_123468(const volatile A&&); int test6_123468() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123468(a)) == 1> t1; sa<sizeof(sink_6_123468(ca)) == 2> t2; sa<sizeof(sink_6_123468(va)) == 3> t3; @@ -155,9 +155,9 @@ eight sink_6_123478(const volatile A&&); int test6_123478() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123478(a)) == 1> t1; sa<sizeof(sink_6_123478(ca)) == 2> t2; sa<sizeof(sink_6_123478(va)) == 3> t3; @@ -179,9 +179,9 @@ seven sink_6_123567(volatile A&&); int test6_123567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123567(a)) == 1> t1; sa<sizeof(sink_6_123567(ca)) == 2> t2; sa<sizeof(sink_6_123567(va)) == 3> t3; @@ -201,9 +201,9 @@ eight sink_6_123568(const volatile A&&); int test6_123568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123568(a)) == 1> t1; sa<sizeof(sink_6_123568(ca)) == 2> t2; sa<sizeof(sink_6_123568(va)) == 3> t3; @@ -224,9 +224,9 @@ eight sink_6_123578(const volatile A&&); int test6_123578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123578(a)) == 1> t1; sa<sizeof(sink_6_123578(ca)) == 2> t2; sa<sizeof(sink_6_123578(va)) == 3> t3; @@ -247,9 +247,9 @@ eight sink_6_123678(const volatile A&&); int test6_123678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_123678(a)) == 1> t1; sa<sizeof(sink_6_123678(ca)) == 2> t2; sa<sizeof(sink_6_123678(va)) == 3> t3; @@ -269,9 +269,9 @@ seven sink_6_124567(volatile A&&); int test6_124567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_124567(a)) == 1> t1; sa<sizeof(sink_6_124567(ca)) == 2> t2; sa<sizeof(sink_6_124567(va)) == 4> t3; @@ -292,9 +292,9 @@ eight sink_6_124568(const volatile A&&); int test6_124568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_124568(a)) == 1> t1; sa<sizeof(sink_6_124568(ca)) == 2> t2; sa<sizeof(sink_6_124568(va)) == 4> t3; @@ -316,9 +316,9 @@ eight sink_6_124578(const volatile A&&); int test6_124578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_124578(a)) == 1> t1; sa<sizeof(sink_6_124578(ca)) == 2> t2; sa<sizeof(sink_6_124578(va)) == 4> t3; @@ -340,9 +340,9 @@ eight sink_6_124678(const volatile A&&); int test6_124678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_124678(a)) == 1> t1; sa<sizeof(sink_6_124678(ca)) == 2> t2; sa<sizeof(sink_6_124678(va)) == 4> t3; @@ -363,9 +363,9 @@ eight sink_6_125678(const volatile A&&); int test6_125678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_125678(a)) == 1> t1; sa<sizeof(sink_6_125678(ca)) == 2> t2; sa<sizeof(sink_6_125678(source())) == 5> t5; @@ -385,9 +385,9 @@ seven sink_6_134567(volatile A&&); int test6_134567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_134567(a)) == 1> t1; sa<sizeof(sink_6_134567(ca)) == 4> t2; sa<sizeof(sink_6_134567(va)) == 3> t3; @@ -408,9 +408,9 @@ eight sink_6_134568(const volatile A&&); int test6_134568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_134568(a)) == 1> t1; sa<sizeof(sink_6_134568(ca)) == 4> t2; sa<sizeof(sink_6_134568(va)) == 3> t3; @@ -432,9 +432,9 @@ eight sink_6_134578(const volatile A&&); int test6_134578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_134578(a)) == 1> t1; sa<sizeof(sink_6_134578(ca)) == 4> t2; sa<sizeof(sink_6_134578(va)) == 3> t3; @@ -456,9 +456,9 @@ eight sink_6_134678(const volatile A&&); int test6_134678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_134678(a)) == 1> t1; sa<sizeof(sink_6_134678(ca)) == 4> t2; sa<sizeof(sink_6_134678(va)) == 3> t3; @@ -479,9 +479,9 @@ eight sink_6_135678(const volatile A&&); int test6_135678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_135678(a)) == 1> t1; sa<sizeof(sink_6_135678(va)) == 3> t3; sa<sizeof(sink_6_135678(source())) == 5> t5; @@ -501,9 +501,9 @@ eight sink_6_145678(const volatile A&&); int test6_145678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_145678(a)) == 1> t1; sa<sizeof(sink_6_145678(ca)) == 4> t2; sa<sizeof(sink_6_145678(va)) == 4> t3; @@ -525,9 +525,9 @@ seven sink_6_234567(volatile A&&); int test6_234567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_234567(ca)) == 2> t2; sa<sizeof(sink_6_234567(va)) == 3> t3; sa<sizeof(sink_6_234567(cva)) == 4> t4; @@ -547,9 +547,9 @@ eight sink_6_234568(const volatile A&&); int test6_234568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_234568(ca)) == 2> t2; sa<sizeof(sink_6_234568(va)) == 3> t3; sa<sizeof(sink_6_234568(cva)) == 4> t4; @@ -570,9 +570,9 @@ eight sink_6_234578(const volatile A&&); int test6_234578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_234578(ca)) == 2> t2; sa<sizeof(sink_6_234578(va)) == 3> t3; sa<sizeof(sink_6_234578(cva)) == 4> t4; @@ -593,9 +593,9 @@ eight sink_6_234678(const volatile A&&); int test6_234678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_234678(ca)) == 2> t2; sa<sizeof(sink_6_234678(va)) == 3> t3; sa<sizeof(sink_6_234678(cva)) == 4> t4; @@ -615,9 +615,9 @@ eight sink_6_235678(const volatile A&&); int test6_235678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_235678(ca)) == 2> t2; sa<sizeof(sink_6_235678(va)) == 3> t3; sa<sizeof(sink_6_235678(source())) == 5> t5; @@ -637,9 +637,9 @@ eight sink_6_245678(const volatile A&&); int test6_245678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_245678(a)) == 2> t1; sa<sizeof(sink_6_245678(ca)) == 2> t2; sa<sizeof(sink_6_245678(va)) == 4> t3; @@ -661,9 +661,9 @@ eight sink_6_345678(const volatile A&&); int test6_345678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_6_345678(a)) == 3> t1; sa<sizeof(sink_6_345678(ca)) == 4> t2; sa<sizeof(sink_6_345678(va)) == 3> t3; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv7n.C b/gcc/testsuite/g++.dg/cpp0x/rv7n.C index 102730bc7f0..94254b5824b 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv7n.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv7n.C @@ -20,7 +20,7 @@ struct eight {char x[8];}; struct A { A(); - A(const volatile A&&); + A(const volatile A&&); // { dg-error "argument 1" } }; A source(); @@ -41,9 +41,9 @@ seven sink_7_1234567(volatile A&&); // { dg-message "note" } int test7_1234567() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_7_1234567(cv_source()); // { dg-error "no match" } return 0; } @@ -59,9 +59,9 @@ eight sink_7_1235678(const volatile A&&); // { dg-message "" } int test7_1235678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_7_1235678(cva); // { dg-error "lvalue" } return 0; } @@ -77,9 +77,9 @@ eight sink_7_2345678(const volatile A&&); // { dg-message "note" } int test7_2345678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_7_2345678(a); // { dg-error "ambiguous" } return 0; } @@ -95,9 +95,9 @@ eight sink_7_1234678(const volatile A&&); // { dg-message "note" } int test7_1234678() { A a; - const A ca = a; + const A ca = a; // { dg-error "lvalue" } volatile A va; - const volatile A cva = a; + const volatile A cva = a; // { dg-error "lvalue" } sink_7_1234678(source()); // { dg-error "ambiguous" } return 0; } diff --git a/gcc/testsuite/g++.dg/cpp0x/rv7p.C b/gcc/testsuite/g++.dg/cpp0x/rv7p.C index d25488f94f1..710f1cf048d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv7p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv7p.C @@ -41,9 +41,9 @@ seven sink_7_1234567(volatile A&&); int test7_1234567() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1234567(a)) == 1> t1; sa<sizeof(sink_7_1234567(ca)) == 2> t2; sa<sizeof(sink_7_1234567(va)) == 3> t3; @@ -65,9 +65,9 @@ eight sink_7_1234568(const volatile A&&); int test7_1234568() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1234568(a)) == 1> t1; sa<sizeof(sink_7_1234568(ca)) == 2> t2; sa<sizeof(sink_7_1234568(va)) == 3> t3; @@ -90,9 +90,9 @@ eight sink_7_1234578(const volatile A&&); int test7_1234578() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1234578(a)) == 1> t1; sa<sizeof(sink_7_1234578(ca)) == 2> t2; sa<sizeof(sink_7_1234578(va)) == 3> t3; @@ -115,9 +115,9 @@ eight sink_7_1234678(const volatile A&&); int test7_1234678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1234678(a)) == 1> t1; sa<sizeof(sink_7_1234678(ca)) == 2> t2; sa<sizeof(sink_7_1234678(va)) == 3> t3; @@ -139,9 +139,9 @@ eight sink_7_1235678(const volatile A&&); int test7_1235678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1235678(a)) == 1> t1; sa<sizeof(sink_7_1235678(ca)) == 2> t2; sa<sizeof(sink_7_1235678(va)) == 3> t3; @@ -163,9 +163,9 @@ eight sink_7_1245678(const volatile A&&); int test7_1245678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1245678(a)) == 1> t1; sa<sizeof(sink_7_1245678(ca)) == 2> t2; sa<sizeof(sink_7_1245678(va)) == 4> t3; @@ -188,9 +188,9 @@ eight sink_7_1345678(const volatile A&&); int test7_1345678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_1345678(a)) == 1> t1; sa<sizeof(sink_7_1345678(ca)) == 4> t2; sa<sizeof(sink_7_1345678(va)) == 3> t3; @@ -213,9 +213,9 @@ eight sink_7_2345678(const volatile A&&); int test7_2345678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_7_2345678(ca)) == 2> t2; sa<sizeof(sink_7_2345678(va)) == 3> t3; sa<sizeof(sink_7_2345678(cva)) == 4> t4; diff --git a/gcc/testsuite/g++.dg/cpp0x/rv8p.C b/gcc/testsuite/g++.dg/cpp0x/rv8p.C index cc7ff8a6ef3..8ee993854b8 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv8p.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv8p.C @@ -42,9 +42,9 @@ eight sink_8_12345678(const volatile A&&); int test8_12345678() { A a; - const A ca = a; + const A ca; volatile A va; - const volatile A cva = a; + const volatile A cva; sa<sizeof(sink_8_12345678(a)) == 1> t1; sa<sizeof(sink_8_12345678(ca)) == 2> t2; sa<sizeof(sink_8_12345678(va)) == 3> t3; diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C b/gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C new file mode 100644 index 00000000000..4992f41913f --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/accessibility1.C @@ -0,0 +1,24 @@ +// PR debug/44668 +// { dg-do compile } +// { dg-options "-g -dA" } + +struct C +{ +private: + typedef int a; + a b; + enum g { g1, g2 } h; + struct D { int i; } i; +protected: + typedef int c; + c d; +public: + typedef int e; + e f; +} c; + +// 3 private DW_TAG_member dies, 1 private DW_TAG_typedef, +// 1 private DW_TAG_enumeration_type and 1 private DW_TAG_structure_type +// { dg-final { scan-assembler-times "3\[^\\r\\n\]* DW_AT_accessibility" 6 } } +// 1 private DW_TAG_member die, 1 private DW_TAG_typedef +// { dg-final { scan-assembler-times "2\[^\\r\\n\]* DW_AT_accessibility" 2 } } diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C b/gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C new file mode 100644 index 00000000000..c5520fa72b0 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/dwarf4-typedef.C @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-gdwarf-4" } */ + +/* Regression test for an ICE in output_die when using -gdwarf-4. */ + +namespace { + +struct A { + virtual ~A(); +}; + +struct B : public A { + template <typename A> + bool foo(A x[2]) { } +}; + +template <typename T> +struct C { + T v[2]; +}; + +template <typename T> +bool X(T &b) { + typedef C<int> D; + D x[2]; + return b.foo(x); +} + +void f() { + B b; + X<B>(b); +} + +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/typedef3.C b/gcc/testsuite/g++.dg/debug/dwarf2/typedef3.C new file mode 100644 index 00000000000..ca70d9cacfa --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/typedef3.C @@ -0,0 +1,19 @@ +// Origin: PR debug/44188 +// { dg-options "-g -dA" } +// { dg-do compile } + +// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_typedef\\)" 1 } } + +// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)" 1 } } + +typedef struct +{ + int i; +} AAA; + +int +main(void) +{ + AAA aa; + return 0; +} diff --git a/gcc/testsuite/g++.dg/diagnostic/method1.C b/gcc/testsuite/g++.dg/diagnostic/method1.C new file mode 100644 index 00000000000..8e1225d0722 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/method1.C @@ -0,0 +1,20 @@ +// PR c++/44627 +// { dg-do compile } + +struct A +{ + A *foo (); +}; + +template <class T> +void +bar () +{ + A::foo ().anything; // { dg-error "request for member" } +} + +void +baz () +{ + bar <int> (); +} diff --git a/gcc/testsuite/g++.dg/diagnostic/parm1.C b/gcc/testsuite/g++.dg/diagnostic/parm1.C new file mode 100644 index 00000000000..2e553e2d4c5 --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/parm1.C @@ -0,0 +1,11 @@ +// PR c++/44366 +// While printing the operand of sizeof We were trying to print f as the +// scope of t, causing infinite recursion. + +template <typename T> +void f(T t, int(*)[sizeof(t)]) +{ + struct A { void g() { + foo; // { dg-error "foo" } + } }; +} diff --git a/gcc/testsuite/g++.dg/eh/new1.C b/gcc/testsuite/g++.dg/eh/new1.C index 4c5c684b5f2..0f86fccdc93 100644 --- a/gcc/testsuite/g++.dg/eh/new1.C +++ b/gcc/testsuite/g++.dg/eh/new1.C @@ -9,7 +9,7 @@ int ret = 1; void *ptr; -void * operator new[] (size_t s) throw (std::bad_alloc) +void * operator new[] (std::size_t s) throw (std::bad_alloc) { ptr = operator new (s); return ptr; diff --git a/gcc/testsuite/g++.dg/eh/spec8.C b/gcc/testsuite/g++.dg/eh/spec8.C index 7a35e6e8072..72dadff2257 100644 --- a/gcc/testsuite/g++.dg/eh/spec8.C +++ b/gcc/testsuite/g++.dg/eh/spec8.C @@ -3,9 +3,9 @@ struct exception {}; template <typename T> void foo() throw(exception); // { dg-error "declaration" } -template <typename T> void foo(); // { dg-error "exceptions" } +template <typename T> void foo(); // { dg-error "exception" } struct bar { - template <typename T> friend void foo(); // { dg-error "exceptions" } + template <typename T> friend void foo(); // { dg-error "exception" } }; diff --git a/gcc/testsuite/g++.dg/expr/cond8.C b/gcc/testsuite/g++.dg/expr/cond8.C index f05c81a26ce..11708ec0f6f 100644 --- a/gcc/testsuite/g++.dg/expr/cond8.C +++ b/gcc/testsuite/g++.dg/expr/cond8.C @@ -3,11 +3,11 @@ struct A { - A(void*); + A(void*); // { dg-error "initializing" } ~A(); }; void foo(const int i, bool b) { - b ? A(0) : i; // { dg-error "conversion|initializing" } + b ? A(0) : i; // { dg-error "conversion" } } diff --git a/gcc/testsuite/g++.dg/expr/string-1.C b/gcc/testsuite/g++.dg/expr/string-1.C index 3901427f439..9a0a5ff7b45 100644 --- a/gcc/testsuite/g++.dg/expr/string-1.C +++ b/gcc/testsuite/g++.dg/expr/string-1.C @@ -1,9 +1,11 @@ // { dg-do compile } // This testcase used to seg fault (PR c++/38648) +// { dg-prune-output "initializer lists" } + char a[1]; -int foo( // { dg-error "extended initializer lists only available" } +int foo( { a = ""; // { dg-error "" } return 0; // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/ext/attr-alias-1.C b/gcc/testsuite/g++.dg/ext/attr-alias-1.C new file mode 100644 index 00000000000..1427267e517 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attr-alias-1.C @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-require-alias "" } */ + +#include <typeinfo> + +struct Klass +{ + int implementation () const; + int magic () const; +}; + +int Klass::implementation (void) const +{ + return 0; +} + +int Klass::magic () const + __attribute__ ((alias ("_ZNK5Klass14implementationEv"))); + +int __attribute__ ((noinline)) + Foo (Klass const *ptr) +{ + if (ptr->magic () != 0) + return 1; + + if (typeid (*ptr) != typeid (Klass)) + return 2; + + return 0; +} + +int main () +{ + Klass obj; + + return Foo (&obj); +} diff --git a/gcc/testsuite/g++.dg/ext/attr-alias-2.C b/gcc/testsuite/g++.dg/ext/attr-alias-2.C new file mode 100644 index 00000000000..61a132f77a7 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attr-alias-2.C @@ -0,0 +1,37 @@ +/* { dg-do run } */ +/* { dg-require-alias "" } */ + +#include <typeinfo> + +struct Klass +{ + int implementation () const; + virtual int magic () const; +}; + +int Klass::implementation (void) const +{ + return 0; +} + +int Klass::magic () const + __attribute__ ((alias ("_ZNK5Klass14implementationEv"))); + +int __attribute__ ((noinline)) + Foo (Klass const *ptr) +{ + if (ptr->magic () != 0) + return 1; + + if (typeid (*ptr) != typeid (Klass)) + return 2; + + return 0; +} + +int main () +{ + Klass obj; + + return Foo (&obj); +} diff --git a/gcc/testsuite/g++.dg/ext/has_virtual_destructor.C b/gcc/testsuite/g++.dg/ext/has_virtual_destructor.C index c263a94fd04..093e7f5004d 100644 --- a/gcc/testsuite/g++.dg/ext/has_virtual_destructor.C +++ b/gcc/testsuite/g++.dg/ext/has_virtual_destructor.C @@ -14,15 +14,15 @@ union U double b; }; -class B +struct B { virtual ~B() { } }; -class C +struct C : public B { }; -class D +struct D { ~D() { } }; diff --git a/gcc/testsuite/g++.dg/ext/label13.C b/gcc/testsuite/g++.dg/ext/label13.C index 7a2665c59d9..d932a9a5051 100644 --- a/gcc/testsuite/g++.dg/ext/label13.C +++ b/gcc/testsuite/g++.dg/ext/label13.C @@ -8,7 +8,7 @@ struct C C(); }; -C::C() // { dg-bogus "can never be copied" "" { xfail *-apple-darwin* alpha*-dec-osf* } } +C::C() // { dg-bogus "can never be copied" "" { xfail { { *-apple-darwin* alpha*-dec-osf* } || { hppa*-*-hpux* && { ! hppa*64*-*-* } } } } } { static void *labelref = &&label; goto *labelref; diff --git a/gcc/testsuite/g++.dg/ext/unary_trait_incomplete.C b/gcc/testsuite/g++.dg/ext/unary_trait_incomplete.C index d5148bebbc6..51cc80cd2ac 100644 --- a/gcc/testsuite/g++.dg/ext/unary_trait_incomplete.C +++ b/gcc/testsuite/g++.dg/ext/unary_trait_incomplete.C @@ -5,72 +5,72 @@ struct C { }; bool nas1 = __has_nothrow_assign(I); // { dg-error "incomplete type" } bool nas2 = __has_nothrow_assign(C[]); -bool nas3 = __has_nothrow_assign(I[]); +bool nas3 = __has_nothrow_assign(I[]); // { dg-error "incomplete type" } bool nas4 = __has_nothrow_assign(void); bool nas5 = __has_nothrow_assign(const void); bool tas1 = __has_trivial_assign(I); // { dg-error "incomplete type" } bool tas2 = __has_trivial_assign(C[]); -bool tas3 = __has_trivial_assign(I[]); +bool tas3 = __has_trivial_assign(I[]); // { dg-error "incomplete type" } bool tas4 = __has_trivial_assign(void); bool tas5 = __has_trivial_assign(const void); bool nco1 = __has_nothrow_constructor(I); // { dg-error "incomplete type" } bool nco2 = __has_nothrow_constructor(C[]); -bool nco3 = __has_nothrow_constructor(I[]); +bool nco3 = __has_nothrow_constructor(I[]); // { dg-error "incomplete type" } bool nco4 = __has_nothrow_constructor(void); bool nco5 = __has_nothrow_constructor(const void); bool tco1 = __has_trivial_constructor(I); // { dg-error "incomplete type" } bool tco2 = __has_trivial_constructor(C[]); -bool tco3 = __has_trivial_constructor(I[]); +bool tco3 = __has_trivial_constructor(I[]); // { dg-error "incomplete type" } bool tco4 = __has_trivial_constructor(void); bool tco5 = __has_trivial_constructor(const void); bool ncp1 = __has_nothrow_copy(I); // { dg-error "incomplete type" } bool ncp2 = __has_nothrow_copy(C[]); -bool ncp3 = __has_nothrow_copy(I[]); +bool ncp3 = __has_nothrow_copy(I[]); // { dg-error "incomplete type" } bool ncp4 = __has_nothrow_copy(void); bool ncp5 = __has_nothrow_copy(const void); bool tcp1 = __has_trivial_copy(I); // { dg-error "incomplete type" } bool tcp2 = __has_trivial_copy(C[]); -bool tcp3 = __has_trivial_copy(I[]); +bool tcp3 = __has_trivial_copy(I[]); // { dg-error "incomplete type" } bool tcp4 = __has_trivial_copy(void); bool tcp5 = __has_trivial_copy(const void); bool vde1 = __has_virtual_destructor(I); // { dg-error "incomplete type" } bool vde2 = __has_virtual_destructor(C[]); -bool vde3 = __has_virtual_destructor(I[]); +bool vde3 = __has_virtual_destructor(I[]); // { dg-error "incomplete type" } bool vde4 = __has_virtual_destructor(void); bool vde5 = __has_virtual_destructor(const void); bool tde1 = __has_trivial_destructor(I); // { dg-error "incomplete type" } bool tde2 = __has_trivial_destructor(C[]); -bool tde3 = __has_trivial_destructor(I[]); +bool tde3 = __has_trivial_destructor(I[]); // { dg-error "incomplete type" } bool tde4 = __has_trivial_destructor(void); bool tde5 = __has_trivial_destructor(const void); bool abs1 = __is_abstract(I); // { dg-error "incomplete type" } bool abs2 = __is_abstract(C[]); -bool abs3 = __is_abstract(I[]); +bool abs3 = __is_abstract(I[]); // { dg-error "incomplete type" } bool abs4 = __is_abstract(void); bool abs5 = __is_abstract(const void); bool pod1 = __is_pod(I); // { dg-error "incomplete type" } bool pod2 = __is_pod(C[]); -bool pod3 = __is_pod(I[]); +bool pod3 = __is_pod(I[]); // { dg-error "incomplete type" } bool pod4 = __is_pod(void); bool pod5 = __is_pod(const void); bool emp1 = __is_empty(I); // { dg-error "incomplete type" } bool emp2 = __is_empty(C[]); -bool emp3 = __is_empty(I[]); +bool emp3 = __is_empty(I[]); // { dg-error "incomplete type" } bool emp4 = __is_empty(void); bool emp5 = __is_empty(const void); bool pol1 = __is_polymorphic(I); // { dg-error "incomplete type" } bool pol2 = __is_polymorphic(C[]); -bool pol3 = __is_polymorphic(I[]); +bool pol3 = __is_polymorphic(I[]); // { dg-error "incomplete type" } bool pol4 = __is_polymorphic(void); bool pol5 = __is_polymorphic(const void); diff --git a/gcc/testsuite/g++.dg/gomp/pr26690-1.C b/gcc/testsuite/g++.dg/gomp/pr26690-1.C index c49c8b72180..71f1eb311ee 100644 --- a/gcc/testsuite/g++.dg/gomp/pr26690-1.C +++ b/gcc/testsuite/g++.dg/gomp/pr26690-1.C @@ -1,7 +1,7 @@ // PR c++/26690 // { dg-do compile } -struct A // { dg-message "A::A\\(const A&\\)" } +struct A // { dg-message "A::A" } { A (int); // { dg-message "candidates" } }; diff --git a/gcc/testsuite/g++.dg/inherit/virtual5.C b/gcc/testsuite/g++.dg/inherit/virtual5.C new file mode 100644 index 00000000000..bed0ef3a07b --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/virtual5.C @@ -0,0 +1,29 @@ +// Test that a synthesized op= can override one from a base. +// { dg-do run } + +struct B; + +struct A +{ + virtual B& operator=(const B&); +}; + +struct B: A +{ + B(int i): i(i) { } + int i; + // implicitly-declared op= +}; + +B& A::operator=(const B& b) { return static_cast<B&>(*this); } + +int main() +{ + B b1 (123); + B b2 (0); + + A& ar = b1; + ar = b2; + + return b1.i; +} diff --git a/gcc/testsuite/g++.dg/init/ctor4.C b/gcc/testsuite/g++.dg/init/ctor4.C index 0671dd8537d..1c92bb973d3 100644 --- a/gcc/testsuite/g++.dg/init/ctor4.C +++ b/gcc/testsuite/g++.dg/init/ctor4.C @@ -6,7 +6,7 @@ public: foo(); }; -class bar: public foo {// { dg-error "uninitialized" } +class bar: public foo { // { dg-error "reference|bar::bar" } private: int &a; }; @@ -16,5 +16,5 @@ foo::foo() { int main(int argc, char **argv) { - bar x; // { dg-message "synthesized" } + bar x; // { dg-message "synthesized|deleted" } } diff --git a/gcc/testsuite/g++.dg/init/new5.C b/gcc/testsuite/g++.dg/init/new5.C index 3a5981e075c..0d99f93c634 100644 --- a/gcc/testsuite/g++.dg/init/new5.C +++ b/gcc/testsuite/g++.dg/init/new5.C @@ -2,8 +2,8 @@ #include <new> -void * operator new[](size_t, std::nothrow_t const &) throw() -{ return NULL; } +void * operator new[](std::size_t, std::nothrow_t const &) throw() +{ return 0; } struct X { struct Inner { ~Inner() {} }; diff --git a/gcc/testsuite/g++.dg/init/pr44086.C b/gcc/testsuite/g++.dg/init/pr44086.C new file mode 100644 index 00000000000..e3304f4a27b --- /dev/null +++ b/gcc/testsuite/g++.dg/init/pr44086.C @@ -0,0 +1,15 @@ +// PR c++/44086 +// { dg-do compile } + +struct A +{ + int const i : 2; // { dg-message "should be initialized" } +}; + +void f() +{ + A a; // { dg-error "uninitialized const" } + new A; // { dg-error "uninitialized const" } + A(); + new A(); +} diff --git a/gcc/testsuite/g++.dg/init/synth2.C b/gcc/testsuite/g++.dg/init/synth2.C index 624f10b2a4d..9e8a08a6ea3 100644 --- a/gcc/testsuite/g++.dg/init/synth2.C +++ b/gcc/testsuite/g++.dg/init/synth2.C @@ -5,7 +5,7 @@ struct G { G(G&); // { dg-message "" "candidate" } }; -class A // { dg-error "no match" } +class A // { dg-error "" } { const G g; }; @@ -13,5 +13,5 @@ class A // { dg-error "no match" } int main() { A a; - A b = a; // { dg-message "required here" } + A b = a; // { dg-message "required here|deleted" } } diff --git a/gcc/testsuite/g++.dg/ipa/iinline-2.C b/gcc/testsuite/g++.dg/ipa/iinline-2.C new file mode 100644 index 00000000000..670a5dd9522 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/iinline-2.C @@ -0,0 +1,61 @@ +/* Verify that simple indirect calls are inlined even without early + inlining.. */ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining" } */ +/* { dg-add-options bind_pic_locally } */ + +extern void non_existent (const char *, int); + +class String +{ +private: + const char *data; + +public: + String (const char *d) : data(d) + {} + + int funcOne (int delim) const; + int printStuffTwice (int delim) const; +}; + + +int String::funcOne (int delim) const +{ + int i; + for (i = 0; i < delim; i++) + non_existent(data, i); + + return 1; +} + +extern int global; + +int docalling (int c, int (String::* f)(int delim) const) +{ + String S ("muhehehe"); + + if (c > 2) + global = 3; + else + global = 5; + + return (S.*f)(4); +} + +int __attribute__ ((noinline,noclone)) get_input (void) +{ + return 1; +} + +int main (int argc, char *argv[]) +{ + int i = 0; + while (i < 1000) + i += docalling (get_input (), &String::funcOne); + non_existent ("done", i); + return 0; +} + +/* { dg-final { scan-ipa-dump "String::funcOne\[^\\n\]*inline copy in int main" "inline" } } */ +/* { dg-final { cleanup-ipa-dump "inline" } } */ diff --git a/gcc/testsuite/g++.dg/ipa/iinline-3.C b/gcc/testsuite/g++.dg/ipa/iinline-3.C new file mode 100644 index 00000000000..3daee9a8681 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/iinline-3.C @@ -0,0 +1,64 @@ +/* Verify that we do not indirect-inline using member pointer + parameters which have been modified. */ +/* { dg-do run } */ +/* { dg-options "-O3 -fno-early-inlining" } */ +/* { dg-add-options bind_pic_locally } */ + +extern "C" void abort (void); + +class String +{ +private: + const char *data; + +public: + String (const char *d) : data(d) + {} + + int funcOne (int stuff) const; + int funcTwo (int stuff) const; +}; + + +int String::funcOne (int stuff) const +{ + return stuff + 1; +} + +int String::funcTwo (int stuff) const +{ + return stuff + 100; +} + +int (String::* gmp)(int stuff) const = &String::funcTwo; + +int docalling_1 (int (String::* f)(int stuff) const) +{ + String S ("muhehehe"); + + return (S.*f)(4); +} + +int docalling (int a, int (String::* f)(int stuff) const) +{ + if (a < 200) + f = gmp; + + return docalling_1 (f); +} + +int __attribute__ ((noinline,noclone)) get_input (void) +{ + return 1; +} + +int main (int argc, char *argv[]) +{ + int i = 0; + while (i < 10) + i += docalling (get_input (), &String::funcOne); + + if (i != 104) + abort(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/lto/20081118_1.C b/gcc/testsuite/g++.dg/lto/20081118_1.C index b9e56a48b9b..a1bf08186df 100644 --- a/gcc/testsuite/g++.dg/lto/20081118_1.C +++ b/gcc/testsuite/g++.dg/lto/20081118_1.C @@ -1,4 +1,5 @@ class object { +public: virtual ~object() {} }; diff --git a/gcc/testsuite/g++.dg/lto/20100603-1_0.C b/gcc/testsuite/g++.dg/lto/20100603-1_0.C new file mode 100644 index 00000000000..8fe11a2f17c --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/20100603-1_0.C @@ -0,0 +1,14 @@ +/* { dg-lto-do link } */ + +extern "C" { + typedef struct {} CvImage; + extern CvImage* Cv_ImageNew(void); +} +void __attribute__((noinline,noclone)) +_Raytrace(CvImage* LImage) { __asm volatile (""); } +int main(int LArgC, char** LArgV) +{ + CvImage* LImage = Cv_ImageNew(); + _Raytrace(LImage); +} + diff --git a/gcc/testsuite/g++.dg/lto/20100603-1_1.c b/gcc/testsuite/g++.dg/lto/20100603-1_1.c new file mode 100644 index 00000000000..fddce5d4b1e --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/20100603-1_1.c @@ -0,0 +1,2 @@ +typedef struct {} CvImage; +CvImage* Cv_ImageNew(void) { } diff --git a/gcc/testsuite/g++.dg/other/arm-neon-1.C b/gcc/testsuite/g++.dg/other/arm-neon-1.C new file mode 100644 index 00000000000..33cc04b69dc --- /dev/null +++ b/gcc/testsuite/g++.dg/other/arm-neon-1.C @@ -0,0 +1,18 @@ +/* Basic smoke test for arm_neon.h */ + +/* { dg-do assemble } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" + +float a[4]; + +void test(void) +{ + float32x2x2_t v; + float32x2_t res; + v = vld2_f32(a); + res = vadd_f32(v.val[0], v.val[1]); + vst1_f32(a, res); +} diff --git a/gcc/testsuite/g++.dg/other/error13.C b/gcc/testsuite/g++.dg/other/error13.C index 89e88478679..784550180ff 100644 --- a/gcc/testsuite/g++.dg/other/error13.C +++ b/gcc/testsuite/g++.dg/other/error13.C @@ -5,6 +5,6 @@ struct A // { dg-message "note" } A(void x); // { dg-error "invalid use|incomplete type|candidates" } }; -struct B : A {}; // { dg-error "no matching function for call" } +struct B : A {}; // { dg-error "no matching function for call|deleted" } -B b; // { dg-message "synthesized method" } +B b; // { dg-message "synthesized method|deleted" } diff --git a/gcc/testsuite/g++.dg/other/error20.C b/gcc/testsuite/g++.dg/other/error20.C index 6f3f778ab84..e546b3726e3 100644 --- a/gcc/testsuite/g++.dg/other/error20.C +++ b/gcc/testsuite/g++.dg/other/error20.C @@ -1,7 +1,7 @@ // PR c++/34275 // { dg-do compile } -struct A // { dg-message "candidate is" } +struct A // { dg-message "operator=" } { virtual A foo (); }; diff --git a/gcc/testsuite/g++.dg/other/error31.C b/gcc/testsuite/g++.dg/other/error31.C index c4095504d6d..d3e3e09a37c 100644 --- a/gcc/testsuite/g++.dg/other/error31.C +++ b/gcc/testsuite/g++.dg/other/error31.C @@ -3,7 +3,7 @@ // { dg-options "" } // { dg-bogus "not supported by" "" { target *-*-* } 0 } -struct A {}; // { dg-message "note: candidate is" } +struct A {}; // { dg-message "operator=" } void foo () diff --git a/gcc/testsuite/g++.dg/other/pr25632.C b/gcc/testsuite/g++.dg/other/pr25632.C index fe0ad7a2497..e66ae3b51ec 100644 --- a/gcc/testsuite/g++.dg/other/pr25632.C +++ b/gcc/testsuite/g++.dg/other/pr25632.C @@ -2,14 +2,12 @@ /* { dg-do compile } */ -#define unsigned -__extension__ typedef __SIZE_TYPE__ ssize_t; -#undef unsigned +__extension__ typedef __INTPTR_TYPE__ intptr_t; struct sockaddr_un { char sun_path[1]; }; -const unsigned SI_SUN_HEAD_LEN = (ssize_t)(((struct sockaddr_un *)0)->sun_path); +const unsigned SI_SUN_HEAD_LEN = (intptr_t)(((struct sockaddr_un *)0)->sun_path); int SiGetPeerName () { return SI_SUN_HEAD_LEN; diff --git a/gcc/testsuite/g++.dg/other/typedef4.C b/gcc/testsuite/g++.dg/other/typedef4.C new file mode 100644 index 00000000000..b752f2cae7a --- /dev/null +++ b/gcc/testsuite/g++.dg/other/typedef4.C @@ -0,0 +1,7 @@ +// { dg-options "-g" } +// { dg-do compile } + +// On some platforms like MIPS, __builtin_va_list is a +// RECORD_TYPE. Make sure we don't wrongly try to generate debug info +// for its TYPE_DECL and crash. +typedef __builtin_va_list foo; diff --git a/gcc/testsuite/g++.dg/other/unused1.C b/gcc/testsuite/g++.dg/other/unused1.C index d652f41a1de..2a3ca1be749 100644 --- a/gcc/testsuite/g++.dg/other/unused1.C +++ b/gcc/testsuite/g++.dg/other/unused1.C @@ -32,7 +32,7 @@ int bar4 (void) return const_cast<printer *>(dotmatrix)->i; } -class class1 { virtual ~class1(); } *c1; +class class1 { public: virtual ~class1(); } *c1; class class2 : class1 { char j; }; int bar5 (void) { diff --git a/gcc/testsuite/g++.dg/overload/arg3.C b/gcc/testsuite/g++.dg/overload/arg3.C index 8ece6a6f3ca..eb65271752e 100644 --- a/gcc/testsuite/g++.dg/overload/arg3.C +++ b/gcc/testsuite/g++.dg/overload/arg3.C @@ -14,10 +14,9 @@ struct B : A B(B&); // { dg-message "candidates" "" } }; -void foo(B); +void foo(B); // { dg-error "initializing" } void bar() { foo(0); // { dg-error "no matching function" "no matching" } - // { dg-error "initializing" "initializing" { target *-*-* } 21 } } diff --git a/gcc/testsuite/g++.dg/overload/copy1.C b/gcc/testsuite/g++.dg/overload/copy1.C index 6a774c6770b..2bd8e539dd1 100644 --- a/gcc/testsuite/g++.dg/overload/copy1.C +++ b/gcc/testsuite/g++.dg/overload/copy1.C @@ -10,12 +10,11 @@ struct B struct A { - A (B); + A (B); // { dg-error "initializing" } }; B f (B const& b) { return b; // { dg-error "matching" "matching" } - // { dg-error "initializing" "initializing" { target *-*-* } 19 } } diff --git a/gcc/testsuite/g++.dg/parse/error19.C b/gcc/testsuite/g++.dg/parse/error19.C index 0955e6a9076..3b7e7175b17 100644 --- a/gcc/testsuite/g++.dg/parse/error19.C +++ b/gcc/testsuite/g++.dg/parse/error19.C @@ -1,7 +1,7 @@ // { dg-options "-fshow-column -fmessage-length=0 -ansi -pedantic-errors -Wno-long-long " } // PR C++/17867 -struct A // { dg-message "8:candidate is:" } +struct A // { dg-message "8:operator=" } { A(int); }; diff --git a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c index d62ab90542c..6327095f7cd 100644 --- a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c @@ -8,6 +8,8 @@ #include "tree.h" #include "tree-pass.h" #include "intl.h" +#include "toplev.h" +#include "plugin.h" int plugin_is_GPL_compatible; diff --git a/gcc/testsuite/g++.dg/plugin/dumb_plugin.c b/gcc/testsuite/g++.dg/plugin/dumb_plugin.c index 3aee8db840c..f12a6a0d35b 100644 --- a/gcc/testsuite/g++.dg/plugin/dumb_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/dumb_plugin.c @@ -9,6 +9,7 @@ #include "tree.h" #include "tree-pass.h" #include "intl.h" +#include "toplev.h" int plugin_is_GPL_compatible; @@ -65,7 +66,7 @@ static struct gimple_opt_pass pass_dumb_plugin_example = NULL, /* sub */ NULL, /* next */ 0, /* static_pass_number */ - 0, /* tv_id */ + TV_NONE, /* tv_id */ PROP_cfg, /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */ diff --git a/gcc/testsuite/g++.dg/plugin/header_plugin.c b/gcc/testsuite/g++.dg/plugin/header_plugin.c index 71a0c3bf2f4..a464827dee9 100644 --- a/gcc/testsuite/g++.dg/plugin/header_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/header_plugin.c @@ -13,8 +13,8 @@ /* gcc/ headers. */ #include "cp/cp-tree.h" #include "diagnostic.h" -#include "c-common.h" -#include "c-pretty-print.h" +#include "c-family/c-common.h" +#include "c-family/c-pretty-print.h" #include "tree-iterator.h" #include "plugin.h" #include "tree-flow.h" diff --git a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c index 237fcdddfa9..4a9ea47195d 100644 --- a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c +++ b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c @@ -9,10 +9,11 @@ #include "rtl.h" #include "tree.h" #include "function.h" -#include "c-pragma.h" +#include "c-family/c-pragma.h" #include "cpplib.h" #include "tree-pass.h" #include "intl.h" +#include "toplev.h" int plugin_is_GPL_compatible; diff --git a/gcc/testsuite/g++.dg/plugin/selfassign.c b/gcc/testsuite/g++.dg/plugin/selfassign.c index 8d76301d815..eb8f24a45a8 100644 --- a/gcc/testsuite/g++.dg/plugin/selfassign.c +++ b/gcc/testsuite/g++.dg/plugin/selfassign.c @@ -52,9 +52,7 @@ get_real_ref_rhs (tree expr) /* We are only interested in an assignment with a single rhs operand because if it is not, the original assignment will not possibly be a self-assignment. */ - if (is_gimple_assign (def_stmt) - && (get_gimple_rhs_class (gimple_assign_rhs_code (def_stmt)) - == GIMPLE_SINGLE_RHS)) + if (gimple_assign_single_p (def_stmt)) return get_real_ref_rhs (gimple_assign_rhs1 (def_stmt)); else return NULL_TREE; @@ -66,7 +64,7 @@ get_real_ref_rhs (tree expr) case PARM_DECL: case FIELD_DECL: case COMPONENT_REF: - case INDIRECT_REF: + case MEM_REF: case ARRAY_REF: return expr; default: @@ -116,17 +114,18 @@ get_non_ssa_expr (tree expr) else return expr; } - case INDIRECT_REF: + case MEM_REF: { tree orig_base = TREE_OPERAND (expr, 0); - tree base = get_non_ssa_expr (orig_base); - if (!base) - return NULL_TREE; - /* If BASE is converted, build a new indirect reference tree. */ - if (base != orig_base) - return build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (base)), base); - else - return expr; + if (TREE_CODE (orig_base) == SSA_NAME) + { + tree base = get_non_ssa_expr (orig_base); + if (!base) + return NULL_TREE; + return fold_build2 (MEM_REF, TREE_TYPE (expr), + base, TREE_OPERAND (expr, 1)); + } + return expr; } case ARRAY_REF: { @@ -153,9 +152,7 @@ get_non_ssa_expr (tree expr) && !gimple_nop_p (SSA_NAME_DEF_STMT (expr))) { gimple def_stmt = SSA_NAME_DEF_STMT (expr); - if (is_gimple_assign (def_stmt) - && (get_gimple_rhs_class (gimple_assign_rhs_code (def_stmt)) - == GIMPLE_SINGLE_RHS)) + if (gimple_assign_single_p (def_stmt)) vdecl = gimple_assign_rhs1 (def_stmt); } return get_non_ssa_expr (vdecl); @@ -201,9 +198,7 @@ warn_self_assign (gimple stmt) tree rhs, lhs; /* Check assigment statement. */ - if (is_gimple_assign (stmt) - && (get_gimple_rhs_class (gimple_assign_rhs_code (stmt)) - == GIMPLE_SINGLE_RHS)) + if (gimple_assign_single_p (stmt)) { rhs = get_real_ref_rhs (gimple_assign_rhs1 (stmt)); if (!rhs) @@ -275,7 +270,7 @@ static struct gimple_opt_pass pass_warn_self_assign = NULL, /* sub */ NULL, /* next */ 0, /* static_pass_number */ - 0, /* tv_id */ + TV_NONE, /* tv_id */ PROP_ssa, /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */ diff --git a/gcc/testsuite/g++.dg/pr44486.C b/gcc/testsuite/g++.dg/pr44486.C new file mode 100644 index 00000000000..01e84289f0b --- /dev/null +++ b/gcc/testsuite/g++.dg/pr44486.C @@ -0,0 +1,10 @@ +// PR c++/44486 missing space in __PRETTY_FUNCTION__ expansion in anonymous namespace +// { dg-do compile } +// { dg-options "" } + +struct S { }; +namespace { S f() { const char * s = __PRETTY_FUNCTION__; return S(); } } + +int main() { f(); } + +// { dg-final { scan-assembler "S \{anonymous\}::f" } } diff --git a/gcc/testsuite/g++.dg/tc1/dr147.C b/gcc/testsuite/g++.dg/tc1/dr147.C index a29986b5559..6799b7dccad 100644 --- a/gcc/testsuite/g++.dg/tc1/dr147.C +++ b/gcc/testsuite/g++.dg/tc1/dr147.C @@ -54,3 +54,13 @@ struct D: C::C { D(): C::C() { } }; + +// And if lookup doesn't find the injected-class-name, we aren't naming the +// constructor (c++/44401). + +struct E +{ + int E; +}; + +int E::*p = &E::E; diff --git a/gcc/testsuite/g++.dg/tc1/dr152.C b/gcc/testsuite/g++.dg/tc1/dr152.C index cac7aacc0eb..fdf4f124bb1 100644 --- a/gcc/testsuite/g++.dg/tc1/dr152.C +++ b/gcc/testsuite/g++.dg/tc1/dr152.C @@ -7,12 +7,11 @@ namespace N1 { X(); // { dg-message "candidate" } explicit X(const X&); }; - void f(X); + void f(X); // { dg-error "initializing" } int foo() { X x; f(x); // { dg-error "matching" "matching" } - // { dg-error "initializing" "initializing" { target *-*-* } 14 } } } @@ -24,14 +23,13 @@ namespace N2 { }; template <class T> - void f(T ) {} + void f(T ) {} // { dg-error "initializing" } template <class T> int foo() { X<T> x; N2::f(x); // { dg-error "matching" "matching" } - // { dg-error "initializing " initializing" { target *-*-* } 33 } } template int foo<float>(); // { dg-message "instantiated from here" } diff --git a/gcc/testsuite/g++.dg/template/crash100.C b/gcc/testsuite/g++.dg/template/crash100.C new file mode 100644 index 00000000000..c67ae2eca38 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash100.C @@ -0,0 +1,24 @@ +// PR c++/44628 + +template <typename T> +class Temp +{ + int Val; + public: + operator T&(void) { return Val; } + + virtual T& operator=(T a ) // { dg-error "overriding" } + { + Val = a; + return Val; + } +}; + +class Int : public Temp<int> +{ + public: + Int& operator=(int a) // { dg-error "conflicting return type" } + { + return (*this); + } +}; diff --git a/gcc/testsuite/g++.dg/template/error23.C b/gcc/testsuite/g++.dg/template/error23.C index 8e5dee76dda..f21d8d9d07c 100644 --- a/gcc/testsuite/g++.dg/template/error23.C +++ b/gcc/testsuite/g++.dg/template/error23.C @@ -8,10 +8,10 @@ struct nullptr_type { operator T* ( void ) const { return ( 0 ); } -} const nullptr; +} const nullptr_ob; int main ( void ) { - 0 == nullptr; // { dg-error "match" } + 0 == nullptr_ob; // { dg-error "match" } } diff --git a/gcc/testsuite/g++.dg/template/incomplete4.C b/gcc/testsuite/g++.dg/template/incomplete4.C index 6129e0d6fd0..f2832a73c4c 100644 --- a/gcc/testsuite/g++.dg/template/incomplete4.C +++ b/gcc/testsuite/g++.dg/template/incomplete4.C @@ -5,12 +5,12 @@ class A; // { dg-error "forward declaration" } template <typename T> struct X { - static int f (T); + static int f (T); // { dg-error "initializing" } static const T &make (); }; int main () { - return X<A>::f (X<A>::make ()); // { dg-error "invalid use of incomplete type|initializing argument" } + return X<A>::f (X<A>::make ()); // { dg-error "invalid use of incomplete type" } } diff --git a/gcc/testsuite/g++.dg/template/incomplete5.C b/gcc/testsuite/g++.dg/template/incomplete5.C index 9641003ddda..f7802825fde 100644 --- a/gcc/testsuite/g++.dg/template/incomplete5.C +++ b/gcc/testsuite/g++.dg/template/incomplete5.C @@ -5,9 +5,9 @@ class A; // { dg-error "forward declaration" } template <typename T> struct X { - static int f (T); + static int f (T); // { dg-error "initializing" } static const T &make (); - static const bool value = sizeof (f (make ())) == sizeof (int); // { dg-error "invalid use of incomplete type|initializing argument" } + static const bool value = sizeof (f (make ())) == sizeof (int); // { dg-error "invalid use of incomplete type" } }; int diff --git a/gcc/testsuite/g++.dg/template/qualified-id2.C b/gcc/testsuite/g++.dg/template/qualified-id2.C new file mode 100644 index 00000000000..e88e8547457 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/qualified-id2.C @@ -0,0 +1,27 @@ +// PR c++/44587 +// { dg-do run } + +template <const char *N> struct A { static const char *p; }; +template <const char *N> const char *A<N>::p = N; +template <class T> struct B { static const char c[1]; typedef A<B<T>::c> C; }; +template <class T> const char B<T>::c[1] = ""; +template <class T> struct D { static const char c[1]; typedef A<c> C; }; +template <class T> const char D<T>::c[1] = ""; + +template <int& I> struct E { static int *ip; }; +template <int& I> int* E<I>::ip = &I; +template <class T> struct F { static int i; typedef E<F<T>::i> C; }; +template <class T> int F<T>::i; +template <class T> struct G { static int i; typedef E<i> C; }; +template <class T> int G<T>::i; + +#define AS(X) if (!(X)) return 1; +int main() +{ + AS(B<int>::C::p == B<int>::c); + AS(B<float>::C::p == B<float>::c); + AS(B<float>::C::p != B<int>::c); + AS(D<int>::C::p == D<int>::c); + AS(D<float>::C::p == D<float>::c); + AS(D<float>::C::p != D<int>::c); +} diff --git a/gcc/testsuite/g++.dg/template/qualified-id3.C b/gcc/testsuite/g++.dg/template/qualified-id3.C new file mode 100644 index 00000000000..d97ef5c592b --- /dev/null +++ b/gcc/testsuite/g++.dg/template/qualified-id3.C @@ -0,0 +1,14 @@ +// PR c++/44587 + +template <const int N> struct A { }; +template <class T> struct B { + static const int c; + typedef A<B<T>::c> C; // { dg-error "non-constant" } +}; +template <class T> const int B<T>::c = sizeof (T); + +template <const int N> struct D { }; +template <class T> struct E { + static const int c = sizeof (T); + typedef D<E<T>::c> F; // OK +}; diff --git a/gcc/testsuite/g++.dg/template/qualttp5.C b/gcc/testsuite/g++.dg/template/qualttp5.C index fc93f462835..c3ebd8c82f6 100644 --- a/gcc/testsuite/g++.dg/template/qualttp5.C +++ b/gcc/testsuite/g++.dg/template/qualttp5.C @@ -4,7 +4,7 @@ template <class U> struct A { - template <class T> class B {}; // { dg-message "candidate is" } + template <class T> class B {}; // { dg-message "operator=" } }; template <template <class> class TT> void f() diff --git a/gcc/testsuite/g++.dg/torture/pr43801.C b/gcc/testsuite/g++.dg/torture/pr43801.C new file mode 100644 index 00000000000..3b52d4abcc6 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr43801.C @@ -0,0 +1,22 @@ +// PR tree-optimization/43801 +// { dg-do compile } +// { dg-options "-fipa-cp -fipa-cp-clone" } + +struct A +{ + virtual void f (int); +}; +struct B : virtual A +{ + virtual void f (int i) { if (i) A::f(0); } +}; +struct C : virtual B +{ + virtual void f (int) { B::f(0); } +}; + +void +foo () +{ + C (); +} diff --git a/gcc/testsuite/g++.dg/torture/pr43905.C b/gcc/testsuite/g++.dg/torture/pr43905.C new file mode 100644 index 00000000000..0e49a32a1dd --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr43905.C @@ -0,0 +1,13 @@ +extern void sf ( __const char *); +struct Matrix{ + int operator[](int n){ + sf ( __PRETTY_FUNCTION__); + } + int operator[](int n)const{ + sf ( __PRETTY_FUNCTION__); + } +}; +void calcmy(Matrix const &b, Matrix &c, int k){ + b[k]; + c[k]; +} diff --git a/gcc/testsuite/g++.dg/torture/pr44357.C b/gcc/testsuite/g++.dg/torture/pr44357.C new file mode 100644 index 00000000000..3380350e81b --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr44357.C @@ -0,0 +1,228 @@ +/* { dg-do compile } */ +extern "C" +{ + typedef long unsigned int size_t; +} +namespace llvm +{ + namespace dont_use + { + template < typename T > double is_class_helper (...); + } + template < typename T > struct is_class + { + public:enum + { value = sizeof (char) == sizeof (dont_use::is_class_helper < T > (0)) }; + }; + template < typename T > struct isPodLike + { + static const bool value = !is_class < T >::value; + }; +} +namespace std __attribute__ ((__visibility__ ("default"))) +{ + template < typename _Iterator > struct iterator_traits + { + }; + template < typename _Tp > struct iterator_traits <_Tp * > + { + typedef _Tp value_type; + }; +} + +namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) +{ + template < typename _Tp > class new_allocator + { + public:typedef size_t size_type; + typedef const _Tp & const_reference; + }; +} + +namespace std __attribute__ ((__visibility__ ("default"))) +{ +template < typename _Tp > class allocator:public __gnu_cxx::new_allocator < + _Tp > + { + public:typedef size_t size_type; + template < typename _Tp1 > struct rebind + { + typedef allocator < _Tp1 > other; + }; + }; + template < typename _Tp, typename _Alloc > struct _Vector_base + { + typedef typename _Alloc::template rebind < _Tp >::other _Tp_alloc_type; + }; +template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector:protected _Vector_base < _Tp, + _Alloc + > + { + typedef _Vector_base < _Tp, _Alloc > _Base; + typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; + public:typedef _Tp value_type; + typedef typename _Tp_alloc_type::const_reference const_reference; + typedef size_t size_type; + size_type size () const + { + } const_reference operator[] (size_type __n) const + { + }}; +} + +namespace llvm +{ + struct LandingPadInfo; + class DwarfException + { + static bool PadLT (const LandingPadInfo * L, const LandingPadInfo * R); + struct CallSiteEntry + { + }; + void EmitExceptionTable (); + }; +} +namespace std __attribute__ ((__visibility__ ("default"))) +{ + template < typename _RandomAccessIterator, + typename _Compare > + void __unguarded_linear_insert (_RandomAccessIterator __last, + _Compare __comp) + { + typename iterator_traits < _RandomAccessIterator >::value_type __val = + (*__last); + _RandomAccessIterator __next = __last; + while (__comp (__val, *__next)) + { + } + } + template < typename _RandomAccessIterator, + typename _Compare > void __insertion_sort (_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Compare __comp) + { + for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) + { + if (__comp (*__i, *__first)) + { + } + else + std::__unguarded_linear_insert (__i, __comp); + } + } + enum + { _S_threshold = 16 }; + template < typename _RandomAccessIterator, + typename _Compare > + void __final_insertion_sort (_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Compare __comp) + { + if (__last - __first > int (_S_threshold)) + { + std::__insertion_sort (__first, __first + int (_S_threshold), __comp); + } + } + template < typename _RandomAccessIterator, + typename _Compare > inline void sort (_RandomAccessIterator __first, + _RandomAccessIterator __last, + _Compare __comp) + { + if (__first != __last) + { + std::__final_insertion_sort (__first, __last, __comp); + } + } +} + +namespace llvm +{ + class SmallVectorBase + { + protected:void *BeginX, *EndX, *CapacityX; + struct U + { + } FirstEl; + protected: SmallVectorBase (size_t Size):BeginX (&FirstEl), EndX (&FirstEl), + CapacityX ((char *) &FirstEl + Size) + { + }}; +template < typename T > class SmallVectorTemplateCommon:public + SmallVectorBase + { + public: SmallVectorTemplateCommon (size_t Size):SmallVectorBase (Size) + { + } typedef size_t size_type; + typedef T *iterator; + iterator begin () + { + } iterator end () + { + } size_type size () const + { + }}; +template < typename T, bool isPodLike > class SmallVectorTemplateBase:public SmallVectorTemplateCommon < + T > + { + public: SmallVectorTemplateBase (size_t Size):SmallVectorTemplateCommon < T > + (Size) + { + }}; +template < typename T > class SmallVectorImpl:public SmallVectorTemplateBase < T, + isPodLike < T >::value > + { + typedef SmallVectorTemplateBase < T, isPodLike < T >::value > SuperClass; + public:typedef typename SuperClass::iterator iterator; + explicit SmallVectorImpl (unsigned N):SmallVectorTemplateBase < T, + isPodLike < T >::value > (N * sizeof (T)) + { + } + }; + template < typename T, + unsigned N > class SmallVector:public SmallVectorImpl < T > + { + typedef typename SmallVectorImpl < T >::U U; + enum + { MinUs = + (static_cast < unsigned int >(sizeof (T)) * N + static_cast < + unsigned int >(sizeof (U)) - 1) /static_cast < + unsigned int >(sizeof (U)), NumInlineEltsElts = + MinUs > 1 ? (MinUs - 1) : 1, NumTsAvailable = + (NumInlineEltsElts + 1) * static_cast < + unsigned int >(sizeof (U)) / static_cast < + unsigned int >(sizeof (T)) }; + public: SmallVector ():SmallVectorImpl < T > (NumTsAvailable) + { + } + }; + struct LandingPadInfo + { + std::vector < int >TypeIds; + union + { + } Contents; + }; +} + +using namespace llvm; +bool +DwarfException::PadLT (const LandingPadInfo * L, const LandingPadInfo * R) +{ + const std::vector < int >&LIds = L->TypeIds, &RIds = R->TypeIds; + unsigned LSize = LIds.size (), RSize = RIds.size (); + unsigned MinSize = LSize < RSize ? LSize : RSize; + for (unsigned i = 0; i != MinSize; ++i) + if (LIds[i] != RIds[i]) + return LIds[i] < RIds[i]; +} + +void +DwarfException::EmitExceptionTable () +{ + SmallVector < const LandingPadInfo *, 64 > LandingPads; + std::sort (LandingPads.begin (), LandingPads.end (), PadLT); + SmallVector < CallSiteEntry, 64 > CallSites; + for (unsigned i = 0, e = CallSites.size (); i < e; ++i) + { + } +} diff --git a/gcc/testsuite/g++.dg/torture/pr44492.C b/gcc/testsuite/g++.dg/torture/pr44492.C new file mode 100644 index 00000000000..41669241e7e --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr44492.C @@ -0,0 +1,31 @@ +// PR middle-end/44492 +// { dg-do run } + +struct T { unsigned long p; }; +struct S { T a, b, c; unsigned d; }; + +__attribute__((noinline)) +void +bar (const T &x, const T &y) +{ + if (x.p != 0x2348 || y.p != 0x2346) + __builtin_abort (); +} + +__attribute__((noinline)) +void +foo (S &s, T e) +{ + unsigned long a = e.p; + unsigned long b = s.b.p; + __asm__ volatile ("" : : "rm" (a), "rm" (b)); + bar (e, s.b); +} + +int +main () +{ + S s = { { 0x2345 }, { 0x2346 }, { 0x2347 }, 6 }; + T t = { 0x2348 }; + foo (s, t); +} diff --git a/gcc/testsuite/g++.dg/torture/pr44535.C b/gcc/testsuite/g++.dg/torture/pr44535.C new file mode 100644 index 00000000000..9126f3997fb --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr44535.C @@ -0,0 +1,34 @@ +/* { dg-do run } */ + +namespace FOO { + +template <typename T> +class A +{ +public: + void Enum(); + virtual void OnProv() = 0; + virtual ~A() { } +}; +typedef A<char> B; + +template<typename T> +void A<T>::Enum () +{ + OnProv (); +} +} // namespace FOO + +class C {}; + +class D: public C, public FOO::B { +public: + void OnProv() {} +}; + +int main(int argc, char *argv[]) +{ + D x; + x.Enum(); + return 0; +} diff --git a/gcc/testsuite/g++.dg/tree-ssa/copyprop-1.C b/gcc/testsuite/g++.dg/tree-ssa/copyprop-1.C index 2be04691537..03f6b1207c7 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/copyprop-1.C +++ b/gcc/testsuite/g++.dg/tree-ssa/copyprop-1.C @@ -25,5 +25,7 @@ int foo(Object&o) return o[0]; } -/* { dg-final { scan-tree-dump-not ".* = \[^>;\]*;" "dce2" } } */ +/* Remaining should be two loads. */ + +/* { dg-final { scan-tree-dump-times " = \[^\n\]*;" 2 "dce2" } } */ /* { dg-final { cleanup-tree-dump "dce2" } } */ diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr31146.C b/gcc/testsuite/g++.dg/tree-ssa/pr31146.C index 96790239693..478a488e3c2 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr31146.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr31146.C @@ -12,5 +12,5 @@ void foo (int j) *q = 1; } -/* { dg-final { scan-tree-dump "i\\\[j.*\\\] =.* 1;" "forwprop1" } } */ +/* { dg-final { scan-tree-dump "MEM\\\[.*&i\\\]\\\[j.*\\\] =.* 1;" "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop?" } } */ diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr33604.C b/gcc/testsuite/g++.dg/tree-ssa/pr33604.C index d78006220ed..7e820d3ef16 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/pr33604.C +++ b/gcc/testsuite/g++.dg/tree-ssa/pr33604.C @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O -fdump-tree-forwprop1" } */ +/* { dg-options "-O -fdump-tree-optimized-vops" } */ struct Value { @@ -35,12 +35,14 @@ int main(int argc, char *argv[]) return 0; } -/* Check that we forward propagated +/* Check that we propagate D.2182_13 = (struct Ref *) &D.2137.lhs; to D.2182_13->lhs.m ={v} &I; yielding - D.2137.lhs.m ={v} &I; */ + D.2137.lhs.m ={v} &I; + so that SRA can promote all locals to registers and we end up + referencing a single virtual operand at abort () after optimization. */ -/* { dg-final { scan-tree-dump-times "D\\\.....\\\..hs\\\.m =" 2 "forwprop1" } } */ -/* { dg-final { cleanup-tree-dump "forwprop1" } } */ +/* { dg-final { scan-tree-dump-times ".MEM_\[0-9\]*\\\(D\\\)" 1 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-10.C b/gcc/testsuite/g++.dg/warn/Wunused-var-10.C new file mode 100644 index 00000000000..ffdb8932790 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-10.C @@ -0,0 +1,42 @@ +// PR c++/44412 +// { dg-do compile } +// { dg-options "-Wunused" } + +struct S +{ + static const int a = 3; + static int b; + int c; +}; + +const int S::a; +int S::b = 4; + +int +f1 () +{ + S s; + return s.a; +} + +int +f2 () +{ + S s; + return s.b; +} + +void +f3 () +{ + S s; // { dg-warning "set but not used" } + s.c = 6; +} + +int +f4 () +{ + S s; + s.c = 6; + return s.c; +} diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-11.C b/gcc/testsuite/g++.dg/warn/Wunused-var-11.C new file mode 100644 index 00000000000..c7c1bf35ff7 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-11.C @@ -0,0 +1,33 @@ +// PR c++/44412 +// { dg-do compile } +// { dg-options "-Wunused" } + +struct S +{ + int foo (); + static int bar (); +}; + +int S::foo () +{ + return 5; +} + +int S::bar () +{ + return 6; +} + +int +f1 () +{ + S s; + return s.foo (); +} + +int +f2 () +{ + S s; + return s.bar (); +} diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-12.C b/gcc/testsuite/g++.dg/warn/Wunused-var-12.C new file mode 100644 index 00000000000..3300cbe3d8a --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-12.C @@ -0,0 +1,36 @@ +// PR c++/44444 +// { dg-do compile } +// { dg-options "-Wunused" } + +struct S +{ + const int &u; + const int &v; + S (const int &a, const int &b) : u(a), v(b) { } +}; + +bool +f1 () +{ + bool t = false; + S z = S (1, 2); + t |= z.u == 1; + t |= z.v == 2; + return t; +} + +void +f2 () +{ + S z = S (1, 2); + z.u; // { dg-warning "no effect" } +} + +int i; + +void +f3 () +{ + S z = S (1, 2); + i++, z.u; // { dg-warning "no effect" } +} diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-13.C b/gcc/testsuite/g++.dg/warn/Wunused-var-13.C new file mode 100644 index 00000000000..43df81d888c --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-13.C @@ -0,0 +1,22 @@ +// PR c++/44619 +// { dg-do compile } +// { dg-options "-Wunused -W" } + +struct S { int x, y; }; + +int +f1 () +{ + struct S p; + int S::*q = &S::x; + p.*q = 5; + return p.*q; +} + +int +f2 (struct S *p, int S::*q) +{ + struct S *r = p; + int S::*s = q; + return r->*s; +} diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-14.C b/gcc/testsuite/g++.dg/warn/Wunused-var-14.C new file mode 100644 index 00000000000..a552b56dad1 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-14.C @@ -0,0 +1,17 @@ +// PR c++/44682 +// { dg-do compile } +// { dg-options "-Wunused" } + +struct S { virtual ~S () {} }; +struct T { virtual ~T () {} }; +struct U : S, T {}; + +void f (U &); + +void +g (void *v) +{ + T *t = static_cast <T *> (v); + U *u = static_cast <U *> (t); + f (*u); +} diff --git a/gcc/testsuite/g++.dg/warn/incomplete2.C b/gcc/testsuite/g++.dg/warn/incomplete2.C index 9fdfcba9479..30be26749c9 100644 --- a/gcc/testsuite/g++.dg/warn/incomplete2.C +++ b/gcc/testsuite/g++.dg/warn/incomplete2.C @@ -3,11 +3,11 @@ class A; // { dg-error "forward declaration" } -int f (A); +int f (A); // { dg-error "initializing" } const A &make (); int main () { - return f (make ()); // { dg-error "invalid use of incomplete type|initializing argument" } + return f (make ()); // { dg-error "invalid use of incomplete type" } } diff --git a/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C b/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C index 14bc32b6a78..6e26ecfa639 100644 --- a/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C +++ b/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C @@ -10,16 +10,15 @@ private: const A& operator =(const A &) { abort(); } }; -class B : public A { // { dg-error "within" } +class B : public A { // { dg-error "" } public: B(void) {} }; -void f(B b) { +void f(B b) { // { dg-error "initializing" } } void g() { B h; - f(h); // { dg-error "argument" "arg" } - // { dg-message "synthesized" "synth" { target *-*-* } 23 } + f(h); // { dg-message "synthesized|deleted" "synth" } } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C index 8d91db67ae8..4290144f89f 100644 --- a/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C @@ -23,9 +23,9 @@ struct0::struct0 (int, void *) // { dg-message "note" } { } -struct struct0_derived_struct_0 : public struct0 { // { dg-error "no matching" } +struct struct0_derived_struct_0 : public struct0 { // { dg-error "no matching|deleted" } }; -struct0_derived_struct_0 object; // { dg-message "synthesized" } +struct0_derived_struct_0 object; // { dg-message "synthesized|deleted" } int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C index 3826e08e009..c06cef18380 100644 --- a/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C @@ -16,7 +16,7 @@ struct t_0_st_0; -struct t_0_st_1 { +struct t_0_st_1 { // { dg-error "initializing" } int member; t_0_st_1 (t_0_st_0&);// { dg-message "note" } @@ -83,7 +83,7 @@ void t_1_local_init () struct t_2_st_0; -struct t_2_st_1 { +struct t_2_st_1 { // { dg-error "initializing" } int member; t_2_st_1 (t_2_st_0); // { dg-message "note" } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/new.C b/gcc/testsuite/g++.old-deja/g++.jason/new.C index d5260ce8eca..905739b1ba3 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/new.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/new.C @@ -3,10 +3,10 @@ #include <new> extern "C" int printf (const char *, ...); -extern "C" void *malloc (size_t); -size_t s; +extern "C" void *malloc (std::size_t); +std::size_t s; -void * operator new (size_t siz) throw (std::bad_alloc) { +void * operator new (std::size_t siz) throw (std::bad_alloc) { if (s == 0) s = siz; else diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C index 7a50abb2567..b4e6e2550c0 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C @@ -1,7 +1,7 @@ // { dg-do assemble } // Bug: g++ generates code for assignment in invalid situations. -class X { // { dg-error "assignment" } +class X { // { dg-error "reference|operator=" } int& a; public: X(int& i): a(i) { } @@ -11,5 +11,5 @@ void foo () { int one=1, two=2; X a(one), b(two); - a = b; // { dg-message "synthesized" } + a = b; // { dg-message "synthesized|deleted" } } diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors17.C b/gcc/testsuite/g++.old-deja/g++.law/ctors17.C index 3d63d01c0a9..0d61c49abd7 100644 --- a/gcc/testsuite/g++.old-deja/g++.law/ctors17.C +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors17.C @@ -6,10 +6,12 @@ // Subject: gcc 2.4.3.1: illegal constructor call not rejected // Date: Tue, 15 Jun 1993 18:34:14 +0200 (MET DST) +// C++0x mode doesn't print the deleted copy constructor as a candidate. +// { dg-prune-output ":14:" } #include <fstream> -class X : public std::ifstream { // { dg-message "note" } candidate +class X : public std::ifstream { public: X(int a, const char *b) {} // { dg-message "note" } candidate }; diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors5.C b/gcc/testsuite/g++.old-deja/g++.law/ctors5.C index 7c376229b69..7b2c782b30b 100644 --- a/gcc/testsuite/g++.old-deja/g++.law/ctors5.C +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors5.C @@ -5,7 +5,7 @@ // Subject: bug in handling static const object of the enclosing class // Date: Tue, 1 Sep 92 10:38:44 EDT -class X // { dg-message "7:X::X\\(const X&\\)" } implicit constructor +class X // { dg-message "7:X::X" } implicit constructor { private: int x; diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators27.C b/gcc/testsuite/g++.old-deja/g++.law/operators27.C index c284a2a3cde..5fb3a74cbfa 100644 --- a/gcc/testsuite/g++.old-deja/g++.law/operators27.C +++ b/gcc/testsuite/g++.old-deja/g++.law/operators27.C @@ -12,7 +12,7 @@ int FLAG=0; extern "C" int printf( const char *, ...); -void * operator new(size_t, const std::nothrow_t&) throw() { FLAG=1; return 0; } +void * operator new(std::size_t, const std::nothrow_t&) throw() { FLAG=1; return 0; } class K { private: diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p755.C b/gcc/testsuite/g++.old-deja/g++.mike/p755.C index bf4302b797e..28eeefad43d 100644 --- a/gcc/testsuite/g++.old-deja/g++.mike/p755.C +++ b/gcc/testsuite/g++.old-deja/g++.mike/p755.C @@ -6,7 +6,7 @@ extern "C" void _exit(int); -void* operator new(size_t sz) throw (std::bad_alloc) { +void* operator new(std::size_t sz) throw (std::bad_alloc) { void* p = 0; _exit(0); return p; diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C index 3912dbad5ed..368a87a2a9a 100644 --- a/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C +++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete1.C @@ -28,5 +28,4 @@ struct baz : foo { virtual ~baz() {} // { dg-error "" } delete is private in vdtor } baz_; -struct bad : baz {} bad_; // { dg-error "" } delete is private in vdtor -// { dg-message "synthesized" "note" { target *-*-* } 31 } +struct bad : baz {} bad_; // { dg-message "" } delete is private in vdtor diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C index 4c1db253bbc..c50b1b7d6be 100644 --- a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C +++ b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf2.C @@ -1,5 +1,4 @@ // { dg-do assemble } -// { dg-xfail-if "" { i386-pc-solaris* } { "*" } { "" } } // Copyright (C) 1999 Free Software Foundation diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C index 3c01238a38e..bbe5b0c9c57 100644 --- a/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C +++ b/gcc/testsuite/g++.old-deja/g++.oliva/dwarf3.C @@ -1,5 +1,4 @@ // { dg-do assemble } -// { dg-xfail-if "" { i386-pc-solaris* } { "*" } { "" } } // Copyright (C) 1999 Free Software Foundation diff --git a/gcc/testsuite/g++.old-deja/g++.other/delete3.C b/gcc/testsuite/g++.old-deja/g++.other/delete3.C index 469d6382eae..9c6c58e966e 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/delete3.C +++ b/gcc/testsuite/g++.old-deja/g++.other/delete3.C @@ -16,7 +16,7 @@ map<T, U>::~map () struct SomeClass { }; -void* operator new(size_t numBytes, SomeClass&, const std::nothrow_t&) throw() +void* operator new(std::size_t numBytes, SomeClass&, const std::nothrow_t&) throw() { return operator new(numBytes, std::nothrow); } diff --git a/gcc/testsuite/g++.old-deja/g++.other/init19.C b/gcc/testsuite/g++.old-deja/g++.other/init19.C index 6d9c8290ed3..1c686841243 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/init19.C +++ b/gcc/testsuite/g++.old-deja/g++.other/init19.C @@ -1,4 +1,4 @@ -// { dg-do run { xfail { ! cxa_atexit } } } +// { dg-do run { xfail { { ! cxa_atexit } && { ! *-*-solaris2* } } } } #include <stdlib.h> #define assert(x) do { if (! (x)) abort(); } while (0) diff --git a/gcc/testsuite/g++.old-deja/g++.other/new.C b/gcc/testsuite/g++.old-deja/g++.other/new.C index c3d77c6ca63..3c3494ef759 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/new.C +++ b/gcc/testsuite/g++.old-deja/g++.other/new.C @@ -3,12 +3,12 @@ #include <new> inline void * -operator new(size_t alloc_sz, const char *fname, unsigned lineno) +operator new(std::size_t alloc_sz, const char *fname, unsigned lineno) { return ::operator new (alloc_sz); } inline void * -operator new[](size_t alloc_sz, const char *fname, unsigned lineno) +operator new[](std::size_t alloc_sz, const char *fname, unsigned lineno) { return ::operator new[] (alloc_sz); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/assign1.C b/gcc/testsuite/g++.old-deja/g++.pt/assign1.C index 464b7c692d0..854d8ee27a9 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/assign1.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/assign1.C @@ -2,7 +2,7 @@ // Origin: Mark Mitchell <mark@codesourcery.com> template <class T> -struct S { // { dg-error "assignment" } +struct S { // { dg-error "const|operator=" } S(); T t; }; @@ -10,5 +10,5 @@ struct S { // { dg-error "assignment" } void f() { S<const int> s; - s = s; // { dg-message "synthesized" } + s = s; // { dg-message "synthesized|deleted" } } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C b/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C index 37af9ca434e..3a587d8738e 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/auto_ptr.C @@ -44,7 +44,7 @@ struct Derived : Base { Derived() {} }; auto_ptr<Derived> f() { auto_ptr<Derived> null(0); return null; } void g(auto_ptr<Derived>) { } -void h(auto_ptr<Base>) { } +void h(auto_ptr<Base>) { } // { dg-error "initializing" } int main() { auto_ptr<Base> x(f()); @@ -52,5 +52,4 @@ int main() { x = y; g(f()); h(f()); // { dg-error "match" "match" } no usable copy ctor -// { dg-error "initializing" "init" { target *-*-* } 54 } } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash20.C b/gcc/testsuite/g++.old-deja/g++.pt/crash20.C index 0a3220921ce..a5175b9909b 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/crash20.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash20.C @@ -1,8 +1,7 @@ // { dg-do compile } template <class T = int> -struct A { // { dg-error "assignment" "assignment" } -// { dg-message "instantiated" "inst" { target *-*-* } 4 } +struct A { // { dg-message "const|operator=" "assignment" } const T x; A() : x(0) { } A(T x) : x(x) { } }; @@ -11,7 +10,7 @@ template <class B> void func () { B y; - y = B(); // { dg-message "synthesized" } + y = B(); // { dg-message "synthesized|deleted" } } int main (void) { func< A<> >(); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash9.C b/gcc/testsuite/g++.old-deja/g++.pt/crash9.C index 20bd7584fdd..f2d811dda1a 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/crash9.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash9.C @@ -1,11 +1,11 @@ // { dg-do assemble } template <class T> -void f(T) {} +void f(T) {} // { dg-error "initializing" } class C; // { dg-error "forward declaration" } void g(const C& c) { - f(c); // { dg-error "invalid use of incomplete type|initializing argument" } + f(c); // { dg-error "invalid use of incomplete type" } } diff --git a/gcc/testsuite/gcc.c-torture/compile/20100609-1.c b/gcc/testsuite/gcc.c-torture/compile/20100609-1.c new file mode 100644 index 00000000000..8e1175faa32 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20100609-1.c @@ -0,0 +1,8 @@ +extern unsigned long int strtoul (__const char *__restrict __nptr, char **__restrict __endptr, int __base); +int find_reloads (int i, char *p) +{ + int c; + while ((c = *p++)) + return strtoul (p - 1, &p, 10); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pc44485.c b/gcc/testsuite/gcc.c-torture/compile/pc44485.c new file mode 100644 index 00000000000..fc959257dd3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pc44485.c @@ -0,0 +1,46 @@ +static int +foo (int si1, int si2) +{ + return si1 > 0 && si2 > 0 && si1 > -si2 || si1 < 0 && si2 < 0 + && si1 < -si2 ? : si1 + si2; +} + +struct S0 +{ + unsigned short f1; +}; +int g_4; +struct S0 g_54 = { + 3428 +}; + +int +func_21 (int * p_22, int * const int32p_24, unsigned p_25, + const int * p_26); + +void int324 (unsigned p_15, int * p_16, int * p_17, int * p_18) +{ + if (foo (g_4, func_21 (p_18, &g_4, 0, 0))) + { + for (g_54.f1; g_54.f1; g_54.f1 += 1) + { + } + } +} + +int +func_21 (int * p_22, int * const int32p_24, unsigned p_25, + const int * p_26) +{ + for (0; 1; p_25 += 1) + lbl_29:if (p_25) + goto lbl_28; +lbl_28:for (p_25 = 0; p_25 < 9; p_25 += 1) + if (p_25) + goto lbl_29; + unsigned short l_53; + for (0; l_53; l_53 = foo) + { + } + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44686.c b/gcc/testsuite/gcc.c-torture/compile/pr44686.c new file mode 100644 index 00000000000..eacd83d3130 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr44686.c @@ -0,0 +1,7 @@ +/* { dg-options "-O2 -fipa-pta -fprofile-generate" } */ +void * +memcpy (void *a, const void *b, __SIZE_TYPE__ len) +{ + if (a == b) + __builtin_abort (); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44687.c b/gcc/testsuite/gcc.c-torture/compile/pr44687.c new file mode 100644 index 00000000000..f59c2efd0f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr44687.c @@ -0,0 +1,32 @@ +typedef int int32_t; +typedef unsigned char uint8_t; +struct S0 +{ + uint8_t f0; +}; +struct S0 *g_18[7][5][1][1] = { +}; + +struct S0 **g_17 = &g_18[0][3][0][0]; +int32_t g_86; +struct S0 func_72 (uint8_t p_73, struct S0 p_74); + +void int326 (struct S0 **p_67, int32_t p_68, int32_t * *const p_69, + struct S0 *p_70) +{ + struct S0 l_95 = { + -1L + }; + func_72 (1L, func_72 (0, l_95)); +} + +struct S0 +func_72 (uint8_t p_73, struct S0 p_74) +{ + int32_t *l_85 = &g_86; + if (*l_85) + lbl_94:*l_85 ^= 0; + if (g_86) + goto lbl_94; + return **g_17; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20100316-1.c b/gcc/testsuite/gcc.c-torture/execute/20100316-1.c new file mode 100644 index 00000000000..8367d7273d2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20100316-1.c @@ -0,0 +1,24 @@ +struct Foo { + int i; + unsigned precision : 10; + unsigned blah : 3; +} f; + +int __attribute__((noinline,noclone)) +foo (struct Foo *p) +{ + struct Foo *q = p; + return (*q).precision; +} + +extern void abort (void); + +int main() +{ + f.i = -1; + f.precision = 0; + f.blah = -1; + if (foo (&f) != 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960321-1.x b/gcc/testsuite/gcc.c-torture/execute/960321-1.x new file mode 100644 index 00000000000..44cc702686d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960321-1.x @@ -0,0 +1,15 @@ +# This test fails to link on 64-bit Solaris 2/x86 due to a Sun as bug. +if { [istarget "i?86-*-solaris2*"] + && ! [check_effective_target_ilp32] + && ! [check_effective_target_gas] } { + set torture_eval_before_compile { + global compiler_conditional_xfail_data + set compiler_conditional_xfail_data { + "64-bit Sun as bug" \ + { "i?86-*-solaris2*" } \ + { "-O[1-3s]" } \ + { "" } + } + } +} +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/frame-address.c b/gcc/testsuite/gcc.c-torture/execute/frame-address.c index 942f5c5d653..109c2b229c8 100644 --- a/gcc/testsuite/gcc.c-torture/execute/frame-address.c +++ b/gcc/testsuite/gcc.c-torture/execute/frame-address.c @@ -25,7 +25,8 @@ int check_fa (char *unused) { const char c = 0; - return check_fa_mid (&c); + /* Prevent a tail call to check_fa_mid, eliding the current stack frame. */ + return check_fa_mid (&c) != 0; } int how_much (void) diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44468.c b/gcc/testsuite/gcc.c-torture/execute/pr44468.c new file mode 100644 index 00000000000..c4bd492656d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr44468.c @@ -0,0 +1,60 @@ +#include <stddef.h> + +struct S { + int i; + int j; +}; +struct R { + int k; + struct S a; +}; +struct Q { + float k; + struct S a; +}; +struct Q s; +int __attribute__((noinline,noclone)) +test1 (void *q) +{ + struct S *b = (struct S *)((char *)q + sizeof (int)); + s.a.i = 0; + b->i = 3; + return s.a.i; +} +int __attribute__((noinline,noclone)) +test2 (void *q) +{ + struct S *b = &((struct R *)q)->a; + s.a.i = 0; + b->i = 3; + return s.a.i; +} +int __attribute__((noinline,noclone)) +test3 (void *q) +{ + s.a.i = 0; + ((struct S *)((char *)q + sizeof (int)))->i = 3; + return s.a.i; +} +extern void abort (void); +int +main() +{ + if (sizeof (float) != sizeof (int) + || offsetof (struct R, a) != sizeof (int) + || offsetof (struct Q, a) != sizeof (int)) + return 0; + s.a.i = 1; + s.a.j = 2; + if (test1 ((void *)&s) != 3) + abort (); + s.a.i = 1; + s.a.j = 2; + if (test2 ((void *)&s) != 3) + abort (); + s.a.i = 1; + s.a.j = 2; + if (test3 ((void *)&s) != 3) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44555.c b/gcc/testsuite/gcc.c-torture/execute/pr44555.c new file mode 100644 index 00000000000..6ba8e491971 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr44555.c @@ -0,0 +1,16 @@ +struct a { + char b[100]; +}; +int foo(struct a *a) +{ + if (&a->b) + return 1; + return 0; +} +extern void abort (void); +int main() +{ + if (foo((struct a *)0) != 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44575.c b/gcc/testsuite/gcc.c-torture/execute/pr44575.c new file mode 100644 index 00000000000..62a7d7800b0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr44575.c @@ -0,0 +1,49 @@ +/* PR target/44575 */ + +#include <stdarg.h> + +int fails = 0; +struct S { float a[3]; }; +struct S a[5]; + +void +check (int z, ...) +{ + struct S arg, *p; + va_list ap; + int j = 0, k = 0; + int i; + va_start (ap, z); + for (i = 2; i < 4; ++i) + { + p = 0; + j++; + k += 2; + switch ((z << 4) | i) + { + case 0x12: + case 0x13: + p = &a[2]; + arg = va_arg (ap, struct S); + break; + default: + ++fails; + break; + } + if (p && p->a[2] != arg.a[2]) + ++fails; + if (fails) + break; + } + va_end (ap); +} + +int +main () +{ + a[2].a[2] = -49026; + check (1, a[2], a[2]); + if (fails) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44683.c b/gcc/testsuite/gcc.c-torture/execute/pr44683.c new file mode 100644 index 00000000000..d0fd446f004 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr44683.c @@ -0,0 +1,18 @@ +int __attribute__((noinline,noclone)) +copysign_bug (double x) +{ + if (x != 0.0 && (x * 0.5 == x)) + return 1; + if (__builtin_copysign(1.0, x) < 0.0) + return 2; + else + return 3; +} +int main(void) +{ + double x = -0.0; + if (copysign_bug (x) != 2) + __builtin_abort (); + return 0; +} + diff --git a/gcc/testsuite/gcc.dg/assign-warn-1.c b/gcc/testsuite/gcc.dg/assign-warn-1.c index a0cfd890f10..ae70242edd4 100644 --- a/gcc/testsuite/gcc.dg/assign-warn-1.c +++ b/gcc/testsuite/gcc.dg/assign-warn-1.c @@ -12,11 +12,11 @@ typedef void (*fp)(void); typedef void (*nrfp)(void) __attribute__((noreturn)); -TESTARG(fqa, nrfp, fp); /* { dg-warning "passing argument 1 of 'fqaF' makes qualified function pointer from unqualified" } */ -TESTARP(fqb, nrfp, fp); /* { dg-warning "passing argument 1 of 'fqbFp.x' makes qualified function pointer from unqualified" } */ -TESTASS(fqc, nrfp, fp); /* { dg-warning "assignment makes qualified function pointer from unqualified" } */ -TESTINI(fqd, nrfp, fp); /* { dg-warning "initialization makes qualified function pointer from unqualified" } */ -TESTRET(fqe, nrfp, fp); /* { dg-warning "return makes qualified function pointer from unqualified" } */ +TESTARG(fqa, nrfp, fp); /* { dg-warning "passing argument 1 of 'fqaF' makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTARP(fqb, nrfp, fp); /* { dg-warning "passing argument 1 of 'fqbFp.x' makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTASS(fqc, nrfp, fp); /* { dg-warning "assignment makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTINI(fqd, nrfp, fp); /* { dg-warning "initialization makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTRET(fqe, nrfp, fp); /* { dg-warning "return makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ TESTARG(ofqa, fp, nrfp); TESTARP(ofqb, fp, nrfp); @@ -24,11 +24,11 @@ TESTASS(ofqc, fp, nrfp); TESTINI(ofqd, fp, nrfp); TESTRET(ofqe, fp, nrfp); -TESTARG(qa, char *, const char *); /* { dg-warning "passing argument 1 of 'qaF' discards qualifiers from pointer target type" } */ -TESTARP(qb, char *, const char *); /* { dg-warning "passing argument 1 of 'qbFp.x' discards qualifiers from pointer target type" } */ -TESTASS(qc, char *, const char *); /* { dg-warning "assignment discards qualifiers from pointer target type" } */ -TESTINI(qd, char *, const char *); /* { dg-warning "initialization discards qualifiers from pointer target type" } */ -TESTRET(qe, char *, const char *); /* { dg-warning "return discards qualifiers from pointer target type" } */ +TESTARG(qa, char *, const char *); /* { dg-warning "passing argument 1 of 'qaF' discards 'const' qualifier from pointer target type" } */ +TESTARP(qb, char *, const char *); /* { dg-warning "passing argument 1 of 'qbFp.x' discards 'const' qualifier from pointer target type" } */ +TESTASS(qc, char *, const char *); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ +TESTINI(qd, char *, const char *); /* { dg-warning "initialization discards 'const' qualifier from pointer target type" } */ +TESTRET(qe, char *, const char *); /* { dg-warning "return discards 'const' qualifier from pointer target type" } */ TESTARG(oqa, const char *, char *); TESTARP(oqb, const char *, char *); diff --git a/gcc/testsuite/gcc.dg/assign-warn-2.c b/gcc/testsuite/gcc.dg/assign-warn-2.c index f3d861d7405..7813b72869d 100644 --- a/gcc/testsuite/gcc.dg/assign-warn-2.c +++ b/gcc/testsuite/gcc.dg/assign-warn-2.c @@ -13,11 +13,11 @@ typedef void (*fp)(void); typedef void (*nrfp)(void) __attribute__((noreturn)); -TESTARG(fqa, nrfp, fp); /* { dg-error "passing argument 1 of 'fqaF' makes qualified function pointer from unqualified" } */ -TESTARP(fqb, nrfp, fp); /* { dg-error "passing argument 1 of 'fqbFp.x' makes qualified function pointer from unqualified" } */ -TESTASS(fqc, nrfp, fp); /* { dg-error "assignment makes qualified function pointer from unqualified" } */ -TESTINI(fqd, nrfp, fp); /* { dg-error "initialization makes qualified function pointer from unqualified" } */ -TESTRET(fqe, nrfp, fp); /* { dg-error "return makes qualified function pointer from unqualified" } */ +TESTARG(fqa, nrfp, fp); /* { dg-error "passing argument 1 of 'fqaF' makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTARP(fqb, nrfp, fp); /* { dg-error "passing argument 1 of 'fqbFp.x' makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTASS(fqc, nrfp, fp); /* { dg-error "assignment makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTINI(fqd, nrfp, fp); /* { dg-error "initialization makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ +TESTRET(fqe, nrfp, fp); /* { dg-error "return makes '__attribute__..noreturn..' qualified function pointer from unqualified" } */ TESTARG(ofqa, fp, nrfp); TESTARP(ofqb, fp, nrfp); @@ -25,11 +25,11 @@ TESTASS(ofqc, fp, nrfp); TESTINI(ofqd, fp, nrfp); TESTRET(ofqe, fp, nrfp); -TESTARG(qa, char *, const char *); /* { dg-error "passing argument 1 of 'qaF' discards qualifiers from pointer target type" } */ -TESTARP(qb, char *, const char *); /* { dg-error "passing argument 1 of 'qbFp.x' discards qualifiers from pointer target type" } */ -TESTASS(qc, char *, const char *); /* { dg-error "assignment discards qualifiers from pointer target type" } */ -TESTINI(qd, char *, const char *); /* { dg-error "initialization discards qualifiers from pointer target type" } */ -TESTRET(qe, char *, const char *); /* { dg-error "return discards qualifiers from pointer target type" } */ +TESTARG(qa, char *, const char *); /* { dg-error "passing argument 1 of 'qaF' discards 'const' qualifier from pointer target type" } */ +TESTARP(qb, char *, const char *); /* { dg-error "passing argument 1 of 'qbFp.x' discards 'const' qualifier from pointer target type" } */ +TESTASS(qc, char *, const char *); /* { dg-error "assignment discards 'const' qualifier from pointer target type" } */ +TESTINI(qd, char *, const char *); /* { dg-error "initialization discards 'const' qualifier from pointer target type" } */ +TESTRET(qe, char *, const char *); /* { dg-error "return discards 'const' qualifier from pointer target type" } */ TESTARG(oqa, const char *, char *); TESTARP(oqb, const char *, char *); diff --git a/gcc/testsuite/gcc.dg/c90-const-expr-10.c b/gcc/testsuite/gcc.dg/c90-const-expr-10.c index bad388c90b1..30c60e31f90 100644 --- a/gcc/testsuite/gcc.dg/c90-const-expr-10.c +++ b/gcc/testsuite/gcc.dg/c90-const-expr-10.c @@ -8,7 +8,7 @@ __extension__ typedef __SIZE_TYPE__ size_t; void *p = (size_t)(void *)0; /* { dg-error "without a cast" } */ -struct s { void *a; } q = { (size_t)(void *)0 }; /* { dg-error "without a cast" } */ +struct s { void *a; } q = { (size_t)(void *)0 }; /* { dg-error "without a cast|near initialization" } */ void * f (void) { diff --git a/gcc/testsuite/gcc.dg/c99-array-lval-8.c b/gcc/testsuite/gcc.dg/c99-array-lval-8.c index b5048b66a77..c4e202ef301 100644 --- a/gcc/testsuite/gcc.dg/c99-array-lval-8.c +++ b/gcc/testsuite/gcc.dg/c99-array-lval-8.c @@ -12,15 +12,15 @@ f (void) const struct { int a[1]; } s; - int *p1 = s.a; /* { dg-error "qualifiers" } */ + int *p1 = s.a; /* { dg-error "qualifier" } */ int *p2 = (a ? s : s).a; /* In this case, the qualifier is properly on the array element type not on the rvalue structure and so is not discarded. */ struct { const int a[1]; } t; - int *p3 = t.a; /* { dg-error "qualifiers" } */ - int *p4 = (a ? t : t).a; /* { dg-error "qualifiers" } */ + int *p3 = t.a; /* { dg-error "qualifier" } */ + int *p4 = (a ? t : t).a; /* { dg-error "qualifier" } */ /* The issue could also lead to code being wrongly accepted. */ const struct { int a[1][1]; diff --git a/gcc/testsuite/gcc.dg/c99-arraydecl-3.c b/gcc/testsuite/gcc.dg/c99-arraydecl-3.c index 2ab927d6ab2..9f383b9c3bb 100644 --- a/gcc/testsuite/gcc.dg/c99-arraydecl-3.c +++ b/gcc/testsuite/gcc.dg/c99-arraydecl-3.c @@ -7,7 +7,7 @@ void f0 (int a[restrict]) { - int **b = &a; /* { dg-error "discards qualifiers" } */ + int **b = &a; /* { dg-error "discards 'restrict' qualifier" } */ int *restrict *c = &a; } @@ -15,6 +15,6 @@ void f1 (a) int a[restrict]; { - int **b = &a; /* { dg-error "discards qualifiers" } */ + int **b = &a; /* { dg-error "discards 'restrict' qualifier" } */ int *restrict *c = &a; } diff --git a/gcc/testsuite/gcc.dg/c99-const-expr-10.c b/gcc/testsuite/gcc.dg/c99-const-expr-10.c index 8e5a1043d29..2aca6106a47 100644 --- a/gcc/testsuite/gcc.dg/c99-const-expr-10.c +++ b/gcc/testsuite/gcc.dg/c99-const-expr-10.c @@ -6,7 +6,7 @@ /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ void *p = (__SIZE_TYPE__)(void *)0; /* { dg-error "without a cast" } */ -struct s { void *a; } q = { (__SIZE_TYPE__)(void *)0 }; /* { dg-error "without a cast" } */ +struct s { void *a; } q = { (__SIZE_TYPE__)(void *)0 }; /* { dg-error "without a cast|near initialization" } */ void * f (void) { diff --git a/gcc/testsuite/gcc.dg/c99-restrict-4.c b/gcc/testsuite/gcc.dg/c99-restrict-4.c new file mode 100644 index 00000000000..5852d0a1127 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c99-restrict-4.c @@ -0,0 +1,17 @@ +/* Qualifiers lost when taking the address of a const restrict object. + PR 44322. */ +/* { dg-do compile } */ +/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ +void * restrict const a[2]; +void * restrict const (*p2)[2]; + +void foo(void) { + p2 = &a; +} + +void * restrict volatile b[2]; +void * restrict volatile (*q2)[2]; + +void bar(void) { + q2 = &b; +} diff --git a/gcc/testsuite/gcc.dg/cast-qual-2.c b/gcc/testsuite/gcc.dg/cast-qual-2.c index 0be1d617176..5fd2b854d61 100644 --- a/gcc/testsuite/gcc.dg/cast-qual-2.c +++ b/gcc/testsuite/gcc.dg/cast-qual-2.c @@ -18,8 +18,8 @@ intfn_t *i2 = (intfn_t *) intfn; intfn_t *i3 = constfn; intfn_t *i4 = (intfn_t *) constfn; /* { dg-bogus "discards qualifier" } */ -constfn_t p1 = intfn; /* { dg-warning "makes qualified function" } */ -constfn_t p2 = (constfn_t) intfn; /* { dg-warning "new qualifier" } */ +constfn_t p1 = intfn; /* { dg-warning "makes '__attribute__..const..' qualified function" } */ +constfn_t p2 = (constfn_t) intfn; /* { dg-warning "adds '__attribute__..const..' qualifier" } */ constfn_t p3 = constfn; constfn_t p4 = (constfn_t) constfn; @@ -28,7 +28,7 @@ voidfn_t *v2 = (voidfn_t *) voidfn; voidfn_t *v3 = noreturnfn; voidfn_t *v4 = (voidfn_t *) noreturnfn; /* { dg-bogus "discards qualifier" } */ -noreturnfn_t n1 = voidfn; /* { dg-warning "makes qualified function" } */ -noreturnfn_t n2 = (noreturnfn_t) voidfn; /* { dg-warning "new qualifier" } */ +noreturnfn_t n1 = voidfn; /* { dg-warning "makes '__attribute__..noreturn..' qualified function" } */ +noreturnfn_t n2 = (noreturnfn_t) voidfn; /* { dg-warning "adds '__attribute__..noreturn..' qualifier" } */ noreturnfn_t n3 = noreturnfn; noreturnfn_t n4 = (noreturnfn_t) noreturnfn; diff --git a/gcc/testsuite/gcc.dg/compound-literal-1.c b/gcc/testsuite/gcc.dg/compound-literal-1.c index 6c644d46ea3..9b3b24e254e 100644 --- a/gcc/testsuite/gcc.dg/compound-literal-1.c +++ b/gcc/testsuite/gcc.dg/compound-literal-1.c @@ -2,7 +2,7 @@ /* PR c/43248 */ -int foo(__SIZE_TYPE__ i) +__extension__ int foo(__SIZE_TYPE__ i) { i ? : (void *){}; /* { dg-error "" } */ } diff --git a/gcc/testsuite/gcc.dg/cpp/line3.c b/gcc/testsuite/gcc.dg/cpp/line3.c index 7a1061478d4..4b40e4a6a95 100644 --- a/gcc/testsuite/gcc.dg/cpp/line3.c +++ b/gcc/testsuite/gcc.dg/cpp/line3.c @@ -13,14 +13,14 @@ main(void) { char *A; - A = "text"; /* { dg-warning "discards qualifiers" "case zero" } */ - A = one("text" /* { dg-warning "discards qualifiers" "case one" } */ + A = "text"; /* { dg-warning "discards 'const' qualifier" "case zero" } */ + A = one("text" /* { dg-warning "discards 'const' qualifier" "case one" } */ "text") ; - A = two("text" /* { dg-warning "discards qualifiers" "case two" } */ + A = two("text" /* { dg-warning "discards 'const' qualifier" "case two" } */ "text") ; - A = four("text" /* { dg-warning "discards qualifiers" "case four" } */ + A = four("text" /* { dg-warning "discards 'const' qualifier" "case four" } */ "text") ; diff --git a/gcc/testsuite/gcc.dg/format/gcc_diag-1.c b/gcc/testsuite/gcc.dg/format/gcc_diag-1.c index 46013c8699e..f88965fe659 100644 --- a/gcc/testsuite/gcc.dg/format/gcc_diag-1.c +++ b/gcc/testsuite/gcc.dg/format/gcc_diag-1.c @@ -70,13 +70,13 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, cdiag ("%m"); cxxdiag ("%m"); - tdiag ("%D%F%T", t1, t1, t1); - tdiag ("%+D%+F%+T", t1, t1, t1); - tdiag ("%q+D%q+F%q+T", t1, t1, t1); + tdiag ("%D%F%T%V", t1, t1, t1, t1); + tdiag ("%+D%+F%+T%+V", t1, t1, t1, t1); + tdiag ("%q+D%q+F%q+T%q+V", t1, t1, t1, t1); tdiag ("%D%D%D%D", t1, t2, *t3, t4[5]); - cdiag ("%D%F%T", t1, t1, t1); - cdiag ("%+D%+F%+T", t1, t1, t1); - cdiag ("%q+D%q+F%q+T", t1, t1, t1); + cdiag ("%D%F%T%V", t1, t1, t1, t1); + cdiag ("%+D%+F%+T%+V", t1, t1, t1, t1); + cdiag ("%q+D%q+F%q+T%q+V", t1, t1, t1, t1); cdiag ("%D%D%D%D", t1, t2, *t3, t4[5]); cdiag ("%E", t1); cxxdiag ("%A%D%E%F%T%V", t1, t1, t1, t1, t1, t1); @@ -86,6 +86,10 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, cxxdiag ("%+#A%+#D%+#E%+#F%+#T%+#V", t1, t1, t1, t1, t1, t1); cxxdiag ("%C%L%O%P%Q", i, i, i, i, i); + tdiag ("%v%qv%#v", i, i, i); + cdiag ("%v%qv%#v", i, i, i); + cxxdiag ("%v%qv%#v", i, i, i); + /* Bad stuff with extensions. */ diag ("%m", i); /* { dg-warning "format" "extra arg" } */ tdiag ("%m", i); /* { dg-warning "format" "extra arg" } */ @@ -121,6 +125,14 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, cdiag ("%D", t1, t1); /* { dg-warning "format" "extra arg" } */ cxxdiag ("%D", t1, t1); /* { dg-warning "format" "extra arg" } */ + tdiag ("%V", i); /* { dg-warning "format" "wrong arg" } */ + cdiag ("%V", i); /* { dg-warning "format" "wrong arg" } */ + cxxdiag ("%V", i); /* { dg-warning "format" "wrong arg" } */ + + tdiag ("%v", t1); /* { dg-warning "format" "wrong arg" } */ + cdiag ("%v", t1); /* { dg-warning "format" "wrong arg" } */ + cxxdiag ("%v", t1); /* { dg-warning "format" "wrong arg" } */ + /* Standard specifiers not accepted in the diagnostic framework. */ diag ("%X\n", u); /* { dg-warning "format" "HEX" } */ diag ("%f\n", d); /* { dg-warning "format" "float" } */ diff --git a/gcc/testsuite/gcc.dg/funroll-loops-all.c b/gcc/testsuite/gcc.dg/funroll-loops-all.c index c6276759e6c..9cdc9017255 100644 --- a/gcc/testsuite/gcc.dg/funroll-loops-all.c +++ b/gcc/testsuite/gcc.dg/funroll-loops-all.c @@ -1,4 +1,4 @@ /* PR 17594 */ /* { dg-do compile } */ /* { dg-options "-funroll-loops-all" } */ -/* { dg-error "unrecognized command line option \"-funroll-loops-all\"" "" { target *-*-* } 0 } */ +/* { dg-error "unrecognized command line option '-funroll-loops-all'" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.dg/graphite/pr44391.c b/gcc/testsuite/gcc.dg/graphite/pr44391.c new file mode 100644 index 00000000000..91b3afa175a --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr44391.c @@ -0,0 +1,7 @@ +/* { dg-options "-Os -m32 -fgraphite-identity -ffast-math" } */ + +void byte_insert_op1 (unsigned char *loc, unsigned char *end, unsigned *pto) +{ + while (end != loc) + *pto = *--end; +} diff --git a/gcc/testsuite/gcc.dg/init-bad-7.c b/gcc/testsuite/gcc.dg/init-bad-7.c new file mode 100644 index 00000000000..738ed605060 --- /dev/null +++ b/gcc/testsuite/gcc.dg/init-bad-7.c @@ -0,0 +1,11 @@ +/* PR c/37724 */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99 -pedantic" } */ + +struct f +{ + int *a; +}; + +char b[10]; +struct f g = {b}; /* { dg-warning "initialization from incompatible pointer type|near initialization for" } */ diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c b/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c new file mode 100644 index 00000000000..c9a766d9e8f --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fipa-sra -fdump-tree-eipa_sra-slim" } */ + +struct bovid +{ + float a; + int b; + struct bovid *next; +}; + +static int +__attribute__((noinline)) +foo (struct bovid *cow, int i) +{ + i++; + if (cow->next) + foo (cow->next, i); + return i; +} + +int main (int argc, char *argv[]) +{ + struct bovid cow; + + cow.a = 7.4; + cow.b = 6; + cow.next = (struct bovid *) 0; + + return foo (&cow, 0); +} + +/* { dg-final { scan-tree-dump-times "foo " 1 "eipa_sra" } } */ diff --git a/gcc/testsuite/gcc.dg/ipa/modif-1.c b/gcc/testsuite/gcc.dg/ipa/modif-1.c deleted file mode 100644 index db6915a9d9e..00000000000 --- a/gcc/testsuite/gcc.dg/ipa/modif-1.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Verify that modification analysis detects modfications. */ -/* { dg-do compile } */ -/* { dg-options "-O3 -c -fdump-ipa-inline-details -fno-early-inlining" } */ - -struct whatever -{ - int first; - unsigned second; -}; - -void func1 (struct whatever w); -void func2 (struct whatever *pw); -void func3 (int i); -void func4 (int *pi); - -void the_test (struct whatever u, struct whatever v, - struct whatever w, struct whatever x, - int i, int k, int l) -{ - struct whatever *pw = &w; - int *pk = &k; - - v.first = 9; - - func1 (u); - func1 (v); - func2 (pw); - func2 (&x); - func3 (i); - func4 (pk); - func4 (&l); -} - -/* { dg-final { scan-ipa-dump-not "param 0\[^\\n\]*modified" "inline" } } */ -/* { dg-final { scan-ipa-dump "param 1\[^\\n\]*modified" "inline" } } */ -/* { dg-final { scan-ipa-dump "param 2\[^\\n\]*modified" "inline" } } */ -/* { dg-final { scan-ipa-dump "param 3\[^\\n\]*modified" "inline" } } */ -/* { dg-final { scan-ipa-dump-not "param 4\[^\\n\]*modified" "inline" } } */ -/* { dg-final { scan-ipa-dump "param 5\[^\\n\]*modified" "inline" } } */ -/* { dg-final { scan-ipa-dump "param 6\[^\\n\]*modified" "inline" } } */ -/* { dg-final { cleanup-ipa-dump "inline" } } */ diff --git a/gcc/testsuite/gcc.dg/ipa/pure-const-1.c b/gcc/testsuite/gcc.dg/ipa/pure-const-1.c new file mode 100644 index 00000000000..51837ea9bad --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pure-const-1.c @@ -0,0 +1,80 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-local-pure-const1 -fdump-ipa-pure-const -fdump-tree-optimized -fno-early-inlining" } */ +void abort (void); +int error_code; +static int val; +__attribute__ ((noinline, noclone)) +static int +i_am_pure1 (int a) +{ + if (a > 50) + abort (); + return a; +} + +__attribute__ ((noinline, noclone)) +static int +i_am_const2 (int a) +{ + return a+val; +} + +__attribute__ ((noinline, noclone)) +int +call_me(int a) +{ + return a; +} + +inline int +call_callback(int (*fn)(int), int a) +{ + return fn(a); +} + +__attribute__ ((noinline, noclone)) +i_am_const3(int a) +{ + return call_callback (call_me, a); +} + +__attribute__ ((noinline)) +explode_badly() +{ + error_code = 0xbad; + abort (); +} + +__attribute__ ((noinline, noclone)) +i_am_pure4(int a) +{ + if (a > 50) + explode_badly (); + return a; +} + +test() +{ + int s; + s = i_am_pure1(5); + s += i_am_pure1(5); + s += i_am_const2(5); + s += i_am_const2(5); + s += i_am_const3(5); + s += i_am_const3(5); + s += i_am_pure4(5); + s += i_am_pure4(5); + return s; +} +/* { dg-final { scan-tree-dump-times "i_am_pure1 .5" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "i_am_const2 .5" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "i_am_const3 .5" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump-times "i_am_pure4 .5" 1 "optimized"} } */ +/* { dg-final { scan-tree-dump "found to be looping pure: i_am_pure1" "local-pure-const1"} } */ +/* { dg-final { scan-tree-dump "found to be looping pure: i_am_pure4" "local-pure-const1"} } */ +/* { dg-final { scan-ipa-dump "found to be const: i_am_const2" "pure-const"} } */ +/* { dg-final { scan-ipa-dump "found to be const: i_am_const3" "pure-const"} } */ +/* { dg-final { cleanup-tree-dump "local-pure-const1" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ +/* { dg-final { cleanup-ipa-dump "pure-const" } } */ + diff --git a/gcc/testsuite/gcc.dg/ipa/pure-const-2.c b/gcc/testsuite/gcc.dg/ipa/pure-const-2.c new file mode 100644 index 00000000000..51d779776bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pure-const-2.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-local-pure-const1 -fdump-tree-optimized" } */ +static __attribute__ ((noinline, noclone)) +int i_am_pure(char *c, int n) +{ + char *d=__builtin_alloca (n); + int i; + int sum; + for (i=0;i<n;i++) + d[i] = c[i]; + for (i=0;i<n;i++) + d[i] *= c[n-i]; + for (i=0;i<n;i++) + sum+=d[i]; + if (sum) + __builtin_unreachable (); + return sum; +} +char array[11]; +int +main(void) +{ + i_am_pure (array,5); + i_am_pure (array,11); + return 0; +} +/* { dg-final { scan-tree-dump "found to be pure: i_am_pure" "local-pure-const1"} } */ +/* { dg-final { scan-tree-dump-not "i_am_pure" "optimized"} } */ diff --git a/gcc/testsuite/gcc.dg/lto/20091216-1_0.c b/gcc/testsuite/gcc.dg/lto/20091216-1_0.c index ee3b6c73c6b..054330bbe23 100644 --- a/gcc/testsuite/gcc.dg/lto/20091216-1_0.c +++ b/gcc/testsuite/gcc.dg/lto/20091216-1_0.c @@ -1,6 +1,10 @@ /* { dg-lto-do run } */ -asm (".globl start_; start_: nop"); +#ifdef __ia64 +asm (".globl start_\nstart_: nop 0"); +#else +asm (".globl start_\nstart_: nop"); +#endif int main () diff --git a/gcc/testsuite/gcc.dg/lto/20100603-1_0.c b/gcc/testsuite/gcc.dg/lto/20100603-1_0.c new file mode 100644 index 00000000000..cc35c78cfae --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20100603-1_0.c @@ -0,0 +1,4 @@ +/* { dg-lto-do link } */ +/* { dg-extra-ld-options {-r -nostdlib} } */ + +/* This file intentionally left empty. */ diff --git a/gcc/testsuite/gcc.dg/lto/20100603-2_0.c b/gcc/testsuite/gcc.dg/lto/20100603-2_0.c new file mode 100644 index 00000000000..11bee496d9c --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20100603-2_0.c @@ -0,0 +1,5 @@ +/* { dg-lto-do link } */ +/* { dg-extra-ld-options {-r -nostdlib} } */ + +int foo; +int *i = &foo; diff --git a/gcc/testsuite/gcc.dg/lto/20100603-3_0.c b/gcc/testsuite/gcc.dg/lto/20100603-3_0.c new file mode 100644 index 00000000000..3fc08fdbf6b --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20100603-3_0.c @@ -0,0 +1,4 @@ +/* { dg-lto-do link } */ +/* { dg-extra-ld-options {-r -nostdlib} } */ + +int i = 42; diff --git a/gcc/testsuite/gcc.dg/noncompile/990416-1.c b/gcc/testsuite/gcc.dg/noncompile/990416-1.c index 49f5569394e..91801910bc3 100644 --- a/gcc/testsuite/gcc.dg/noncompile/990416-1.c +++ b/gcc/testsuite/gcc.dg/noncompile/990416-1.c @@ -2,11 +2,11 @@ extern void *memcpy (void *, const void *, __SIZE_TYPE__); typedef int word_type; static void -copy_reg (unsigned int reg, frame_state *udata, /* { dg-error "parse|syntax|expected" } */ - frame_state *target_udata) /* { dg-error "expected" } */ +copy_reg (unsigned int reg, frame_state *udata, /* { dg-error "unknown type name" } */ + frame_state *target_udata) /* { dg-error "unknown type name" } */ { - word_type *preg = get_reg_addr (reg, udata, 0); /* { dg-error "undeclared|function|without a cast" } */ - word_type *ptreg = get_reg_addr (reg, target_udata, 0); /* { dg-error "undeclared|without a cast" } */ + word_type *preg = ge_reg_addr (reg, udata, 0); + word_type *ptreg = ge_reg_addr (reg, target_udata, 0); memcpy (ptreg, preg, __builtin_dwarf_reg_size (reg)); } diff --git a/gcc/testsuite/gcc.dg/noncompile/pr44517.c b/gcc/testsuite/gcc.dg/noncompile/pr44517.c new file mode 100644 index 00000000000..5977d68fef8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/pr44517.c @@ -0,0 +1,18 @@ +/* PR c/44517: Improve diagnostic for misspelled typename in function declaration. */ +int f1(int x, pid_t y, long z, in t) { +/* { dg-error "unknown type name 'pid_t'" "" { target *-*-* } 2 } */ +/* { dg-error "unknown type name 'in'" "" { target *-*-* } 2 } */ + return x + y + z + t; +} + +int f2(int x, lon y, long z, ...){ /* { dg-error "unknown type name 'lon'" } */ + return; +} + +void f3(int n, int a[n], pid_t x); /* { dg-error "unknown type name 'pid_t'" } */ +void f4() {} +void f5(int a, *b); /* { dg-error "expected declaration specifiers or" } */ +void f6(int a, b); /* { dg-error "expected declaration specifiers or" } */ +void f7(int a, goto b); /* { dg-error "expected declaration specifiers or" } */ +void f8(int a, in goto); /* { dg-error "unknown type name 'in'" } */ +void f9(int a, in 1); /* { dg-error "unknown type name 'in'" } */ diff --git a/gcc/testsuite/gcc.dg/noreturn-4.c b/gcc/testsuite/gcc.dg/noreturn-4.c index bcc29dac69a..6fe144754d0 100644 --- a/gcc/testsuite/gcc.dg/noreturn-4.c +++ b/gcc/testsuite/gcc.dg/noreturn-4.c @@ -4,7 +4,7 @@ extern void exit (int) __attribute__ ((__noreturn__)); int -main (void) /* { dg-warning "function might be possible candidate for attribute 'noreturn'" "warn for main" } */ +main (void) /* { dg-warning "function might be candidate for attribute 'noreturn'" "warn for main" } */ { exit (0); } diff --git a/gcc/testsuite/gcc.dg/noreturn-7.c b/gcc/testsuite/gcc.dg/noreturn-7.c index 1913be1fe1d..fd2be2d56c0 100644 --- a/gcc/testsuite/gcc.dg/noreturn-7.c +++ b/gcc/testsuite/gcc.dg/noreturn-7.c @@ -13,7 +13,7 @@ void _exit(int status) __attribute__ ((__noreturn__)); int z = 0; -void g() /* { dg-warning "possible candidate" } */ +void g() /* { dg-warning "might be candidate" } */ { if (++z > 10) _exit(0); @@ -27,14 +27,14 @@ void f() f(); } /* { dg-bogus "does return" } */ -int h() /* { dg-warning "possible candidate" } */ +int h() /* { dg-warning "might be candidate" } */ { if (++z > 10) _exit(0); return h(); } /* { dg-bogus "end of non-void function" } */ -int k() /* { dg-warning "possible candidate" } */ +int k() /* { dg-warning "might be candidate" } */ { if (++z > 10) _exit(0); diff --git a/gcc/testsuite/gcc.dg/opts-1.c b/gcc/testsuite/gcc.dg/opts-1.c new file mode 100644 index 00000000000..0d16c3ded6e --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-1.c @@ -0,0 +1,9 @@ +/* Test negative forms of various options are rejected. */ +/* { dg-do compile } */ +/* { dg-options "-Wno-strict-aliasing=1 -Wno-strict-overflow=1 -fno-abi-version=1 -fno-lto-compression-level=1 -fno-tree-parallelize-loops=1" } */ + +/* { dg-error "-fno-abi-version" "-fno-abi-version" { target *-*-* } 0 } */ +/* { dg-error "-fno-lto-compression-level" "-fno-lto-compression-level" { target *-*-* } 0 } */ +/* { dg-error "-fno-tree-parallelize-loops" "-fno-tree-parallelize-loops" { target *-*-* } 0 } */ +/* { dg-warning "-Wno-strict-overflow" "-Wno-strict-overflow" { target *-*-* } 0 } */ +/* { dg-warning "-Wno-strict-aliasing" "-Wno-strict-aliasing" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.dg/opts-2.c b/gcc/testsuite/gcc.dg/opts-2.c new file mode 100644 index 00000000000..f7683635a0e --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-2.c @@ -0,0 +1,8 @@ +/* -O as an operand to another option should not take effect as an + optimization option. */ +/* { dg-do compile } */ +/* { dg-options "-I -O" } */ + +#ifdef __OPTIMIZE__ +#error "__OPTIMIZE__ defined" +#endif diff --git a/gcc/testsuite/gcc.dg/opts-3.c b/gcc/testsuite/gcc.dg/opts-3.c new file mode 100644 index 00000000000..50cd1db52d4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-3.c @@ -0,0 +1,7 @@ +/* Parameters of -Xassembler should not be interpreted as driver + options (and so cause the driver to exit prematurely, as in this + testcase, or have other unintended effects). */ +/* { dg-do compile } */ +/* { dg-options "-Xassembler -dumpmachine" } */ + +int int x; /* { dg-error "two or more data types" } */ diff --git a/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c b/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c index 634daeeda13..26496a2e695 100644 --- a/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c +++ b/gcc/testsuite/gcc.dg/plugin/finish_unit_plugin.c @@ -12,6 +12,7 @@ #include "tree.h" #include "tree-pass.h" #include "intl.h" +#include "cgraph.h" int plugin_is_GPL_compatible; diff --git a/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c b/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c index 4a6a8a61969..2c4cd497192 100644 --- a/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c +++ b/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c @@ -37,7 +37,7 @@ struct gimple_opt_pass one_pass = NULL, /* sub */ NULL, /* next */ 0, /* static_pass_number */ - 0, /* tv_id */ + TV_NONE, /* tv_id */ PROP_gimple_any, /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */ diff --git a/gcc/testsuite/gcc.dg/plugin/selfassign.c b/gcc/testsuite/gcc.dg/plugin/selfassign.c index 8d76301d815..eb8f24a45a8 100644 --- a/gcc/testsuite/gcc.dg/plugin/selfassign.c +++ b/gcc/testsuite/gcc.dg/plugin/selfassign.c @@ -52,9 +52,7 @@ get_real_ref_rhs (tree expr) /* We are only interested in an assignment with a single rhs operand because if it is not, the original assignment will not possibly be a self-assignment. */ - if (is_gimple_assign (def_stmt) - && (get_gimple_rhs_class (gimple_assign_rhs_code (def_stmt)) - == GIMPLE_SINGLE_RHS)) + if (gimple_assign_single_p (def_stmt)) return get_real_ref_rhs (gimple_assign_rhs1 (def_stmt)); else return NULL_TREE; @@ -66,7 +64,7 @@ get_real_ref_rhs (tree expr) case PARM_DECL: case FIELD_DECL: case COMPONENT_REF: - case INDIRECT_REF: + case MEM_REF: case ARRAY_REF: return expr; default: @@ -116,17 +114,18 @@ get_non_ssa_expr (tree expr) else return expr; } - case INDIRECT_REF: + case MEM_REF: { tree orig_base = TREE_OPERAND (expr, 0); - tree base = get_non_ssa_expr (orig_base); - if (!base) - return NULL_TREE; - /* If BASE is converted, build a new indirect reference tree. */ - if (base != orig_base) - return build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (base)), base); - else - return expr; + if (TREE_CODE (orig_base) == SSA_NAME) + { + tree base = get_non_ssa_expr (orig_base); + if (!base) + return NULL_TREE; + return fold_build2 (MEM_REF, TREE_TYPE (expr), + base, TREE_OPERAND (expr, 1)); + } + return expr; } case ARRAY_REF: { @@ -153,9 +152,7 @@ get_non_ssa_expr (tree expr) && !gimple_nop_p (SSA_NAME_DEF_STMT (expr))) { gimple def_stmt = SSA_NAME_DEF_STMT (expr); - if (is_gimple_assign (def_stmt) - && (get_gimple_rhs_class (gimple_assign_rhs_code (def_stmt)) - == GIMPLE_SINGLE_RHS)) + if (gimple_assign_single_p (def_stmt)) vdecl = gimple_assign_rhs1 (def_stmt); } return get_non_ssa_expr (vdecl); @@ -201,9 +198,7 @@ warn_self_assign (gimple stmt) tree rhs, lhs; /* Check assigment statement. */ - if (is_gimple_assign (stmt) - && (get_gimple_rhs_class (gimple_assign_rhs_code (stmt)) - == GIMPLE_SINGLE_RHS)) + if (gimple_assign_single_p (stmt)) { rhs = get_real_ref_rhs (gimple_assign_rhs1 (stmt)); if (!rhs) @@ -275,7 +270,7 @@ static struct gimple_opt_pass pass_warn_self_assign = NULL, /* sub */ NULL, /* next */ 0, /* static_pass_number */ - 0, /* tv_id */ + TV_NONE, /* tv_id */ PROP_ssa, /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */ diff --git a/gcc/testsuite/gcc.dg/pr32370.c b/gcc/testsuite/gcc.dg/pr32370.c index 80a7c545d47..f039bdf98e7 100644 --- a/gcc/testsuite/gcc.dg/pr32370.c +++ b/gcc/testsuite/gcc.dg/pr32370.c @@ -2,15 +2,19 @@ /* { dg-do compile { target i?86-*-* x86_64-*-* ia64-*-* } } */ /* { dg-options "" { target ia64-*-* } } */ /* { dg-options "-ffixed-esi" { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-mabi=sysv -ffixed-esi" { target x86_64-*-mingw* } } */ -#if defined __i386__ || defined __x86_64__ +#if (defined __i386__ || defined __x86_64__) && ! defined _WIN64 # define C "=S" # define TYPE unsigned long -#elif defined __ia64__ +#elif defined __ia64__ || defined _WIN64 # define C "=a" # define TYPE unsigned long long #endif +#ifdef _WIN64 +__extension__ +#endif unsigned int foo (TYPE port) { diff --git a/gcc/testsuite/gcc.dg/pr36902.c b/gcc/testsuite/gcc.dg/pr36902.c index 8b4ba6fcdb2..43a2d14f981 100644 --- a/gcc/testsuite/gcc.dg/pr36902.c +++ b/gcc/testsuite/gcc.dg/pr36902.c @@ -44,7 +44,7 @@ foo2(unsigned char * to, const unsigned char * from, int n) *to = *from; break; case 5: - to[4] = from [4]; /* { dg-warning "20:array subscript is above array bounds" } */ + to[4] = from [4]; /* { dg-warning "array subscript is above array bounds" } */ break; } return to; diff --git a/gcc/testsuite/gcc.dg/pr37561.c b/gcc/testsuite/gcc.dg/pr37561.c index 82eca964008..ec712a7841d 100644 --- a/gcc/testsuite/gcc.dg/pr37561.c +++ b/gcc/testsuite/gcc.dg/pr37561.c @@ -1,7 +1,7 @@ /* PR c++/37561 */ /* { dg-do compile } */ -__PTRDIFF_TYPE__ p; +__extension__ __PTRDIFF_TYPE__ p; char q; void diff --git a/gcc/testsuite/gcc.dg/pr39874.c b/gcc/testsuite/gcc.dg/pr39874.c new file mode 100644 index 00000000000..ca452831016 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr39874.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +extern void func(); + +void test1(char *signature) +{ + char ch = signature[0]; + if (ch == 15 || ch == 3) + { + if (ch == 15) func(); + } +} + + +void test2(char *signature) +{ + char ch = signature[0]; + if (ch == 15 || ch == 3) + { + if (ch > 14) func(); + } +} + +/* { dg-final { scan-tree-dump-times " == 15" 2 "optimized" } } */ +/* { dg-final { scan-tree-dump-not " == 3" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ + + diff --git a/gcc/testsuite/gcc.dg/pr41340.c b/gcc/testsuite/gcc.dg/pr41340.c index 72ad9296894..b86f40bf467 100644 --- a/gcc/testsuite/gcc.dg/pr41340.c +++ b/gcc/testsuite/gcc.dg/pr41340.c @@ -10,6 +10,8 @@ struct S2 { struct S1 s2; }; struct S3 { unsigned s3; struct S2 **s4; }; struct S5 { struct S2 *s5; }; +__extension__ typedef __INTPTR_TYPE__ ssize_t; + extern void fn0 (void) __attribute__ ((__noreturn__)); T fn6 (struct S3); void fn7 (void); @@ -45,7 +47,7 @@ fn5 (struct S3 x, T *y) { if (!fn3 (x)) { - *y = (T) (long) fn4 (x); + *y = (T) (ssize_t) fn4 (x); return 1; } return 0; diff --git a/gcc/testsuite/gcc.dg/pr41551.c b/gcc/testsuite/gcc.dg/pr41551.c index 25a8e717fb8..e24fbc33db4 100644 --- a/gcc/testsuite/gcc.dg/pr41551.c +++ b/gcc/testsuite/gcc.dg/pr41551.c @@ -3,8 +3,10 @@ /* Make sure we do not ICE. */ +__extension__ typedef __SIZE_TYPE__ size_t; + int main(void) { int var, *p = &var; - return (double)(unsigned long)(p); + return (double)(size_t)(p); } diff --git a/gcc/testsuite/gcc.dg/pr42461.c b/gcc/testsuite/gcc.dg/pr42461.c new file mode 100644 index 00000000000..0518bfd9736 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42461.c @@ -0,0 +1,14 @@ +/* PR rtl-optimization/42461 */ +/* Reported by Patrick Pelissier <patrick.pelissier@gmail.com> */ + +/* { dg-do link } */ +/* { dg-options "-O2" } */ + +extern int link_failure (int) __attribute__ ((pure)); + +int main (void) +{ + if (link_failure (0) < 1) + __builtin_unreachable (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr44393.c b/gcc/testsuite/gcc.dg/pr44393.c new file mode 100644 index 00000000000..906d5932a0f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44393.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -ftree-loop-distribution" } */ + +int i; +void foo () +{ + int **pp = 0, *p = 0; + while (--i) + { + *p++ = 0; + *pp++ = p; + } + i = *p; +} + diff --git a/gcc/testsuite/gcc.dg/pr44404.c b/gcc/testsuite/gcc.dg/pr44404.c new file mode 100644 index 00000000000..a0b4ceb98ca --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44404.c @@ -0,0 +1,35 @@ +/* PR rtl-optimization/44404 + foo() used to be miscompiled on ARM due to a bug in auto-inc-dec.c, + which resulted in "strb r1, [r1], #-36". */ + +/* { dg-do run } */ +/* { dg-options "-O2 -fno-unroll-loops" } */ + +extern char *strcpy (char *, const char *); +extern int strcmp (const char*, const char*); +extern void abort (void); + +char buf[128]; + +void __attribute__((noinline)) +bar (int a, const char *p) +{ + if (strcmp (p, "0123456789abcdefghijklmnopqrstuvwxyz") != 0) + abort (); +} + +void __attribute__((noinline)) +foo (int a) +{ + if (a) + bar (0, buf); + strcpy (buf, "0123456789abcdefghijklmnopqrstuvwxyz"); + bar (0, buf); +} + +int +main (void) +{ + foo (0); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr44509.c b/gcc/testsuite/gcc.dg/pr44509.c new file mode 100644 index 00000000000..7c50bd0fc28 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44509.c @@ -0,0 +1,9 @@ +/* PR bootstrap/44509 */ +/* { dg-do compile } */ +/* { dg-options "--param ggc-min-expand=0 --param ggc-min-heapsize=0" } */ + +double +foo (void) +{ + return __DBL_MAX__ - __FLT_MAX__; +} diff --git a/gcc/testsuite/gcc.dg/pr44539.c b/gcc/testsuite/gcc.dg/pr44539.c new file mode 100644 index 00000000000..9cfff7a3ae5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44539.c @@ -0,0 +1,29 @@ +/* PR tree-optimization/44539 */ +/* { dg-do compile } */ +/* { dg-options "-ftracer -freorder-blocks -O2" } */ + +void bar (int file); +extern int baz (void); + +void noret1 () +{ + bar (0); + __builtin_exit (0); +} + +void noret2 () +{ + __builtin_exit (0); +} + +void bar (int i) +{ + if (baz ()) + noret1 (i); +} + +void foo (int i) +{ + if (~i) bar (i); + i ? noret1 () : noret2 (); +} diff --git a/gcc/testsuite/gcc.dg/pr44674.c b/gcc/testsuite/gcc.dg/pr44674.c new file mode 100644 index 00000000000..c3f16ff20ee --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44674.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fprofile-generate" } */ + +void +jumpfunc (void *p) +{ + void *l = &&jumplabel; +jumplabel: + __builtin_memcpy (p, l, 1); +} diff --git a/gcc/testsuite/gcc.dg/pr44699.c b/gcc/testsuite/gcc.dg/pr44699.c new file mode 100644 index 00000000000..601cc78f572 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr44699.c @@ -0,0 +1,157 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +typedef long unsigned int size_t; +typedef long int intmax_t; +typedef long unsigned int uintmax_t; +extern void *xmalloc (size_t) __attribute__ ((__malloc__)); +extern const char *trim_filename (const char *); + +static __inline void * +__inline_memcpy_chk (void *__dest, const void *__src, size_t __len) +{ + return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0)); +} + +typedef unsigned int hashval_t; +typedef hashval_t (*htab_hash) (const void *); +typedef int (*htab_eq) (const void *, const void *); +typedef void (*htab_del) (void *); +typedef int (*htab_trav) (void **, void *); +typedef void *(*htab_alloc) (size_t, size_t); +typedef void (*htab_free) (void *); + +typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t); +typedef void (*htab_free_with_arg) (void *, void *); +struct htab { + htab_hash hash_f; + htab_eq eq_f; + htab_del del_f; + void ** entries; + size_t size; + size_t n_elements; + size_t n_deleted; + unsigned int searches; + unsigned int collisions; + htab_alloc alloc_f; + htab_free free_f; + void * alloc_arg; + htab_alloc_with_arg alloc_with_arg_f; + htab_free_with_arg free_with_arg_f; + unsigned int size_prime_index; +}; + +typedef struct htab *htab_t; +enum insert_option {NO_INSERT, INSERT}; +extern void * htab_find (htab_t, const void *); +extern void ** htab_find_slot (htab_t, const void *, enum insert_option); + +enum mode_class { MODE_RANDOM, MODE_CC, MODE_INT, MODE_PARTIAL_INT, MODE_FRACT, MODE_UFRACT, MODE_ACCUM, MODE_UACCUM, MODE_FLOAT, MODE_DECIMAL_FLOAT, MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MODE_VECTOR_INT, MODE_VECTOR_FRACT, MODE_VECTOR_UFRACT, MODE_VECTOR_ACCUM, MODE_VECTOR_UACCUM, MODE_VECTOR_FLOAT, MAX_MODE_CLASS }; + +static const char *const mode_class_names[MAX_MODE_CLASS] = +{ + "MODE_RANDOM", "MODE_CC", "MODE_INT", "MODE_PARTIAL_INT", "MODE_FRACT", "MODE_UFRACT", "MODE_ACCUM", "MODE_UACCUM", "MODE_FLOAT", "MODE_DECIMAL_FLOAT", "MODE_COMPLEX_INT", "MODE_COMPLEX_FLOAT", "MODE_VECTOR_INT", "MODE_VECTOR_FRACT", "MODE_VECTOR_UFRACT", "MODE_VECTOR_ACCUM", "MODE_VECTOR_UACCUM", "MODE_VECTOR_FLOAT" +}; +struct mode_data +{ + struct mode_data *next; + + const char *name; + enum mode_class cl; + unsigned int precision; + unsigned int bytesize; + unsigned int ncomponents; + unsigned int alignment; + const char *format; + + struct mode_data *component; + struct mode_data *wider; + struct mode_data *wider_2x; + + struct mode_data *contained; + + struct mode_data *next_cont; + + const char *file; + unsigned int line; + unsigned int counter; + unsigned int ibit; + unsigned int fbit; +}; + +static struct mode_data *modes[MAX_MODE_CLASS]; +static unsigned int n_modes[MAX_MODE_CLASS]; +static struct mode_data *void_mode; + +static const struct mode_data blank_mode = { + 0, "<unknown>", MAX_MODE_CLASS, + -1U, -1U, -1U, -1U, + 0, 0, 0, 0, 0, 0, + "<unknown>", 0, 0, 0, 0 +}; + +static htab_t modes_by_name; + +static __inline__ struct mode_data * +find_mode (const char *name) +{ + struct mode_data key; + + key.name = name; + return (struct mode_data *) htab_find (modes_by_name, &key); +} + +static struct mode_data * +new_mode (enum mode_class cl, const char *name, + const char *file, unsigned int line) +{ + struct mode_data *m; + static unsigned int count = 0; + + m = find_mode (name); + if (m) + { + error ("%s:%d: duplicate definition of mode \"%s\"", + trim_filename (file), line, name); + error ("%s:%d: previous definition here", m->file, m->line); + return m; + } + + m = ((struct mode_data *) xmalloc (sizeof (struct mode_data))); + ((__builtin_object_size (m, 0) != (size_t) -1) ? __builtin___memcpy_chk (m, &blank_mode, sizeof (struct mode_data), __builtin_object_size (m, 0)) : __inline_memcpy_chk (m, &blank_mode, sizeof (struct mode_data))); + m->cl = cl; + m->name = name; + if (file) + m->file = trim_filename (file); + m->line = line; + m->counter = count++; + + m->next = modes[cl]; + modes[cl] = m; + n_modes[cl]++; + + *htab_find_slot (modes_by_name, m, INSERT) = m; + + return m; +} + +static void +make_int_mode (const char *name, + unsigned int precision, unsigned int bytesize, + const char *file, unsigned int line) +{ + struct mode_data *m = new_mode (MODE_INT, name, file, line); + m->bytesize = bytesize; + m->precision = precision; +} + +static void +create_modes (void) +{ +make_int_mode ("HI", -1U, 2, "../../work/gcc/machmode.def", 182); +} + +int +main (int argc, char **argv) +{ + create_modes (); +} diff --git a/gcc/testsuite/gcc.dg/pragma-diag-1.c b/gcc/testsuite/gcc.dg/pragma-diag-1.c new file mode 100644 index 00000000000..b6d294d9ab5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pragma-diag-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-Wuninitialized -O2" } */ +/* { dg-message "warnings being treated as errors" "" {target "*-*-*"} 0 } */ + +main() +{ + int a; + int b; + int c; + int d; + +#pragma GCC diagnostic error "-Wuninitialized" + foo(a); /* { dg-error "uninitialized" } */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wuninitialized" + foo(b); +#pragma GCC diagnostic pop + foo(c); /* { dg-error "uninitialized" } */ +#pragma GCC diagnostic pop + foo(d); /* { dg-warning "uninitialized" } */ +} diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c b/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c index cbfd0bc72bb..ca3643e43de 100644 --- a/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c +++ b/gcc/testsuite/gcc.dg/struct/w_prof_global_array.c @@ -26,5 +26,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c b/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c index c51648c4ef0..baff45d917d 100644 --- a/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c +++ b/gcc/testsuite/gcc.dg/struct/w_prof_global_var.c @@ -39,5 +39,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c b/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c index 1a798e399d3..8953264fea1 100644 --- a/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c +++ b/gcc/testsuite/gcc.dg/struct/w_prof_local_array.c @@ -34,5 +34,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c b/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c index 82f24a1a4b1..9a23f8d53a8 100644 --- a/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c +++ b/gcc/testsuite/gcc.dg/struct/w_prof_local_var.c @@ -37,5 +37,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c b/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c index b2223c88b8b..b0202399104 100644 --- a/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c +++ b/gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c @@ -28,6 +28,6 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c b/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c index 308c30e4fd7..e9de98c3b8a 100644 --- a/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c +++ b/gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c @@ -61,6 +61,6 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 2" "ipa_struct_reorg" } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 2" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c b/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c index 19de595e8ed..3c26e3be7b6 100644 --- a/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c +++ b/gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c @@ -39,5 +39,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" } } */ +/* { dg-final-use { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final-use { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c b/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c index 12c217aad97..5d5e37b4f0e 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c @@ -23,5 +23,5 @@ int main() } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c b/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c index abf50a54fec..efb68be8bdd 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c @@ -35,5 +35,5 @@ main () return 0; } -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c b/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c index b1508eec5c7..77226b449c5 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c @@ -26,5 +26,5 @@ int main() } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c b/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c index db7f6b09cb5..58411202767 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c @@ -43,5 +43,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "No structures to transform" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "No structures to transform" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c index e6638b73a60..781a847f9f7 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c @@ -42,5 +42,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is passed to local function...Excluded." "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "is passed to local function...Excluded." "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c index 8830c55601d..8892fa99098 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c @@ -29,5 +29,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is return type of function...Excluded" "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "is return type of function...Excluded" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c index 5f634fc119c..6da3420f6e8 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c @@ -28,6 +28,6 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is initialized...Excluded" "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "is initialized...Excluded" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c index 55a644e1971..bd03ec42f05 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c @@ -30,5 +30,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c index 4cb94afc5df..59e0e48321a 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c @@ -45,5 +45,5 @@ main (void) } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c index bade3153909..a6b32ddd688 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c @@ -42,5 +42,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" } } */ +/* { dg-final { scan-ipa-dump "is a field in the structure" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c b/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c index 4ffd4b5a265..b61e26b1248 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c @@ -29,5 +29,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c b/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c index 4c00d02434a..39351e072e2 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c @@ -42,5 +42,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c b/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c index 3d92da40517..18d5a734740 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c @@ -37,5 +37,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c b/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c index a6fd7be4371..26a9dbd7314 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c @@ -40,5 +40,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c b/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c index 04b8b6621fb..6caadcf1230 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c @@ -44,5 +44,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c index 22193f2ae57..812763d53ff 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c @@ -31,5 +31,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 1" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c index e17ca56ee8b..313af1080c1 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c @@ -31,5 +31,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "No structures to transform" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "No structures to transform" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c b/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c index 24dae559829..92da94d2923 100644 --- a/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c +++ b/gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c @@ -64,5 +64,5 @@ main () } /*--------------------------------------------------------------------------*/ -/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "ipa_struct_reorg" { xfail { "avr-*-*" } } } } */ +/* { dg-final { scan-ipa-dump "Number of structures to transform is 2" "ipa_struct_reorg" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "*" } } */ diff --git a/gcc/testsuite/gcc.dg/torture/pr43781.c b/gcc/testsuite/gcc.dg/torture/pr43781.c new file mode 100644 index 00000000000..37fe5a36769 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr43781.c @@ -0,0 +1,45 @@ +/* { dg-do compile } */ + +typedef int int32_t; +typedef unsigned char uint8_t; + +struct S0 +{ + uint8_t f3; +}; + +struct S2 +{ + uint8_t f5; +}; + +struct S0 g_22 = { + 0 +}; + +int32_t g_91; +const struct S2 *g_314; +const struct S2 **g_313 = &g_314; +struct S2 g_320[2] = { + 0 +}; + +void +int32func (uint64p_34) +{ + for (g_22.f3 = 0; g_22.f3 <= 0; g_22.f3) + { + lbl_491:{ + if (1) + { + int32_t *l_453[2][7][7][1][1]; + int i, j, k, l, m; + for (m; m; m++) + l_453[i][j][k][l][m]; + } + *g_313 = 0; + if (g_91) + goto lbl_491; + } + } +} diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c index d32a6cedc7a..0f477b2376c 100644 --- a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c +++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c @@ -16,7 +16,7 @@ main() /* { dg-final-use { scan-tree-dump "Single value 4 stringop" "tree_profile"} } */ /* Really this ought to simplify into assignment, but we are not there yet. */ /* a[0] = b[0] is what we fold the resulting memcpy into. */ -/* { dg-final-use { scan-tree-dump "a.0. = " "optimized"} } */ -/* { dg-final-use { scan-tree-dump "= b.0." "optimized"} } */ +/* { dg-final-use { scan-tree-dump " = MEM.*&b" "optimized"} } */ +/* { dg-final-use { scan-tree-dump "MEM.*&a\\\] = " "optimized"} } */ /* { dg-final-use { cleanup-tree-dump "optimized" } } */ /* { dg-final-use { cleanup-tree-dump "tree_profile" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20030807-7.c b/gcc/testsuite/gcc.dg/tree-ssa/20030807-7.c index f9f5fb798ef..ed6f7c0d5d5 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/20030807-7.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/20030807-7.c @@ -33,5 +33,5 @@ simplify_condition (cond_p) } /* There should be exactly one IF conditional. */ -/* { dg-final { scan-tree-dump-times "if " 1 "vrp1" } } */ +/* { dg-final { scan-tree-dump-times "if " 1 "vrp1" { xfail *-*-* } } } */ /* { dg-final { cleanup-tree-dump "vrp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-2.c b/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-2.c deleted file mode 100644 index dc764c3d79e..00000000000 --- a/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-2.c +++ /dev/null @@ -1,13 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-optimized" } */ -struct a{ - int a; - int b; -} a; -int * -t() -{ - return (int *)&a; -} -/* { dg-final { scan-tree-dump "a.a" "optimized"} } */ -/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-3.c b/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-3.c deleted file mode 100644 index b764187a029..00000000000 --- a/gcc/testsuite/gcc.dg/tree-ssa/foldaddr-3.c +++ /dev/null @@ -1,28 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-optimized" } */ -union a -{ - struct s1 - { - long long a; - long long b; - } s1; - struct s2 - { - int c; - int d; - } s2; - struct s3 - { - unsigned long long e; - unsigned long long f; - } s3; -} a; -int * -t () -{ - return (int *) &a; -} - -/* { dg-final { scan-tree-dump "a.s2.c" "optimized"} } */ -/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-1.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-1.c index ee3cb0ebfe5..7b07d7f488f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-1.c @@ -15,5 +15,5 @@ void f(struct a * b, __SIZE_TYPE__ i) c[i] = 1; } -/* { dg-final { scan-tree-dump-times "t\\\[i.*\\\] =.* 1;" 1 "forwprop1" } } */ +/* { dg-final { scan-tree-dump-times "t\\\[i.*\\\].* = 1;" 1 "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c index 0b865245a96..b46b8ece816 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fdump-tree-forwprop1" } */ +/* { dg-options "-O -fdump-tree-fre-details" } */ int b; unsigned a; @@ -15,9 +15,8 @@ void test2(void) } /* The indirect load should be replaced by a load from a and a - conversion to int. */ + conversion to int. FRE should then be able to replace + the rhs of the store to b by 1. */ -/* { dg-final { scan-tree-dump "= a;" "forwprop1" } } */ -/* { dg-final { scan-tree-dump "= \\\(int\\\) " "forwprop1" } } */ -/* { dg-final { scan-tree-dump-not "= \\\*" "forwprop1" } } */ -/* { dg-final { cleanup-tree-dump "forwprop1" } } */ +/* { dg-final { scan-tree-dump "Replaced\[^\\n\]*with 1" "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-2.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-2.c index fe04e66fa1a..2aefb9ace63 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-2.c @@ -17,5 +17,5 @@ void f(__SIZE_TYPE__ i) c[i] = 1; } -/* { dg-final { scan-tree-dump-times "t\\\[i.*\\\] =.* 1;" 1 "forwprop1" } } */ +/* { dg-final { scan-tree-dump-times "t\\\[i.*\\\].* = 1;" 1 "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop?" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c index 710bc5dd114..1b68d5a35f0 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -fdump-tree-forwprop1 -w" } */ +/* { dg-options "-O1 -fdump-tree-esra -w" } */ #define vector __attribute__((vector_size(16) )) struct VecClass @@ -15,7 +15,8 @@ vector float foo( vector float v ) return y.v; } -/* We should be able to convert the cast to a VCE in forwprop1. */ -/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 1 "forwprop1"} } */ -/* { dg-final { cleanup-tree-dump "forwprop1" } } */ - +/* We should be able to remove the intermediate struct and directly + return x. As we do not fold VIEW_CONVERT_EXPR<struct VecClass>(x).v + that doesn't happen right now. */ +/* { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 1 "esra"} } */ +/* { dg-final { cleanup-tree-dump "esra" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c index 4e0751f8119..fc74297242c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c @@ -12,5 +12,5 @@ int foo(struct X *q) /* We should have propragated &q->a into (*pointer). */ /* { dg-final { scan-tree-dump-times "pointer" 0 "forwprop1"} } */ -/* { dg-final { scan-tree-dump "->a\\\[0\\\]" "forwprop1" } } */ +/* { dg-final { scan-tree-dump "\\\[0\\\]" "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-1.c new file mode 100644 index 00000000000..a31e8ea7a47 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-1.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-fnsplit" } */ +int test2(a) +{ + if (a<100) + return 1; + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + do_something_big (); + return 0; +} + +test() +{ + test2(10); + test2(20); +} +/* { dg-final { scan-tree-dump-times "Splitting function" 1 "fnsplit"} } */ +/* { dg-final { cleanup-tree-dump "fnsplit" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-2.c new file mode 100644 index 00000000000..bbde73d6c7c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-2.c @@ -0,0 +1,41 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-fnsplit" } */ +int b; +int c; +int d; +split_me(int a) +{ + int t = 0; + if (d>4) + return; + do + { + long_function (t); + long_function (t); + long_function (t); + long_function (t); + long_function (t); + long_function (t); + make_me_irregular: + long_function (t); + long_function (t); + long_function (t); + long_function (t); + long_function (t); + t=b; + } + while (t); + if (c) + goto make_me_irregular; +} + +main() +{ + split_me (1); + split_me (2); + split_me (3); + split_me (4); + split_me (5); +} +/* { dg-final { scan-tree-dump-times "Splitting function" 1 "fnsplit"} } */ +/* { dg-final { cleanup-tree-dump "fnsplit" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-3.c new file mode 100644 index 00000000000..05a37f81027 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-3.c @@ -0,0 +1,21 @@ +int baz (void); +static int +foo (int x) +{ + if (__builtin_expect (x <= 0, 0)) + { + __builtin_printf ("foo\n"); + __builtin_printf ("foo\n"); + __builtin_printf ("foo\n"); + __builtin_abort (); + } + return 6; +} + +int a,b,c; + +int +bar (int x) +{ + return foo (a) + foo (b) + foo (c); +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-4.c new file mode 100644 index 00000000000..9d5864bad3c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-4.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-fnsplit" } */ +int make_me_big (void); +void abort (void); + +int +split_me (int a) +{ + if (__builtin_expect(a<10, 1)) + { + abort (); + } + else + { + make_me_big (); + make_me_big (); + make_me_big (); + make_me_big (); + return a+1; + } +} + +int +test(void) +{ + return split_me (0)+split_me(1)+split_me(2); +} +/* { dg-final { scan-tree-dump-times "Splitting function" 1 "fnsplit"} } */ +/* { dg-final { cleanup-tree-dump "fnsplit" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c index 9733d8f99d8..4b8239e4531 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-pre-stats" } */ +/* { dg-options "-O2 -fdump-tree-pre-stats -fdump-tree-fre" } */ #include <stddef.h> union tree_node; @@ -72,7 +72,9 @@ main (void) remove_useless_vars (&unexpanded_var_list, 0); return 0; } -/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */ + +/* See PR44656. The last elimination is only done by PRE. */ +/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 2 "pre" } } */ /* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre" } } */ /* { dg-final { cleanup-tree-dump "pre" } } */ - diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-1.c index 736a4d95577..bff58f6a41d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */ +/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32} } } */ /* { dg-require-effective-target size32plus } */ double u[1782225]; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-3.c index 51508f98a61..d7dd211e9bc 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-3.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */ +/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32} } } */ /* { dg-require-effective-target size32plus } */ double u[1782225]; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-4.c index e2d6abced60..6682538a2ed 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-4.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */ +/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32} } } */ /* { dg-require-effective-target size32plus } */ double u[1782225]; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c index 2f64925e901..3540723dc56 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-5.c @@ -1,5 +1,6 @@ /* { dg-do compile { target { size32plus } } } */ /* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */ +/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32} } } */ int foo () { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-6.c index edf30a3d573..e6a290a6a13 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-6.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */ +/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32} } } */ /* { dg-require-effective-target size32plus } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-8.c b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-8.c index 21f8ffafce6..67569d8a316 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ltrans-8.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ltrans-8.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } */ +/* { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32} } } */ double foo(double *a) { int i,j; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr17141-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr17141-1.c index af867515002..853fe70c623 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr17141-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr17141-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-forwprop1" } */ +/* { dg-options "-O -fdump-tree-forwprop1" } */ struct A { int i; }; int @@ -11,5 +11,7 @@ foo(struct A *locp, int str) return locp->i; } -/* { dg-final { scan-tree-dump "locp.*->i =" "forwprop1" } } */ +/* We should have propagated &locp->i into its dereference. */ + +/* { dg-final { scan-tree-dump "locp_\[^\\n\]* =" "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21086.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21086.c index 2409608d9da..f924d26cca2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr21086.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21086.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-vrp1" } */ +/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dce1" } */ int foo (int *p) @@ -16,8 +16,9 @@ foo (int *p) } /* Target with fno-delete-null-pointer-checks should not fold checks */ -/* { dg-final { scan-tree-dump-times "Folding predicate " 1 "vrp1" { target { ! keeps_null_pointer_checks } } } } */ +/* { dg-final { scan-tree-dump "Folding predicate " "vrp1" { target { ! keeps_null_pointer_checks } } } } */ /* { dg-final { scan-tree-dump-times "Folding predicate " 0 "vrp1" { target { keeps_null_pointer_checks } } } } */ -/* { dg-final { scan-tree-dump-not "b_. =" "vrp1" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump "b_. =" "vrp1" { target { avr-*-* } } } } */ +/* { dg-final { scan-tree-dump-not "b_. =" "dce1" { target { ! avr-*-* } } } } */ +/* { dg-final { scan-tree-dump "b_. =" "dce1" { target { avr-*-* } } } } */ /* { dg-final { cleanup-tree-dump "vrp1" } } */ +/* { dg-final { cleanup-tree-dump "dce1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr44258.c b/gcc/testsuite/gcc.dg/tree-ssa/pr44258.c new file mode 100644 index 00000000000..a98d3ceccbf --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr44258.c @@ -0,0 +1,43 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-esra-details" } */ + +struct blah +{ + char a[4]; +}; + +struct str +{ + struct blah b1; + char x; +}; + +struct val +{ + char y; + struct blah b2; +}; + +union U +{ + struct str str; + struct val val; +}; + + +extern struct blah e_b1, e_b2; +extern union U *e_u; + +int foo (int b) +{ + union U u; + + u.str.b1 = e_b1; + u.val.b2 = e_b2; + u.str.b1.a[3] = 0; + + *e_u = u; +} + +/* { dg-final { scan-tree-dump-times "Created a replacement" 0 "esra"} } */ +/* { dg-final { cleanup-tree-dump "esra" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr44423.c b/gcc/testsuite/gcc.dg/tree-ssa/pr44423.c new file mode 100644 index 00000000000..6232d64963a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr44423.c @@ -0,0 +1,47 @@ +/* { dg-do compile { target x86_64-*-* } } */ +/* { dg-options "-O2 -fdump-tree-esra-details" } */ + +#include "xmmintrin.h" + +typedef __m128 v4sf; // vector of 4 floats (SSE1) + +#define ARRSZ 1024 + +typedef union { + float f[4]; + v4sf v; +} V4SF; + +struct COLOUR { + float r,g,b; +}; + +void func (float *pre1, float pre2, struct COLOUR *a, V4SF *lpic) + { + V4SF va; + int y; + va.f[0]=a->r;va.f[1]=a->g;va.f[2]=a->b;va.f[3]=0.f; + for (y=0; y<20; ++y) + { + float att = pre1[y]*pre2; + v4sf tmpatt=_mm_load1_ps(&att); + tmpatt=_mm_mul_ps(tmpatt,va.v); + lpic[y].v=_mm_add_ps(tmpatt,lpic[y].v); + } + } + +int main() + { + V4SF lpic[ARRSZ]; + float pre1[ARRSZ]; + int i; + struct COLOUR col={0.,2.,4.}; + for (i=0; i<20; ++i) + pre1[i]=0.4; + for (i=0;i<10000000;++i) + func(&pre1[0],0.3,&col,&lpic[0]); + return 0; + } + +/* { dg-final { scan-tree-dump-times "Created a replacement" 0 "esra"} } */ +/* { dg-final { cleanup-tree-dump "esra" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr44483.c b/gcc/testsuite/gcc.dg/tree-ssa/pr44483.c new file mode 100644 index 00000000000..cdae91a9098 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr44483.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-c -O3" { target *-*-* } } */ + +int ffesum (void) { + int ch[4], ii, jj, kk; + char asc[32]; + + for (ii = 0; ii < 4; ii++) + { + for (jj = 0; jj < 4; jj++) + ch[jj] = ii; + for (kk = 0; kk < 13; kk++) + for (jj = 0; jj < 4; jj += 2) + if ((unsigned char) ch[jj] || (unsigned char) ch[jj + 1]) + ch[jj]++; + for (jj = 0; jj < 4; jj++) + asc[4 * jj + ii] = ch[jj]; + } + return asc[0]; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c index 3b9e19fe5e5..9e453a7c08a 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c @@ -5,20 +5,12 @@ /* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 -fdump-tree-aprefetch-details -fdump-tree-optimized" } */ #define K 1000000 -int a[K], b[K]; +int a[K]; void test(int *p) { unsigned i; - /* Nontemporal store should be used for a. */ - for (i = 0; i < K; i++) - a[i] = 0; - - /* Nontemporal store should be used for a, nontemporal prefetch for b. */ - for (i = 0; i < K; i++) - a[i] = b[i]; - /* Nontemporal store should not be used here (only write and read temporal prefetches). */ for (i = 0; i < K - 10000; i++) @@ -44,18 +36,14 @@ void test(int *p) } /* { dg-final { scan-tree-dump-times "Issued prefetch" 5 "aprefetch" } } */ -/* { dg-final { scan-tree-dump-times "Issued nontemporal prefetch" 3 "aprefetch" } } */ -/* { dg-final { scan-tree-dump-times "a nontemporal store" 2 "aprefetch" } } */ +/* { dg-final { scan-tree-dump-times "Issued nontemporal prefetch" 2 "aprefetch" } } */ +/* { dg-final { scan-tree-dump-times "a nontemporal store" 0 "aprefetch" } } */ -/* { dg-final { scan-tree-dump-times "builtin_prefetch" 8 "optimized" } } */ -/* { dg-final { scan-tree-dump-times "=\\{nt\\}" 18 "optimized" } } */ -/* { dg-final { scan-tree-dump-times "__builtin_ia32_mfence" 2 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "builtin_prefetch" 7 "optimized" } } */ /* { dg-final { scan-assembler-times "prefetchw" 5 } } */ /* { dg-final { scan-assembler-times "prefetcht" 1 } } */ -/* { dg-final { scan-assembler-times "prefetchnta" 2 } } */ -/* { dg-final { scan-assembler-times "movnti" 18 } } */ -/* { dg-final { scan-assembler-times "mfence" 2 } } */ +/* { dg-final { scan-assembler-times "prefetchnta" 1 } } */ /* { dg-final { cleanup-tree-dump "aprefetch" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c new file mode 100644 index 00000000000..a05d552ace1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c @@ -0,0 +1,28 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=athlon" } } */ +/* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 -fdump-tree-aprefetch-details -fdump-tree-optimized" } */ + +#define K 1000000 +int a[K]; + +void test() +{ + unsigned i; + + /* Nontemporal store should be used for a. */ + for (i = 0; i < K; i++) + a[i] = 0; +} + +/* { dg-final { scan-tree-dump-times "a nontemporal store" 1 "aprefetch" } } */ + +/* { dg-final { scan-tree-dump "=\\{nt\\}" "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_ia32_mfence" 1 "optimized" } } */ + +/* { dg-final { scan-assembler "movnti" } } */ +/* { dg-final { scan-assembler-times "mfence" 1 } } */ + +/* { dg-final { cleanup-tree-dump "aprefetch" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c new file mode 100644 index 00000000000..eb22a660e43 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c @@ -0,0 +1,32 @@ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-require-effective-target sse2 } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=athlon" } } */ +/* { dg-options "-O2 -fprefetch-loop-arrays -march=athlon -msse2 -mfpmath=sse --param simultaneous-prefetches=100 -fdump-tree-aprefetch-details -fdump-tree-optimized" } */ + +#define K 1000000 +int a[K], b[K]; + +void test() +{ + unsigned i; + + /* Nontemporal store should be used for a, nontemporal prefetch for b. */ + for (i = 0; i < K; i++) + a[i] = b[i]; + +} + +/* { dg-final { scan-tree-dump-times "Issued nontemporal prefetch" 1 "aprefetch" } } */ +/* { dg-final { scan-tree-dump-times "a nontemporal store" 1 "aprefetch" } } */ + +/* { dg-final { scan-tree-dump-times "builtin_prefetch" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump "=\\{nt\\}" "optimized" } } */ +/* { dg-final { scan-tree-dump-times "__builtin_ia32_mfence" 1 "optimized" } } */ + +/* { dg-final { scan-assembler-times "prefetchnta" 1 } } */ +/* { dg-final { scan-assembler "movnti" } } */ +/* { dg-final { scan-assembler-times "mfence" 1 } } */ + +/* { dg-final { cleanup-tree-dump "aprefetch" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c b/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c index b61674dff3a..6db9ba0d871 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-alias" } */ +/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-ealias" } */ extern void abort (void); struct X { @@ -22,5 +22,5 @@ foo(int i, int j, int k, int off) return *q; } -/* { dg-final { scan-tree-dump "q_., points-to vars: { k }" "alias" } } */ -/* { dg-final { cleanup-tree-dump "alias" } } */ +/* { dg-final { scan-tree-dump "q_., points-to vars: { k }" "ealias" } } */ +/* { dg-final { cleanup-tree-dump "ealias" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c b/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c index adb01b23165..85b96b190e2 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-alias" } */ +/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-ealias" } */ extern void abort (void); struct X { @@ -22,5 +22,5 @@ foo(int i, int j, int k, int off) return *q; } -/* { dg-final { scan-tree-dump "q_., points-to vars: { i }" "alias" } } */ -/* { dg-final { cleanup-tree-dump "alias" } } */ +/* { dg-final { scan-tree-dump "q_., points-to vars: { i }" "ealias" } } */ +/* { dg-final { cleanup-tree-dump "ealias" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-21.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-21.c index 3b23c36238e..3f4adf43483 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-21.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-21.c @@ -21,5 +21,9 @@ int bar (void) return q->i; } -/* { dg-final { scan-tree-dump-times "a.b.i" 2 "ccp1" } } */ +/* The first access is through struct A, so a.b.i is fine, + the second access needs to preserve the original access type struct B. */ + +/* { dg-final { scan-tree-dump-times "a.b.i" 1 "ccp1" } } */ +/* { dg-final { scan-tree-dump-times "MEM\\\[\\\(struct B \\\*\\\)&a\\\].i" 1 "ccp1" } } */ /* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-23.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-23.c index ac7f068cfd1..fb4af2d484d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-23.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-23.c @@ -15,5 +15,5 @@ int foo (void) return *x; } -/* { dg-final { scan-tree-dump "a.i\\\[1\\\]" "ccp1" } } */ +/* { dg-final { scan-tree-dump "MEM\\\[\\\(int \\\*\\\)&a \\\+ 4B\\\]" "ccp1" } } */ /* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-25.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-25.c index f29c4942ace..7912a57f09e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-25.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-25.c @@ -9,6 +9,6 @@ int foo(int i) } /* { dg-final { scan-tree-dump "&a\\\[\[iD\]\\\." "ccp1" } } */ -/* { dg-final { scan-tree-dump "= a\\\[\[iD\]\\\." "forwprop1" } } */ +/* { dg-final { scan-tree-dump "= .*&a\\\]\\\[\[iD\]\\\." "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "ccp1" } } */ /* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-26.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-26.c index 542c4293960..c0a548155cb 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-26.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-26.c @@ -7,5 +7,5 @@ int foo(int i) return (a + 1)[i]; } -/* { dg-final { scan-tree-dump "= a\\\[D\\\." "forwprop1" } } */ +/* { dg-final { scan-tree-dump "=.*&a\\\]\\\[D\\\." "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c index 0cb63242c0e..b9ec6bc720f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c @@ -11,6 +11,5 @@ int f(int *a) return *c + t; } -/* { dg-final { scan-tree-dump "Replaced \\\(int \\\*\\\) b_.*with a_" "fre" } } */ -/* { dg-final { scan-tree-dump "Replaced \\\*c_.*with t_" "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced \\\*a_\[^\n\].*with t_" "fre" } } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c index ae9eb5a2002..972e6c69ef9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c @@ -23,6 +23,5 @@ void foo(double (*q)[4], struct Foo *tmp1) } } -/* { dg-final { scan-tree-dump "Inserted .* &a" "fre" } } */ -/* { dg-final { scan-tree-dump "Replaced tmp1_.\\\(D\\\)->data" "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced tmp1_.\\\(D\\\)->data with &a" "fre" } } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c index 81b82fe4880..9d1b3f2ba92 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c @@ -27,6 +27,5 @@ void foo(double (*q)[4]) bar(a); } -/* { dg-final { scan-tree-dump "Inserted .* &a" "fre" } } */ -/* { dg-final { scan-tree-dump "Replaced tmp1.data" "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced tmp1.data with &a" "fre" } } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c index 978b7abab3a..b986bdd92a9 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Os -fdump-tree-pre-details" } */ +/* { dg-options "-O -fdump-tree-fre-details" } */ typedef union { @@ -23,5 +23,5 @@ void foo(SA* pResult, SB* method, SC* self) pResult->data = pResult->data; } -/* { dg-final { scan-tree-dump "Deleted redundant store" "pre" } } */ -/* { dg-final { cleanup-tree-dump "pre" } } */ +/* { dg-final { scan-tree-dump "Deleted redundant store" "fre" } } */ +/* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c index c87f62e69c6..f87476a3a9f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c @@ -7,6 +7,6 @@ foo (int *array) return array[1]; return 0; } -/* We should eliminate one address calculation, and one load. */ -/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "fre"} } */ +/* We should eliminate one load. */ +/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "fre"} } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c index 27ccda5264a..7caf4eec6f8 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c @@ -23,5 +23,5 @@ int vnum_test8(int *data) } /* We should eliminate m - n, n + k, set data[5] = 0, eliminate the address arithmetic for data[5], and set p = 0. -/* { dg-final { scan-tree-dump-times "Eliminated: 6" 1 "fre"} } */ +/* { dg-final { scan-tree-dump-times "Eliminated: 5" 1 "fre"} } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c index 78e92d769e4..7dc7833647b 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c @@ -1,5 +1,5 @@ /* { dg-do "compile" } */ -/* { dg-options "-O2 -fdump-tree-fre" } */ +/* { dg-options "-O2 -fdump-tree-fre-details" } */ struct S { float f; }; int __attribute__((noinline)) @@ -11,5 +11,5 @@ foo (float *r, struct S *p) return i + *q; } -/* { dg-final { scan-tree-dump-times "\\\*q" 1 "fre" } } */ +/* { dg-final { scan-tree-dump "Replaced\[^\n\]*with i_." "fre" } } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c index aa9e142bba0..812dac928da 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c @@ -12,7 +12,8 @@ foo ( struct S *p) } -/* There should only be one load of p->f because fwprop can change *(int *)&p->f into just (int)p->f. */ -/* { dg-final { scan-tree-dump-times "p_.\\\(D\\\)->f" 1 "fre" } } */ +/* There should only be one load of p->f because fwprop can change + *(int *)&p->f into just (int)p->f. */ +/* { dg-final { scan-tree-dump-times "= \[^\n\]*p_.\\\(D\\\)" 1 "fre" } } */ /* { dg-final { cleanup-tree-dump "fre" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c index 73382941488..25b77201c59 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c @@ -5,6 +5,7 @@ this. */ /* { dg-do compile { target { ! "mips*-*-* s390*-*-* avr-*-*" } } } */ /* { dg-options "-O2 -fdump-tree-vrp -fdump-tree-dom" } */ +/* { dg-options "-O2 -fdump-tree-vrp -fdump-tree-dom -march=i586" { target { i?86-*-* && ilp32 } } } */ int h(int x, int y) { diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-10.c b/gcc/testsuite/gcc.dg/vect/bb-slp-10.c index 1a678ca3677..d31ffb47c34 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-10.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-10.c @@ -28,6 +28,9 @@ main1 (unsigned int x, unsigned int y) *pout++ = a2 * x; *pout++ = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[1] != (in[0] + 23) * x || out[2] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-11.c b/gcc/testsuite/gcc.dg/vect/bb-slp-11.c index 92a86cd242a..14c4f3a82c6 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-11.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-11.c @@ -27,6 +27,9 @@ main1 (unsigned int x, unsigned int y) *pout++ = a2 * x; *pout++ = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-13.c b/gcc/testsuite/gcc.dg/vect/bb-slp-13.c index 5005ae5019f..7e1d3ff798b 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-13.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-13.c @@ -25,6 +25,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-14.c b/gcc/testsuite/gcc.dg/vect/bb-slp-14.c index 673a163c92f..6ffbe28741a 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-14.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-14.c @@ -26,6 +26,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-15.c b/gcc/testsuite/gcc.dg/vect/bb-slp-15.c index ba8bc757e86..b927348c810 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-15.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-15.c @@ -30,6 +30,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-17.c b/gcc/testsuite/gcc.dg/vect/bb-slp-17.c index 36227391d2e..bb4bd5d8bc5 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-17.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-17.c @@ -34,6 +34,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-18.c b/gcc/testsuite/gcc.dg/vect/bb-slp-18.c index ab99f822aff..c5da3516c46 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-18.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-18.c @@ -25,6 +25,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != a0 * x || out[1] != a1 * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-19.c b/gcc/testsuite/gcc.dg/vect/bb-slp-19.c index 5ee83a1945e..2cb1568488a 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-19.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-19.c @@ -9,10 +9,10 @@ unsigned short out[N]; unsigned short in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; +int i; __attribute__ ((noinline)) int main1 () { - int i; unsigned short *pin = &in[0]; unsigned short *pout = &out[0]; @@ -27,6 +27,9 @@ main1 () *pout++ = *pin++; *pout++ = *pin++; + if (i) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != in[0] || out[1] != in[1] diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-20.c b/gcc/testsuite/gcc.dg/vect/bb-slp-20.c index 910eae5baff..ec12051e00a 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-20.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-20.c @@ -37,6 +37,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-21.c b/gcc/testsuite/gcc.dg/vect/bb-slp-21.c index f0b4f6b1ac8..697914ab053 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-21.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-21.c @@ -37,6 +37,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-22.c b/gcc/testsuite/gcc.dg/vect/bb-slp-22.c index 3e6e685f118..7463bc653d9 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-22.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-22.c @@ -36,6 +36,9 @@ main1 (unsigned int x, unsigned int y) out[3] = a3 * y; } + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if ((x <= y && (out[0] != (in[0] + 23) * x diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-23.c b/gcc/testsuite/gcc.dg/vect/bb-slp-23.c index 640d81a2560..d125f9d7115 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-23.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-23.c @@ -30,6 +30,9 @@ main1 (unsigned int x, unsigned int y) out[2] = a2 * x; out[3] = a3 * y; + if (x) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != (in[0] + 23) * x || out[1] != (in[1] + 142) * y diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-3.c b/gcc/testsuite/gcc.dg/vect/bb-slp-3.c index 07ad7129ad7..c35f035e0f2 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-3.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-3.c @@ -9,10 +9,10 @@ unsigned int out[N]; unsigned int in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; +int i; __attribute__ ((noinline)) int main1 () { - int i; unsigned int *pin = &in[0]; unsigned int *pout = &out[0]; @@ -21,6 +21,9 @@ main1 () *pout++ = *pin++; *pout++ = *pin++; + if (i) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != in[0] || out[1] != in[1] diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-4.c b/gcc/testsuite/gcc.dg/vect/bb-slp-4.c index 4ed8d7c6b39..faa90f3dfde 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-4.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-4.c @@ -9,16 +9,19 @@ unsigned short out[N]; unsigned short in[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; +int i; __attribute__ ((noinline)) int main1 () { - int i; unsigned short *pin = &in[0]; unsigned short *pout = &out[0]; *pout++ = *pin++; *pout++ = *pin++; + if (i) + __asm__ volatile ("" : : : "memory"); + /* Check results. */ if (out[0] != in[0] || out[1] != in[1]) diff --git a/gcc/testsuite/gcc.dg/vect/pr44507.c b/gcc/testsuite/gcc.dg/vect/pr44507.c new file mode 100644 index 00000000000..50c485399a4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr44507.c @@ -0,0 +1,55 @@ +/* { dg-require-effective-target vect_int } */ + +#include <stdlib.h> +#include "tree-vect.h" + +int seeIf256ByteArrayIsConstant( + unsigned char *pArray) +{ + int index; + unsigned int curVal, orVal, andVal; + int bytesAreEqual = 0; + + if (pArray != 0) + { + for (index = 0, orVal = 0, andVal = 0xFFFFFFFF; + index < 64; + index += (int)sizeof(unsigned int)) + { + curVal = *((unsigned int *)(&pArray[index])); + orVal = orVal | curVal; + andVal = andVal & curVal; + } + + if (!((orVal == andVal) + && ((orVal >> 8) == (andVal & 0x00FFFFFF)))) + abort (); + } + + return 0; +} + + +int main(int argc, char** argv) +{ + unsigned char array1[64] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + }; + + argv = argv; + argc = argc; + + check_vect (); + + return seeIf256ByteArrayIsConstant(&array1[0]); +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-5.c b/gcc/testsuite/gcc.dg/vect/slp-perm-5.c index e7c9f7feaa8..4e0c145ef1f 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-5.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-5.c @@ -61,8 +61,7 @@ int main (int argc, const char* argv[]) input2[i] = i%256; output[i] = 0; output2[i] = 0; - if (input[i] > 256) - abort (); + __asm__ volatile (""); } foo (input, output, input2, output2); diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-6.c b/gcc/testsuite/gcc.dg/vect/slp-perm-6.c index 430415c5a33..27e60369c6c 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-perm-6.c +++ b/gcc/testsuite/gcc.dg/vect/slp-perm-6.c @@ -60,8 +60,7 @@ int main (int argc, const char* argv[]) input2[i] = i%256; output[i] = 0; output2[i] = 0; - if (input[i] > 256) - abort (); + __asm__ volatile (""); } foo (input, output, input2, output2); diff --git a/gcc/testsuite/gcc.dg/volatile2.c b/gcc/testsuite/gcc.dg/volatile2.c index 4bfc441c862..d663123c83d 100644 --- a/gcc/testsuite/gcc.dg/volatile2.c +++ b/gcc/testsuite/gcc.dg/volatile2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-gimple -fdump-tree-optimized" } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ struct GTeth_desc { @@ -12,14 +12,11 @@ struct GTeth_softc void foo(struct GTeth_softc *sc) { - /* Verify that we retain the cast to (volatile struct GTeth_desc *) - after gimplification and that we keep the volatileness on the + /* Verify that we retain the volatileness on the store until after optimization. */ volatile struct GTeth_desc *p = &sc->txq_desc[0]; p->ed_cmdsts = 0; } -/* { dg-final { scan-tree-dump "\\(volatile struct GTeth_desc \\*\\) D" "gimple" } } */ /* { dg-final { scan-tree-dump "{v}" "optimized" } } */ -/* { dg-final { cleanup-tree-dump "gimple" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.target/arm/eliminate.c b/gcc/testsuite/gcc.target/arm/eliminate.c new file mode 100644 index 00000000000..f254dd811d2 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/eliminate.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct X +{ + int c; +}; + +extern void bar(struct X *); + +void foo () +{ + struct X x; + bar (&x); + bar (&x); + bar (&x); +} + +/* { dg-final { scan-assembler-times "r0,\[\\t \]*sp" 3 } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr40900.c b/gcc/testsuite/gcc.target/arm/pr40900.c new file mode 100644 index 00000000000..278bc370223 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pr40900.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-optimize-sibling-calls" } */ + +extern short shortv2(); +short shortv1() +{ + return shortv2(); +} + +/* { dg-final { scan-assembler-not "lsl" } } */ +/* { dg-final { scan-assembler-not "asr" } } */ +/* { dg-final { scan-assembler-not "sxth" } } */ diff --git a/gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-1.c b/gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-1.c new file mode 100644 index 00000000000..d75f13aa089 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-1.c @@ -0,0 +1,12 @@ +/* Use ADDS clobbering source operand, rather than CMN */ +/* { dg-options "-mthumb -Os" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-final { scan-assembler "adds" } } */ +/* { dg-final { scan-assembler-not "cmn" } } */ + +void foo1(void); +void bar5(int x) +{ + if (x == -15) + foo1(); +} diff --git a/gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-2.c b/gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-2.c new file mode 100644 index 00000000000..358bc6e143c --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/thumb2-cmpneg2add-2.c @@ -0,0 +1,12 @@ +/* Use ADDS with a scratch, rather than CMN */ +/* { dg-options "-mthumb -Os" } */ +/* { dg-require-effective-target arm_thumb2_ok } */ +/* { dg-final { scan-assembler "adds" } } */ +/* { dg-final { scan-assembler-not "cmn" } } */ + +void foo1(int); +void bar5(int x) +{ + if (x == -1) + foo1(x); +} diff --git a/gcc/testsuite/gcc.target/arm/wmul-1.c b/gcc/testsuite/gcc.target/arm/wmul-1.c index df85e7cb285..ccb3041551a 100644 --- a/gcc/testsuite/gcc.target/arm/wmul-1.c +++ b/gcc/testsuite/gcc.target/arm/wmul-1.c @@ -15,4 +15,4 @@ int mac(const short *a, const short *b, int sqr, int *sum) return sqr; } -/* { dg-final { scan-assembler-times "smulbb" 2 } } */ +/* { dg-final { scan-assembler-times "smlabb" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/wmul-3.c b/gcc/testsuite/gcc.target/arm/wmul-3.c new file mode 100644 index 00000000000..325dcebbbda --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/wmul-3.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv6t2" } */ + +int mac(const short *a, const short *b, int sqr, int *sum) +{ + int i; + int dotp = *sum; + + for (i = 0; i < 150; i++) { + dotp -= b[i] * a[i]; + sqr -= b[i] * b[i]; + } + + *sum = dotp; + return sqr; +} + +/* { dg-final { scan-assembler-times "smulbb" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/wmul-4.c b/gcc/testsuite/gcc.target/arm/wmul-4.c new file mode 100644 index 00000000000..e8642f8aed1 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/wmul-4.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv6t2" } */ + +int mac(const int *a, const int *b, long long sqr, long long *sum) +{ + int i; + long long dotp = *sum; + + for (i = 0; i < 150; i++) { + dotp += (long long) b[i] * a[i]; + sqr += (long long) b[i] * b[i]; + } + + *sum = dotp; + return sqr; +} + +/* { dg-final { scan-assembler-times "smlal" 2 } } */ diff --git a/gcc/testsuite/gcc.target/i386/abi-2.c b/gcc/testsuite/gcc.target/i386/abi-2.c index 5ed6b4a56dd..39eafc25039 100644 --- a/gcc/testsuite/gcc.target/i386/abi-2.c +++ b/gcc/testsuite/gcc.target/i386/abi-2.c @@ -1,6 +1,7 @@ /* Make certain that we pass __m256i in the correct register for AVX. */ /* { dg-do compile } */ /* { dg-options "-O1 -mavx" } */ +/* { dg-options "-mabi=sysv -O1 -mavx" { target x86_64-*-mingw* } } */ typedef long long __m256i __attribute__ ((__vector_size__ (32))); __m256i foo (void) { return (__m256i){ 1, 2, 3, 4 }; } diff --git a/gcc/testsuite/gcc.target/i386/aes-avx-check.h b/gcc/testsuite/gcc.target/i386/aes-avx-check.h index e73e36eab25..e91e88173cf 100644 --- a/gcc/testsuite/gcc.target/i386/aes-avx-check.h +++ b/gcc/testsuite/gcc.target/i386/aes-avx-check.h @@ -6,6 +6,13 @@ static void aes_avx_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + aes_avx_test (); +} + int main () { @@ -17,7 +24,7 @@ main () /* Run AES + AVX test only if host has AES + AVX support. */ if ((ecx & (bit_AVX | bit_AES)) == (bit_AVX | bit_AES)) { - aes_avx_test (); + do_test (); #ifdef DEBUG printf ("PASSED\n"); #endif diff --git a/gcc/testsuite/gcc.target/i386/aes-check.h b/gcc/testsuite/gcc.target/i386/aes-check.h index f56f1adeb3e..7e794423e47 100644 --- a/gcc/testsuite/gcc.target/i386/aes-check.h +++ b/gcc/testsuite/gcc.target/i386/aes-check.h @@ -5,6 +5,13 @@ static void aes_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + aes_test (); +} + int main () { @@ -16,7 +23,7 @@ main () /* Run AES test only if host has AES support. */ if (ecx & bit_AES) { - aes_test (); + do_test (); #ifdef DEBUG printf ("PASSED\n"); #endif diff --git a/gcc/testsuite/gcc.target/i386/amd64-abi-3.c b/gcc/testsuite/gcc.target/i386/amd64-abi-3.c index 8db7f13b1ea..6b7bf6a6e5f 100644 --- a/gcc/testsuite/gcc.target/i386/amd64-abi-3.c +++ b/gcc/testsuite/gcc.target/i386/amd64-abi-3.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O2 -fomit-frame-pointer -mno-sse" } */ +/* { dg-options "-O2 -fomit-frame-pointer -mno-sse -mtune=k8" } */ /* { dg-final { scan-assembler "subq\[\\t \]*\\\$88,\[\\t \]*%rsp" } } */ /* { dg-final { scan-assembler-not "subq\[\\t \]*\\\$216,\[\\t \]*%rsp" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx-check.h b/gcc/testsuite/gcc.target/i386/avx-check.h index 8db55a10357..7736fc9f40b 100644 --- a/gcc/testsuite/gcc.target/i386/avx-check.h +++ b/gcc/testsuite/gcc.target/i386/avx-check.h @@ -4,6 +4,13 @@ static void avx_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + avx_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run AVX test only if host has AVX support. */ if (ecx & bit_AVX) { - avx_test (); + do_test (); #ifdef DEBUG printf ("PASSED\n"); #endif diff --git a/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-3.c b/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-3.c new file mode 100644 index 00000000000..b7d4a373101 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-3.c @@ -0,0 +1,7 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O2 -mavx" } */ + +#define OFFSET 0 + +#include "avx-vextractf128-256-1.c" diff --git a/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-4.c b/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-4.c new file mode 100644 index 00000000000..973fa58b12a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx-vextractf128-256-4.c @@ -0,0 +1,7 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-options "-O2 -mavx" } */ + +#define OFFSET 0 + +#include "avx-vextractf128-256-2.c" diff --git a/gcc/testsuite/gcc.target/i386/extract-1.c b/gcc/testsuite/gcc.target/i386/extract-1.c new file mode 100644 index 00000000000..102beb230ac --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/extract-1.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=generic" } */ + +int +foo (unsigned char x, unsigned char y) +{ + return (x % y) != 0; +} + +/* { dg-final { scan-assembler-not "test\[b\]?\[^\\n\]*%\[a-d\]l" } } */ diff --git a/gcc/testsuite/gcc.target/i386/extract-2.c b/gcc/testsuite/gcc.target/i386/extract-2.c new file mode 100644 index 00000000000..3bb5f154c4e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/extract-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=generic" } */ + +int +foo (unsigned char x, unsigned char y) +{ + return (x % y) > 4; +} + +/* { dg-final { scan-assembler-times "cmp\[b\]?\[^\\n\]*%\[a-d\]h" 1 } } */ +/* { dg-final { scan-assembler-not "cmp\[b\]?\[^\\n\]*%\[a-d\]l" } } */ diff --git a/gcc/testsuite/gcc.target/i386/extract-3.c b/gcc/testsuite/gcc.target/i386/extract-3.c new file mode 100644 index 00000000000..520bf3bb557 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/extract-3.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=generic" } */ + +typedef struct +{ + unsigned char c1; + unsigned char c2; + unsigned char c3; + unsigned char c4; +} foo_t; + +int +#ifndef __x86_64__ +__attribute__((regparm(3))) +#endif +foo (foo_t x) +{ + return x.c2 != 0; +} + +/* { dg-final { scan-assembler-not "test\[b\]?\[^\\n\]*%\[a-z0-9\]+l" } } */ diff --git a/gcc/testsuite/gcc.target/i386/extract-4.c b/gcc/testsuite/gcc.target/i386/extract-4.c new file mode 100644 index 00000000000..716ae2299ea --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/extract-4.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=generic" } */ + +typedef struct +{ + unsigned char c1; + unsigned char c2; + unsigned char c3; + unsigned char c4; +} foo_t; + +int +#ifndef __x86_64__ +__attribute__((regparm(3))) +#endif +foo (foo_t x) +{ + return x.c2 > 4; +} + +/* { dg-final { scan-assembler-times "cmp\[b\]?\[^\\n\]*%\[a-z0-9\]+h" 1 } } */ +/* { dg-final { scan-assembler-not "cmp\[b\]?\[^\\n\]*%\[a-z0-9\]+l" } } */ diff --git a/gcc/testsuite/gcc.target/i386/extract-5.c b/gcc/testsuite/gcc.target/i386/extract-5.c new file mode 100644 index 00000000000..a488dafa20f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/extract-5.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=generic" } */ + +typedef struct +{ + unsigned int c1:8; + unsigned int c2:8; + unsigned int c3:8; + unsigned int c4:8; +} foo_t; + +int +#ifndef __x86_64__ +__attribute__((regparm(3))) +#endif +foo (foo_t x) +{ + return x.c2 != 0; +} + +/* { dg-final { scan-assembler-not "test\[b\]?\[^\\n\]*%\[a-z0-9\]+l" } } */ diff --git a/gcc/testsuite/gcc.target/i386/extract-6.c b/gcc/testsuite/gcc.target/i386/extract-6.c new file mode 100644 index 00000000000..1440ec3be35 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/extract-6.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=generic" } */ + +typedef struct +{ + unsigned int c1:8; + unsigned int c2:8; + unsigned int c3:8; + unsigned int c4:8; + +} foo_t; + +int +#ifndef __x86_64__ +__attribute__((regparm(3))) +#endif +foo (foo_t x) +{ + return x.c2 > 4; +} + +/* { dg-final { scan-assembler-times "cmp\[b\]?\[^\\n\]*%\[a-z0-9\]+h" 1 } } */ +/* { dg-final { scan-assembler-not "cmp\[b\]?\[^\\n\]*%\[a-z0-9\]+l" } } */ diff --git a/gcc/testsuite/gcc.target/i386/fma4-check.h b/gcc/testsuite/gcc.target/i386/fma4-check.h index 76fcdef99b6..dc7ee574878 100644 --- a/gcc/testsuite/gcc.target/i386/fma4-check.h +++ b/gcc/testsuite/gcc.target/i386/fma4-check.h @@ -4,6 +4,13 @@ static void fma4_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + fma4_test (); +} + int main () { @@ -14,7 +21,7 @@ main () /* Run FMA4 test only if host has FMA4 support. */ if (ecx & bit_FMA4) - fma4_test (); + do_test (); exit (0); } diff --git a/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h b/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h index 458e7cda898..4f2f7f3ac40 100644 --- a/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h +++ b/gcc/testsuite/gcc.target/i386/mmx-3dnow-check.h @@ -5,6 +5,13 @@ static void mmx_3dnow_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + mmx_3dnow_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run 3DNow! test only if host has 3DNow! support. */ if (edx & bit_3DNOW) - mmx_3dnow_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/mmx-check.h b/gcc/testsuite/gcc.target/i386/mmx-check.h index aefdc4e8799..faf9b876f38 100644 --- a/gcc/testsuite/gcc.target/i386/mmx-check.h +++ b/gcc/testsuite/gcc.target/i386/mmx-check.h @@ -5,6 +5,13 @@ static void mmx_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + mmx_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run MMX test only if host has MMX support. */ if (edx & bit_MMX) - mmx_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/mod-1.c b/gcc/testsuite/gcc.target/i386/mod-1.c new file mode 100644 index 00000000000..a7b1a92258d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/mod-1.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mtune=generic" } */ + +typedef struct { + int a; +} VCR; + +typedef struct { + VCR vcr[8]; +} VCRC; + +typedef struct { + char vcr; +} OWN; + +OWN Own[16]; + +void +f (VCRC *x, OWN *own) +{ + x[own->vcr / 8].vcr[own->vcr % 8].a--; + x[own->vcr / 8].vcr[own->vcr % 8].a = x[own->vcr / 8].vcr[own->vcr % 8].a; +} + +/* { dg-final { scan-assembler-times "idivb" 1 } } */ +/* { dg-final { scan-assembler-not "incl" } } */ +/* { dg-final { scan-assembler-not "orl" } } */ +/* { dg-final { scan-assembler-not "andb" } } */ +/* { dg-final { scan-assembler-not "jns" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h b/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h index de633336157..550e49904d9 100644 --- a/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h +++ b/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h @@ -6,6 +6,13 @@ static void pclmul_avx_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + pclmul_avx_test (); +} + int main () { @@ -17,7 +24,7 @@ main () /* Run PCLMUL + AVX test only if host has PCLMUL + AVX support. */ if ((ecx & (bit_AVX | bit_PCLMUL)) == (bit_AVX | bit_PCLMUL)) { - pclmul_avx_test (); + do_test (); #ifdef DEBUG printf ("PASSED\n"); #endif diff --git a/gcc/testsuite/gcc.target/i386/pclmul-check.h b/gcc/testsuite/gcc.target/i386/pclmul-check.h index 706fd640034..7526cbe2ddf 100644 --- a/gcc/testsuite/gcc.target/i386/pclmul-check.h +++ b/gcc/testsuite/gcc.target/i386/pclmul-check.h @@ -5,6 +5,13 @@ static void pclmul_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + pclmul_test (); +} + int main () { @@ -16,7 +23,7 @@ main () /* Run PCLMULQDQ test only if host has PCLMULQDQ support. */ if (ecx & bit_PCLMUL) { - pclmul_test (); + do_test (); #ifdef DEBUG printf ("PASSED\n"); #endif diff --git a/gcc/testsuite/gcc.target/i386/pr27971.c b/gcc/testsuite/gcc.target/i386/pr27971.c index 8c706adda59..27888de6d2f 100644 --- a/gcc/testsuite/gcc.target/i386/pr27971.c +++ b/gcc/testsuite/gcc.target/i386/pr27971.c @@ -3,7 +3,13 @@ unsigned array[4]; -unsigned foo(unsigned long x) +#ifdef _WIN64 +__extension__ typedef unsigned long long TYPE; +#else +#define TYPE unsigned long +#endif + +unsigned foo(TYPE x) { return array[(x>>2)&3ul]; } diff --git a/gcc/testsuite/gcc.target/i386/pr39139.c b/gcc/testsuite/gcc.target/i386/pr39139.c index 95ea7fda9ba..e4cb845f9ec 100644 --- a/gcc/testsuite/gcc.target/i386/pr39139.c +++ b/gcc/testsuite/gcc.target/i386/pr39139.c @@ -12,22 +12,24 @@ # define SI_REG asm ("esi") #endif +__extension__ typedef __SIZE_TYPE__ size_t; + static inline int foo (unsigned int x, void *y) { - register unsigned long r AX_REG; - register unsigned long a1 DI_REG; - register unsigned long a2 SI_REG; - a1 = (unsigned long) x; - a2 = (unsigned long) y; + register size_t r AX_REG; + register size_t a1 DI_REG; + register size_t a2 SI_REG; + a1 = (size_t) x; + a2 = (size_t) y; asm volatile ("" : "=r" (r), "+r" (a1), "+r" (a2) : : "memory"); return (int) r; } -struct T { unsigned long t1, t2; unsigned int t3, t4, t5; }; +struct T { size_t t1, t2; unsigned int t3, t4, t5; }; int -bar (unsigned long x, unsigned int y, unsigned long u, unsigned int v) +bar (size_t x, unsigned int y, size_t u, unsigned int v) { long r; struct T e = { .t1 = x, .t2 = u }; diff --git a/gcc/testsuite/gcc.target/i386/pr39315-check.c b/gcc/testsuite/gcc.target/i386/pr39315-check.c index ff926057536..8f7376015d0 100644 --- a/gcc/testsuite/gcc.target/i386/pr39315-check.c +++ b/gcc/testsuite/gcc.target/i386/pr39315-check.c @@ -1,4 +1,6 @@ +/* { dg-compile } */ typedef float __m128 __attribute__ ((__vector_size__ (16))); +__extension__ typedef __PTRDIFF_TYPE__ ptrdiff_t; extern void foo (__m128 *); extern void abort (void); @@ -8,7 +10,7 @@ __m128 y = { 0.0, 1.0, 2.0, 3.0 }; void bar (__m128 *x, int align) { - if ((((__PTRDIFF_TYPE__) x) & (align - 1)) != 0) + if ((((ptrdiff_t) x) & (align - 1)) != 0) abort (); if (__builtin_memcmp (x, &y, sizeof (y)) != 0) abort (); diff --git a/gcc/testsuite/gcc.target/i386/pr44481.c b/gcc/testsuite/gcc.target/i386/pr44481.c new file mode 100644 index 00000000000..701268b5656 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr44481.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +static inline unsigned +parity (unsigned x) +{ + return (unsigned) __builtin_parity (x); +} + +unsigned +f (unsigned rpoly) +{ + return parity (rpoly & 1) ^ parity (rpoly & 6); +} diff --git a/gcc/testsuite/gcc.target/i386/pr44546.c b/gcc/testsuite/gcc.target/i386/pr44546.c new file mode 100644 index 00000000000..517446fdc8f --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr44546.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -ffast-math -mfpmath=387" } */ + +typedef __SIZE_TYPE__ size_t; +typedef struct +{ + float *ewgts; +} vtx_data; + +extern void *zmalloc (size_t); +extern int whatever (vtx_data *); + +float * +compute_apsp_artifical_weights_packed (vtx_data * graph, int n) +{ + float *weights; + + weights = (float *) zmalloc (n * sizeof (float)); + weights[n] = + whatever (graph) > graph[n].ewgts[n] ? + whatever (graph) : graph[n].ewgts[n]; +} diff --git a/gcc/testsuite/gcc.target/i386/sse-check.h b/gcc/testsuite/gcc.target/i386/sse-check.h index 79ea4815517..85629cc71b9 100644 --- a/gcc/testsuite/gcc.target/i386/sse-check.h +++ b/gcc/testsuite/gcc.target/i386/sse-check.h @@ -6,6 +6,13 @@ static void sse_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + sse_test (); +} + int main () { @@ -16,7 +23,7 @@ main () /* Run SSE test only if host has SSE support. */ if (edx & bit_SSE) - sse_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/sse2-check.h b/gcc/testsuite/gcc.target/i386/sse2-check.h index a69333e391a..e9f17f04079 100644 --- a/gcc/testsuite/gcc.target/i386/sse2-check.h +++ b/gcc/testsuite/gcc.target/i386/sse2-check.h @@ -4,6 +4,13 @@ static void sse2_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + sse2_test (); +} + int main () { @@ -14,7 +21,7 @@ main () /* Run SSE2 test only if host has SSE2 support. */ if (edx & bit_SSE2) - sse2_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/sse2-vec-2a.c b/gcc/testsuite/gcc.target/i386/sse2-vec-2a.c new file mode 100644 index 00000000000..f230f27d45a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/sse2-vec-2a.c @@ -0,0 +1,5 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -msse2 -mtune=atom" } */ +/* { dg-require-effective-target sse2 } */ + +#include "sse2-vec-2.c" diff --git a/gcc/testsuite/gcc.target/i386/sse3-check.h b/gcc/testsuite/gcc.target/i386/sse3-check.h index 92930d10a3f..df0e63a4575 100644 --- a/gcc/testsuite/gcc.target/i386/sse3-check.h +++ b/gcc/testsuite/gcc.target/i386/sse3-check.h @@ -5,6 +5,13 @@ static void sse3_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + sse3_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run SSE3 test only if host has SSE3 support. */ if (ecx & bit_SSE3) - sse3_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-check.h b/gcc/testsuite/gcc.target/i386/sse4_1-check.h index 2d1c4e835a3..788f65d61cb 100644 --- a/gcc/testsuite/gcc.target/i386/sse4_1-check.h +++ b/gcc/testsuite/gcc.target/i386/sse4_1-check.h @@ -7,6 +7,13 @@ static void sse4_1_test (void); #define MASK 0x2 +static void +__attribute__ ((noinline)) +do_test (void) +{ + sse4_1_test (); +} + int main () { @@ -17,7 +24,7 @@ main () /* Run SSE4.1 test only if host has SSE4.1 support. */ if (ecx & bit_SSE4_1) - sse4_1_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/sse4_2-check.h b/gcc/testsuite/gcc.target/i386/sse4_2-check.h index 2a397e88683..d10e6c7d7e2 100644 --- a/gcc/testsuite/gcc.target/i386/sse4_2-check.h +++ b/gcc/testsuite/gcc.target/i386/sse4_2-check.h @@ -5,6 +5,13 @@ static void sse4_2_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + sse4_2_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run SSE4.2 test only if host has SSE4.2 support. */ if (ecx & bit_SSE4_2) - sse4_2_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/sse4a-check.h b/gcc/testsuite/gcc.target/i386/sse4a-check.h index d6140e8969c..d43b4b222b1 100644 --- a/gcc/testsuite/gcc.target/i386/sse4a-check.h +++ b/gcc/testsuite/gcc.target/i386/sse4a-check.h @@ -5,6 +5,13 @@ static void sse4a_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + sse4a_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run SSE4a test only if host has SSE4a support. */ if (ecx & bit_SSE4a) - sse4a_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/ssse3-check.h b/gcc/testsuite/gcc.target/i386/ssse3-check.h index 78df15db7d7..3ca79333c7f 100644 --- a/gcc/testsuite/gcc.target/i386/ssse3-check.h +++ b/gcc/testsuite/gcc.target/i386/ssse3-check.h @@ -5,6 +5,13 @@ static void ssse3_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + ssse3_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run SSSE3 test only if host has SSSE3 support. */ if (ecx & bit_SSSE3) - ssse3_test (); + do_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/i386/umod-1.c b/gcc/testsuite/gcc.target/i386/umod-1.c new file mode 100644 index 00000000000..54edf139d5a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/umod-1.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=atom" } */ + +unsigned char +foo (unsigned char x, unsigned char y) +{ + return x % y; +} + +/* { dg-final { scan-assembler-times "divb" 1 } } */ +/* { dg-final { scan-assembler-not "divw" } } */ diff --git a/gcc/testsuite/gcc.target/i386/umod-2.c b/gcc/testsuite/gcc.target/i386/umod-2.c new file mode 100644 index 00000000000..6fe73846833 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/umod-2.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=atom" } */ + +extern unsigned char z; + +unsigned char +foo (unsigned char x, unsigned char y) +{ + z = x/y; + return x % y; +} + +/* { dg-final { scan-assembler-times "divb" 1 } } */ +/* { dg-final { scan-assembler-not "divw" } } */ diff --git a/gcc/testsuite/gcc.target/i386/umod-3.c b/gcc/testsuite/gcc.target/i386/umod-3.c new file mode 100644 index 00000000000..7123bc9f256 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/umod-3.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mtune=atom" } */ + +extern void abort (void); +extern void exit (int); + +unsigned char cx = 7; + +int +main () +{ + unsigned char cy; + + cy = cx / 6; if (cy != 1) abort (); + cy = cx % 6; if (cy != 1) abort (); + + exit(0); +} + +/* { dg-final { scan-assembler-times "divb" 1 } } */ +/* { dg-final { scan-assembler-not "divw" } } */ diff --git a/gcc/testsuite/gcc.target/i386/vararg-1.c b/gcc/testsuite/gcc.target/i386/vararg-1.c index cfb1e30ab07..9ed9ab087d0 100644 --- a/gcc/testsuite/gcc.target/i386/vararg-1.c +++ b/gcc/testsuite/gcc.target/i386/vararg-1.c @@ -1,6 +1,7 @@ /* PR middle-end/36858 */ /* { dg-do run } */ /* { dg-options "-w" { target { lp64 } } } */ +/* { dg-options "-w" { target { llp64 } } } */ /* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" { target { ilp32 } } } */ /* { dg-require-effective-target sse2 } */ diff --git a/gcc/testsuite/gcc.target/i386/vararg-2.c b/gcc/testsuite/gcc.target/i386/vararg-2.c index 60793173d6c..804801256f1 100644 --- a/gcc/testsuite/gcc.target/i386/vararg-2.c +++ b/gcc/testsuite/gcc.target/i386/vararg-2.c @@ -1,6 +1,7 @@ /* PR middle-end/36859 */ /* { dg-do run } */ /* { dg-options "-w" { target { lp64 } } } */ +/* { dg-options "-w" { target { llp64 } } } */ /* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" { target { ilp32 } } } */ /* { dg-require-effective-target sse2 } */ diff --git a/gcc/testsuite/gcc.target/i386/volatile-bitfields-1.c b/gcc/testsuite/gcc.target/i386/volatile-bitfields-1.c new file mode 100644 index 00000000000..01a35f9f920 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/volatile-bitfields-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fstrict-volatile-bitfields" } */ + +typedef struct { + char a:1; + char b:7; + int c; +} BitStruct; + +volatile BitStruct bits; + +int foo () +{ + return bits.b; +} + +/* { dg-final { scan-assembler "movzbl.*bits" } } */ diff --git a/gcc/testsuite/gcc.target/i386/volatile-bitfields-2.c b/gcc/testsuite/gcc.target/i386/volatile-bitfields-2.c new file mode 100644 index 00000000000..302625a199b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/volatile-bitfields-2.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-strict-volatile-bitfields" } */ + +typedef struct { + char a:1; + char b:7; + int c; +} BitStruct; + +volatile BitStruct bits; + +int foo () +{ + return bits.b; +} + +/* { dg-final { scan-assembler "movl.*bits" } } */ diff --git a/gcc/testsuite/gcc.target/i386/xop-check.h b/gcc/testsuite/gcc.target/i386/xop-check.h index fb98c6d4bd4..7e8e665c79f 100644 --- a/gcc/testsuite/gcc.target/i386/xop-check.h +++ b/gcc/testsuite/gcc.target/i386/xop-check.h @@ -5,6 +5,13 @@ static void xop_test (void); +static void +__attribute__ ((noinline)) +do_test (void) +{ + xop_test (); +} + int main () { @@ -15,7 +22,7 @@ main () /* Run XOP test only if host has XOP support. */ if (ecx & bit_XOP) - xop_test (); + do_test (); exit (0); } diff --git a/gcc/testsuite/gcc.target/mips/madd-9.c b/gcc/testsuite/gcc.target/mips/madd-9.c new file mode 100644 index 00000000000..25dbd18a510 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/madd-9.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 isa_rev>=1 -mgp32" } */ +/* { dg-final { scan-assembler-not "\tmul\t" } } */ +/* { dg-final { scan-assembler "\tmadd\t" } } */ + +NOMIPS16 long long +f1 (int *a, int *b, int n) +{ + long long int x; + int i; + + x = 0; + for (i = 0; i < n; i++) + x += (long long) a[i] * b[i]; + return x; +} diff --git a/gcc/testsuite/gcc.target/powerpc/recip-1.c b/gcc/testsuite/gcc.target/powerpc/recip-1.c new file mode 100644 index 00000000000..d1e383dc4ea --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O2 -mrecip -ffast-math -mcpu=power6" } */ +/* { dg-final { scan-assembler-times "frsqrte" 2 } } */ +/* { dg-final { scan-assembler-times "fmsub" 2 } } */ +/* { dg-final { scan-assembler-times "fmul" 8 } } */ +/* { dg-final { scan-assembler-times "fnmsub" 4 } } */ + +double +rsqrt_d (double a) +{ + return 1.0 / __builtin_sqrt (a); +} + +float +rsqrt_f (float a) +{ + return 1.0f / __builtin_sqrtf (a); +} diff --git a/gcc/testsuite/gcc.target/powerpc/recip-2.c b/gcc/testsuite/gcc.target/powerpc/recip-2.c new file mode 100644 index 00000000000..69442733aab --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O2 -mrecip -ffast-math -mcpu=power5" } */ +/* { dg-final { scan-assembler-times "frsqrtes" 1 } } */ +/* { dg-final { scan-assembler-times "fmsubs" 1 } } */ +/* { dg-final { scan-assembler-times "fmuls" 6 } } */ +/* { dg-final { scan-assembler-times "fnmsubs" 3 } } */ +/* { dg-final { scan-assembler-times "fsqrt" 1 } } */ + +/* power5 resqrte is not accurate enough, and should not be generated by + default for -mrecip. */ +double +rsqrt_d (double a) +{ + return 1.0 / __builtin_sqrt (a); +} + +float +rsqrt_f (float a) +{ + return 1.0f / __builtin_sqrtf (a); +} diff --git a/gcc/testsuite/gcc.target/powerpc/recip-3.c b/gcc/testsuite/gcc.target/powerpc/recip-3.c new file mode 100644 index 00000000000..80a34e8ee59 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-3.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O2 -mrecip -ffast-math -mcpu=power7" } */ +/* { dg-final { scan-assembler-times "xsrsqrtedp" 1 } } */ +/* { dg-final { scan-assembler-times "xsmsub.dp" 1 } } */ +/* { dg-final { scan-assembler-times "xsmuldp" 4 } } */ +/* { dg-final { scan-assembler-times "xsnmsub.dp" 2 } } */ +/* { dg-final { scan-assembler-times "frsqrtes" 1 } } */ +/* { dg-final { scan-assembler-times "fmsubs" 1 } } */ +/* { dg-final { scan-assembler-times "fmuls" 4 } } */ +/* { dg-final { scan-assembler-times "fnmsubs" 2 } } */ + +double +rsqrt_d (double a) +{ + return 1.0 / __builtin_sqrt (a); +} + +float +rsqrt_f (float a) +{ + return 1.0f / __builtin_sqrtf (a); +} diff --git a/gcc/testsuite/gcc.target/powerpc/recip-4.c b/gcc/testsuite/gcc.target/powerpc/recip-4.c new file mode 100644 index 00000000000..bd496d70e25 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-4.c @@ -0,0 +1,36 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O3 -ftree-vectorize -mrecip -ffast-math -mcpu=power7 -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-times "xvrsqrtedp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmsub.dp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmuldp" 4 } } */ +/* { dg-final { scan-assembler-times "xvnmsub.dp" 2 } } */ +/* { dg-final { scan-assembler-times "xvrsqrtesp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmsub.sp" 1 } } */ +/* { dg-final { scan-assembler-times "xvmulsp" 4 } } */ +/* { dg-final { scan-assembler-times "xvnmsub.sp" 2 } } */ + +#define SIZE 1024 + +extern double a_d[SIZE] __attribute__((__aligned__(32))); +extern double b_d[SIZE] __attribute__((__aligned__(32))); + +void +vectorize_rsqrt_d (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + a_d[i] = 1.0 / __builtin_sqrt (b_d[i]); +} + +extern float a_f[SIZE] __attribute__((__aligned__(32))); +extern float b_f[SIZE] __attribute__((__aligned__(32))); + +void +vectorize_rsqrt_f (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + a_f[i] = 1.0f / __builtin_sqrtf (b_f[i]); +} diff --git a/gcc/testsuite/gcc.target/powerpc/recip-5.c b/gcc/testsuite/gcc.target/powerpc/recip-5.c new file mode 100644 index 00000000000..4a9c496201a --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-5.c @@ -0,0 +1,94 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-options "-O3 -ftree-vectorize -mrecip=all -ffast-math -mcpu=power7 -fno-unroll-loops" } */ +/* { dg-final { scan-assembler-times "xvredp" 4 } } */ +/* { dg-final { scan-assembler-times "xvresp" 5 } } */ +/* { dg-final { scan-assembler-times "xsredp" 2 } } */ +/* { dg-final { scan-assembler-times "fres" 2 } } */ + +#include <altivec.h> + +float f_recip (float a, float b) { return __builtin_recipdivf (a, b); } +double d_recip (double a, double b) { return __builtin_recipdiv (a, b); } + +float f_div (float a, float b) { return a / b; } +double d_div (double a, double b) { return a / b; } + +#define SIZE 1024 + +double d_a[SIZE] __attribute__((__aligned__(32))); +double d_b[SIZE] __attribute__((__aligned__(32))); +double d_c[SIZE] __attribute__((__aligned__(32))); + +float f_a[SIZE] __attribute__((__aligned__(32))); +float f_b[SIZE] __attribute__((__aligned__(32))); +float f_c[SIZE] __attribute__((__aligned__(32))); + +void vec_f_recip (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + f_a[i] = __builtin_recipdivf (f_b[i], f_c[i]); +} + +void vec_d_recip (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + d_a[i] = __builtin_recipdiv (d_b[i], d_c[i]); +} + +void vec_f_div (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + f_a[i] = f_b[i] / f_c[i]; +} + +void vec_f_div2 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + f_a[i] = f_b[i] / 2.0f; +} + +void vec_f_div53 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + f_a[i] = f_b[i] / 53.0f; +} + +void vec_d_div (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + d_a[i] = d_b[i] / d_c[i]; +} + +void vec_d_div2 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + d_a[i] = d_b[i] / 2.0; +} + +void vec_d_div53 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + d_a[i] = d_b[i] / 53.0; +} + +vector float v4sf_recip1 (vector float a, vector float b) { return vec_recipdiv (a, b); } +vector float v4sf_recip2 (vector float a, vector float b) { return __builtin_altivec_vrecipdivfp (a, b); } +vector double v2df_recip1 (vector double a, vector double b) { return vec_recipdiv (a, b); } +vector float v4sf_recip3 (vector float a, vector float b) { return __builtin_vsx_xvrecipdivsp (a, b); } +vector double v2df_recip2 (vector double a, vector double b) { return __builtin_vsx_xvrecipdivdp (a, b); } diff --git a/gcc/testsuite/gcc.target/powerpc/recip-6.c b/gcc/testsuite/gcc.target/powerpc/recip-6.c new file mode 100644 index 00000000000..7d71df6709d --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-6.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { powerpc*-*-linux* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ +/* { dg-require-effective-target vsx_hw } */ +/* { dg-options "-mcpu=power7 -O3 -ftree-vectorize -ffast-math -mrecip=all -mrecip-precision" } */ + +/* Check reciprocal estimate functions for accuracy. */ + +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <math.h> +#include <float.h> +#include <string.h> + +#include "recip-test.h" diff --git a/gcc/testsuite/gcc.target/powerpc/recip-7.c b/gcc/testsuite/gcc.target/powerpc/recip-7.c new file mode 100644 index 00000000000..7b32ba076a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-7.c @@ -0,0 +1,16 @@ +/* { dg-do run { target { powerpc*-*-linux* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ +/* { dg-require-effective-target ppc_recip_hw } */ +/* { dg-options "-O3 -ftree-vectorize -ffast-math -mrecip -mpowerpc-gfxopt -mpowerpc-gpopt -mpopcntb" } */ + +/* Check reciprocal estimate functions for accuracy. */ + +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <math.h> +#include <float.h> +#include <string.h> + +#include "recip-test.h" diff --git a/gcc/testsuite/gcc.target/powerpc/recip-test.h b/gcc/testsuite/gcc.target/powerpc/recip-test.h new file mode 100644 index 00000000000..7a42df5757d --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-test.h @@ -0,0 +1,149 @@ +/* Check reciprocal estimate functions for accuracy. */ + +#ifdef _ARCH_PPC64 +typedef unsigned long uns64_t; +#define UNUM64(x) x ## L + +#else +typedef unsigned long long uns64_t; +#define UNUM64(x) x ## LL +#endif + +typedef unsigned int uns32_t; + +#define TNAME2(x) #x +#define TNAME(x) TNAME2(x) + +/* + * Float functions. + */ + +#define TYPE float +#define NAME(PREFIX) PREFIX ## _float +#define UNS_TYPE uns32_t +#define UNS_ABS __builtin_abs +#define EXP_SIZE 8 +#define MAN_SIZE 23 +#define FABS __builtin_fabsf +#define FMAX __builtin_fmaxf +#define FMIN __builtin_fminf +#define SQRT __builtin_sqrtf +#define RMIN 1.0e-10 +#define RMAX 1.0e+10 +#define BDIV 1 +#define BRSQRT 2 +#define ASMDIV "fdivs" +#define ASMSQRT "fsqrts" + +#define INIT_DIV \ +{ \ + { 0x4fffffff }, /* 8589934080 */ \ + { 0x4effffff }, /* 2147483520 */ \ + { 0x40ffffff }, /* 7.99999952316284 */ \ + { 0x3fffffff }, /* 1.99999988079071 */ \ + { 0x417fffff }, /* 15.9999990463257 */ \ + { 0x42ffffff }, /* 127.999992370605 */ \ + { 0x3dffffff }, /* 0.124999992549419 */ \ + { 0x3effffff }, /* 0.499999970197678 */ \ +} + +#define INIT_RSQRT \ +{ \ + { 0x457ffffe }, /* 4096 - small amount */ \ + { 0x4c7fffff }, /* 6.71089e+07 */ \ + { 0x3d7fffff }, /* 0.0625 - small amount */ \ + { 0x307ffffe }, /* 9.31322e-10 */ \ + { 0x4c7ffffe }, /* 6.71089e+07 */ \ + { 0x397ffffe }, /* 0.000244141 */ \ + { 0x2e7fffff }, /* 5.82077e-11 */ \ + { 0x2f7fffff }, /* 2.32831e-10 */ \ +} + + +#include "recip-test2.h" + +/* + * Double functions. + */ + +#undef TYPE +#undef NAME +#undef UNS_TYPE +#undef UNS_ABS +#undef EXP_SIZE +#undef MAN_SIZE +#undef FABS +#undef FMAX +#undef FMIN +#undef SQRT +#undef RMIN +#undef RMAX +#undef BDIV +#undef BRSQRT +#undef ASMDIV +#undef ASMSQRT +#undef INIT_DIV +#undef INIT_RSQRT + +#define TYPE double +#define NAME(PREFIX) PREFIX ## _double +#define UNS_TYPE uns64_t +#define UNS_ABS __builtin_imaxabs +#define EXP_SIZE 11 +#define MAN_SIZE 52 +#define FABS __builtin_fabs +#define FMAX __builtin_fmax +#define FMIN __builtin_fmin +#define SQRT __builtin_sqrt +#define RMIN 1.0e-100 +#define RMAX 1.0e+100 +#define BDIV 1 +#define BRSQRT 2 +#define ASMDIV "fdiv" +#define ASMSQRT "fsqrt" + +#define INIT_DIV \ +{ \ + { UNUM64 (0x2b57be53f2a2f3a0) }, /* 6.78462e-100 */ \ + { UNUM64 (0x2b35f8e8ea553e52) }, /* 1.56963e-100 */ \ + { UNUM64 (0x2b5b9d861d2fe4fb) }, /* 7.89099e-100 */ \ + { UNUM64 (0x2b45dc44a084e682) }, /* 3.12327e-100 */ \ + { UNUM64 (0x2b424ce16945d777) }, /* 2.61463e-100 */ \ + { UNUM64 (0x2b20b5023d496b50) }, /* 5.96749e-101 */ \ + { UNUM64 (0x2b61170547f57caa) }, /* 9.76678e-100 */ \ + { UNUM64 (0x2b543b9d498aac37) }, /* 5.78148e-100 */ \ +} + +#define INIT_RSQRT \ +{ \ + { UNUM64 (0x2b616f2d8cbbc646) }, /* 9.96359e-100 */ \ + { UNUM64 (0x2b5c4db2da0a011d) }, /* 8.08764e-100 */ \ + { UNUM64 (0x2b55a82d5735b262) }, /* 6.1884e-100 */ \ + { UNUM64 (0x2b50b52908258cb8) }, /* 4.77416e-100 */ \ + { UNUM64 (0x2b363989a4fb29af) }, /* 1.58766e-100 */ \ + { UNUM64 (0x2b508b9f6f4180a9) }, /* 4.7278e-100 */ \ + { UNUM64 (0x2b4f7a1d48accb40) }, /* 4.49723e-100 */ \ + { UNUM64 (0x2b1146a37372a81f) }, /* 3.08534e-101 */ \ + { UNUM64 (0x2b33f876a8c48050) }, /* 1.42663e-100 */ \ +} + +#include "recip-test2.h" + +int +main (int argc __attribute__((__unused__)), + char *argv[] __attribute__((__unused__))) +{ + srand48 (1); + run_float (); + +#ifdef VERBOSE + printf ("\n"); +#endif + + run_double (); + + if (error_count_float != 0 || error_count_double != 0) + abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/recip-test2.h b/gcc/testsuite/gcc.target/powerpc/recip-test2.h new file mode 100644 index 00000000000..3ec356cdfd8 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/recip-test2.h @@ -0,0 +1,432 @@ +/* + * Included file to common source float/double checking + * The following macros should be defined: + * TYPE -- floating point type + * NAME -- convert a name to include the type + * UNS_TYPE -- type to hold TYPE as an unsigned number + * EXP_SIZE -- size in bits of the exponent + * MAN_SIZE -- size in bits of the mantissa + * UNS_ABS -- absolute value for UNS_TYPE + * FABS -- absolute value function for TYPE + * FMAX -- maximum function for TYPE + * FMIN -- minimum function for TYPE + * SQRT -- square root function for TYPE + * RMIN -- minimum random number to generate + * RMAX -- maximum random number to generate + * ASMDIV -- assembler instruction to do divide + * ASMSQRT -- assembler instruction to do square root + * BDIV -- # of bits of inaccuracy to allow for division + * BRSQRT -- # of bits of inaccuracy to allow for 1/sqrt + * INIT_DIV -- Initial values to test 1/x against + * INIT_RSQRT -- Initial values to test 1/sqrt(x) against + */ + +typedef union +{ + UNS_TYPE i; + TYPE x; +} NAME (union); + +/* + * Input/output arrays. + */ + +static NAME (union) NAME (div_input) [] __attribute__((__aligned__(32))) = INIT_DIV; +static NAME (union) NAME (rsqrt_input)[] __attribute__((__aligned__(32))) = INIT_RSQRT; + +#define DIV_SIZE (sizeof (NAME (div_input)) / sizeof (TYPE)) +#define RSQRT_SIZE (sizeof (NAME (rsqrt_input)) / sizeof (TYPE)) + +static TYPE NAME (div_expected)[DIV_SIZE] __attribute__((__aligned__(32))); +static TYPE NAME (div_output) [DIV_SIZE] __attribute__((__aligned__(32))); + +static TYPE NAME (rsqrt_expected)[RSQRT_SIZE] __attribute__((__aligned__(32))); +static TYPE NAME (rsqrt_output) [RSQRT_SIZE] __attribute__((__aligned__(32))); + + +/* + * Crack a floating point number into sign bit, exponent, and mantissa. + */ + +static void +NAME (crack) (TYPE number, unsigned int *p_sign, unsigned *p_exponent, UNS_TYPE *p_mantissa) +{ + NAME (union) u; + UNS_TYPE bits; + + u.x = number; + bits = u.i; + + *p_sign = (unsigned int)((bits >> (EXP_SIZE + MAN_SIZE)) & 0x1); + *p_exponent = (unsigned int)((bits >> MAN_SIZE) & ((((UNS_TYPE)1) << EXP_SIZE) - 1)); + *p_mantissa = bits & ((((UNS_TYPE)1) << MAN_SIZE) - 1); + return; +} + + +/* + * Prevent optimizer from eliminating + 0.0 to remove -0.0. + */ + +volatile TYPE NAME (math_diff_0) = ((TYPE) 0.0); + +/* + * Return negative if two numbers are significanly different or return the + * number of bits that are different in the mantissa. + */ + +static int +NAME (math_diff) (TYPE a, TYPE b, int bits) +{ + TYPE zero = NAME (math_diff_0); + unsigned int sign_a, sign_b; + unsigned int exponent_a, exponent_b; + UNS_TYPE mantissa_a, mantissa_b, diff; + int i; + + /* eliminate signed zero. */ + a += zero; + b += zero; + + /* special case Nan. */ + if (__builtin_isnan (a)) + return (__builtin_isnan (b) ? 0 : -1); + + if (a == b) + return 0; + + /* special case infinity. */ + if (__builtin_isinf (a)) + return (__builtin_isinf (b) ? 0 : -1); + + /* punt on denormal numbers. */ + if (!__builtin_isnormal (a) || !__builtin_isnormal (b)) + return -1; + + NAME (crack) (a, &sign_a, &exponent_a, &mantissa_a); + NAME (crack) (b, &sign_b, &exponent_b, &mantissa_b); + + /* If the sign is different, there is no hope. */ + if (sign_a != sign_b) + return -1; + + /* If the exponent is off by 1, see if the values straddle the power of two, + and adjust things to do the mantassa check if we can. */ + if ((exponent_a == (exponent_b+1)) || (exponent_a == (exponent_b-1))) + { + TYPE big = FMAX (a, b); + TYPE small = FMIN (a, b); + TYPE diff = FABS (a - b); + unsigned int sign_big, sign_small, sign_test; + unsigned int exponent_big, exponent_small, exponent_test; + UNS_TYPE mantissa_big, mantissa_small, mantissa_test; + + NAME (crack) (big, &sign_big, &exponent_big, &mantissa_big); + NAME (crack) (small, &sign_small, &exponent_small, &mantissa_small); + + NAME (crack) (small - diff, &sign_test, &exponent_test, &mantissa_test); + if ((sign_test == sign_small) && (exponent_test == exponent_small)) + { + mantissa_a = mantissa_small; + mantissa_b = mantissa_test; + } + + else + { + NAME (crack) (big + diff, &sign_test, &exponent_test, &mantissa_test); + if ((sign_test == sign_big) && (exponent_test == exponent_big)) + { + mantissa_a = mantissa_big; + mantissa_b = mantissa_test; + } + + else + return -1; + } + } + + else if (exponent_a != exponent_b) + return -1; + + diff = UNS_ABS (mantissa_a - mantissa_b); + for (i = MAN_SIZE; i > 0; i--) + { + if ((diff & ((UNS_TYPE)1) << (i-1)) != 0) + return i; + } + + return -1; +} + + +/* + * Turn off inlining to make code inspection easier. + */ + +static void NAME (asm_div) (void) __attribute__((__noinline__)); +static void NAME (vector_div) (void) __attribute__((__noinline__)); +static void NAME (scalar_div) (void) __attribute__((__noinline__)); +static void NAME (asm_rsqrt) (void) __attribute__((__noinline__)); +static void NAME (vector_rsqrt) (void) __attribute__((__noinline__)); +static void NAME (scalar_rsqrt) (void) __attribute__((__noinline__)); +static void NAME (check_div) (const char *) __attribute__((__noinline__)); +static void NAME (check_rsqrt) (const char *) __attribute__((__noinline__)); +static void NAME (run) (void) __attribute__((__noinline__)); + + +/* + * Division function that might be vectorized. + */ + +static void +NAME (vector_div) (void) +{ + size_t i; + + for (i = 0; i < DIV_SIZE; i++) + NAME (div_output)[i] = ((TYPE) 1.0) / NAME (div_input)[i].x; +} + +/* + * Division function that is not vectorized. + */ + +static void +NAME (scalar_div) (void) +{ + size_t i; + + for (i = 0; i < DIV_SIZE; i++) + { + TYPE x = ((TYPE) 1.0) / NAME (div_input)[i].x; + TYPE y; + __asm__ ("" : "=d" (y) : "0" (x)); + NAME (div_output)[i] = y; + } +} + +/* + * Generate the division instruction via asm. + */ + +static void +NAME (asm_div) (void) +{ + size_t i; + + for (i = 0; i < DIV_SIZE; i++) + { + TYPE x; + __asm__ (ASMDIV " %0,%1,%2" + : "=d" (x) + : "d" ((TYPE) 1.0), "d" (NAME (div_input)[i].x)); + NAME (div_expected)[i] = x; + } +} + +/* + * Reciprocal square root function that might be vectorized. + */ + +static void +NAME (vector_rsqrt) (void) +{ + size_t i; + + for (i = 0; i < RSQRT_SIZE; i++) + NAME (rsqrt_output)[i] = ((TYPE) 1.0) / SQRT (NAME (rsqrt_input)[i].x); +} + +/* + * Reciprocal square root function that is not vectorized. + */ + +static void +NAME (scalar_rsqrt) (void) +{ + size_t i; + + for (i = 0; i < RSQRT_SIZE; i++) + { + TYPE x = ((TYPE) 1.0) / SQRT (NAME (rsqrt_input)[i].x); + TYPE y; + __asm__ ("" : "=d" (y) : "0" (x)); + NAME (rsqrt_output)[i] = y; + } +} + +/* + * Generate the 1/sqrt instructions via asm. + */ + +static void +NAME (asm_rsqrt) (void) +{ + size_t i; + + for (i = 0; i < RSQRT_SIZE; i++) + { + TYPE x; + TYPE y; + __asm__ (ASMSQRT " %0,%1" : "=d" (x) : "d" (NAME (rsqrt_input)[i].x)); + __asm__ (ASMDIV " %0,%1,%2" : "=d" (y) : "d" ((TYPE) 1.0), "d" (x)); + NAME (rsqrt_expected)[i] = y; + } +} + + +/* + * Functions to abort or report errors. + */ + +static int NAME (error_count) = 0; + +#ifdef VERBOSE +static int NAME (max_bits_div) = 0; +static int NAME (max_bits_rsqrt) = 0; +#endif + + +/* + * Compare the expected value with the value we got. + */ + +static void +NAME (check_div) (const char *test) +{ + size_t i; + int b; + + for (i = 0; i < DIV_SIZE; i++) + { + TYPE exp = NAME (div_expected)[i]; + TYPE out = NAME (div_output)[i]; + b = NAME (math_diff) (exp, out, BDIV); + +#ifdef VERBOSE + if (b != 0) + { + NAME (union) u_in = NAME (div_input)[i]; + NAME (union) u_exp; + NAME (union) u_out; + char explanation[64]; + const char *p_exp; + + if (b < 0) + p_exp = "failed"; + else + { + p_exp = explanation; + sprintf (explanation, "%d bit error%s", b, (b > BDIV) ? ", failed" : ""); + } + + u_exp.x = exp; + u_out.x = out; + printf ("%s %s %s for 1.0 / %g [0x%llx], expected %g [0x%llx], got %g [0x%llx]\n", + TNAME (TYPE), test, p_exp, + (double) u_in.x, (unsigned long long) u_in.i, + (double) exp, (unsigned long long) u_exp.i, + (double) out, (unsigned long long) u_out.i); + } +#endif + + if (b < 0 || b > BDIV) + NAME (error_count)++; + +#ifdef VERBOSE + if (b > NAME (max_bits_div)) + NAME (max_bits_div) = b; +#endif + } +} + +static void +NAME (check_rsqrt) (const char *test) +{ + size_t i; + int b; + + for (i = 0; i < RSQRT_SIZE; i++) + { + TYPE exp = NAME (rsqrt_expected)[i]; + TYPE out = NAME (rsqrt_output)[i]; + b = NAME (math_diff) (exp, out, BRSQRT); + +#ifdef VERBOSE + if (b != 0) + { + NAME (union) u_in = NAME (rsqrt_input)[i]; + NAME (union) u_exp; + NAME (union) u_out; + char explanation[64]; + const char *p_exp; + + if (b < 0) + p_exp = "failed"; + else + { + p_exp = explanation; + sprintf (explanation, "%d bit error%s", b, (b > BDIV) ? ", failed" : ""); + } + + u_exp.x = exp; + u_out.x = out; + printf ("%s %s %s for 1 / sqrt (%g) [0x%llx], expected %g [0x%llx], got %g [0x%llx]\n", + TNAME (TYPE), test, p_exp, + (double) u_in.x, (unsigned long long) u_in.i, + (double) exp, (unsigned long long) u_exp.i, + (double) out, (unsigned long long) u_out.i); + } +#endif + + if (b < 0 || b > BRSQRT) + NAME (error_count)++; + +#ifdef VERBOSE + if (b > NAME (max_bits_rsqrt)) + NAME (max_bits_rsqrt) = b; +#endif + } +} + + +/* + * Now do everything. + */ + +static void +NAME (run) (void) +{ +#ifdef VERBOSE + printf ("start run_%s, divide size = %ld, rsqrt size = %ld, %d bit%s for a/b, %d bit%s for 1/sqrt(a)\n", + TNAME (TYPE), + (long)DIV_SIZE, + (long)RSQRT_SIZE, + BDIV, (BDIV == 1) ? "" : "s", + BRSQRT, (BRSQRT == 1) ? "" : "s"); +#endif + + NAME (asm_div) (); + + NAME (scalar_div) (); + NAME (check_div) ("scalar"); + + NAME (vector_div) (); + NAME (check_div) ("vector"); + + NAME (asm_rsqrt) (); + + NAME (scalar_rsqrt) (); + NAME (check_rsqrt) ("scalar"); + + NAME (vector_rsqrt) (); + NAME (check_rsqrt) ("vector"); + +#ifdef VERBOSE + printf ("end run_%s, errors = %d, max div bits = %d, max rsqrt bits = %d\n", + TNAME (TYPE), + NAME (error_count), + NAME (max_bits_div), + NAME (max_bits_rsqrt)); +#endif +} diff --git a/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c b/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c new file mode 100644 index 00000000000..35f8b53cac1 --- /dev/null +++ b/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mabi=sysv" } */ + +__attribute__ ((ms_abi)) +int foo (void) +{ + return 0; +} + +/* { dg-final { scan-assembler-not "%rsp" } } */ + diff --git a/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c b/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c new file mode 100644 index 00000000000..2a54bc89cfc --- /dev/null +++ b/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mabi=sysv" } */ + +extern int glb1, gbl2, gbl3; + +__attribute__ ((ms_abi)) +int foo (void) +{ + int r = 1; + int i, j, k; + for (i = 0; i < glb1; i++) + { + r *= (i + 1); + for (j = gbl2; j > 0; --j) + { + for (k = 0; k < gbl3; k++) + r += (i + k * j); + } + } + + return r; +} + +/* { dg-final { scan-assembler-not "%rsp" } } */ + diff --git a/gcc/testsuite/gfortran.dg/abstract_type_8.f03 b/gcc/testsuite/gfortran.dg/abstract_type_8.f03 new file mode 100644 index 00000000000..c924abac9af --- /dev/null +++ b/gcc/testsuite/gfortran.dg/abstract_type_8.f03 @@ -0,0 +1,29 @@ +! { dg-do compile } +! +! PR 44616: [OOP] ICE if CLASS(foo) is used before its definition +! +! Contributed by bd satish <bdsatish@gmail.com> + +module factory_pattern +implicit none + +type First_Factory + character(len=20) :: factory_type + class(Connection), pointer :: connection_type + contains +end type First_Factory + +type, abstract :: Connection + contains + procedure(generic_desc), deferred :: description +end type Connection + +abstract interface + subroutine generic_desc(self) + import ! Required, cf. PR 44614 + class(Connection) :: self + end subroutine generic_desc +end interface +end module factory_pattern + +! { dg-final { cleanup-modules "factory_pattern" } } diff --git a/gcc/testsuite/gfortran.dg/actual_rank_check_1.f90 b/gcc/testsuite/gfortran.dg/actual_rank_check_1.f90 new file mode 100644 index 00000000000..7167de4270c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/actual_rank_check_1.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! Test the fix for PR40158, where the errro message was not clear about scalars. +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> +! + implicit none + integer :: i(4,5),j + i = 0 + call sub1(i) + call sub1(j) ! { dg-error "rank-1 and scalar" } + call sub2(i) ! { dg-error "scalar and rank-2" } + call sub2(j) + print '(5i0)', i +contains + subroutine sub1(i1) + integer :: i1(*) + i1(1) = 2 + end subroutine sub1 + subroutine sub2(i2) + integer :: i2 + i2 = 2 + end subroutine sub2 +end diff --git a/gcc/testsuite/gfortran.dg/aliasing_array_result_1.f90 b/gcc/testsuite/gfortran.dg/aliasing_array_result_1.f90 new file mode 100644 index 00000000000..d8899d2ecf8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/aliasing_array_result_1.f90 @@ -0,0 +1,164 @@ +! { dg-do run } +! Tests the fic for PR44582, where gfortran was found to +! produce an incorrect result when the result of a function +! was aliased by a host or use associated variable, to which +! the function is assigned. In these cases a temporary is +! required in the function assignments. The check has to be +! rather restrictive. Whilst the cases marked below might +! not need temporaries, the TODOs are going to be tough. +! +! Reported by Yin Ma <yin@absoft.com> and +! elaborated by Tobias Burnus <burnus@gcc.gnu.org> +! +module foo + INTEGER, PARAMETER :: ONE = 1 + INTEGER, PARAMETER :: TEN = 10 + INTEGER, PARAMETER :: FIVE = TEN/2 + INTEGER, PARAMETER :: TWO = 2 + integer :: foo_a(ONE) + integer :: check(ONE) = TEN + LOGICAL :: abort_flag = .false. +contains + function foo_f() + integer :: foo_f(ONE) + foo_f = -FIVE + foo_f = foo_a - foo_f + end function foo_f + subroutine bar + foo_a = FIVE +! This aliases 'foo_a' by host association. + foo_a = foo_f () + if (any (foo_a .ne. check)) call myabort (0) + end subroutine bar + subroutine myabort(fl) + integer :: fl + print *, fl + abort_flag = .true. + end subroutine myabort +end module foo + +function h_ext() + use foo + integer :: h_ext(ONE) + h_ext = -FIVE + h_ext = FIVE - h_ext +end function h_ext + +function i_ext() result (h) + use foo + integer :: h(ONE) + h = -FIVE + h = FIVE - h +end function i_ext + +subroutine tobias + use foo + integer :: a(ONE) + a = FIVE + call sub1(a) + if (any (a .ne. check)) call myabort (1) +contains + subroutine sub1(x) + integer :: x(ONE) +! 'x' is aliased by host association in 'f'. + x = f() + end subroutine sub1 + function f() + integer :: f(ONE) + f = ONE + f = a + FIVE + end function f +end subroutine tobias + +program test + use foo + implicit none + common /foo_bar/ c + integer :: a(ONE), b(ONE), c(ONE), d(ONE) + interface + function h_ext() + use foo + integer :: h_ext(ONE) + end function h_ext + end interface + interface + function i_ext() result (h) + use foo + integer :: h(ONE) + end function i_ext + end interface + + a = FIVE +! This aliases 'a' by host association + a = f() + if (any (a .ne. check)) call myabort (2) + a = FIVE + if (any (f() .ne. check)) call myabort (3) + call bar + foo_a = FIVE +! This aliases 'foo_a' by host association. + foo_a = g () + if (any (foo_a .ne. check)) call myabort (4) + a = FIVE + a = h() ! TODO: Needs no temporary + if (any (a .ne. check)) call myabort (5) + a = FIVE + a = i() ! TODO: Needs no temporary + if (any (a .ne. check)) call myabort (6) + a = FIVE + a = h_ext() ! Needs no temporary - was OK + if (any (a .ne. check)) call myabort (15) + a = FIVE + a = i_ext() ! Needs no temporary - was OK + if (any (a .ne. check)) call myabort (16) + c = FIVE +! This aliases 'c' through the common block. + c = j() + if (any (c .ne. check)) call myabort (7) + call aaa + call tobias + if (abort_flag) call abort +contains + function f() + integer :: f(ONE) + f = -FIVE + f = a - f + end function f + function g() + integer :: g(ONE) + g = -FIVE + g = foo_a - g + end function g + function h() + integer :: h(ONE) + h = -FIVE + h = FIVE - h + end function h + function i() result (h) + integer :: h(ONE) + h = -FIVE + h = FIVE - h + end function i + function j() + common /foo_bar/ cc + integer :: j(ONE), cc(ONE) + j = -FIVE + j = cc - j + end function j + subroutine aaa() + d = TEN - TWO +! This aliases 'd' through 'get_d'. + d = bbb() + if (any (d .ne. check)) call myabort (8) + end subroutine aaa + function bbb() + integer :: bbb(ONE) + bbb = TWO + bbb = bbb + get_d() + end function bbb + function get_d() + integer :: get_d(ONE) + get_d = d + end function get_d +end program test +! { dg-final { cleanup-modules "foo" } } diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90 new file mode 100644 index 00000000000..c783f49ff77 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90 @@ -0,0 +1,33 @@ +! { dg-do run } +! Test the fix for PR43895, in which the dummy 'a' was not +! dereferenced for the deallocation of component 'a', as required +! for INTENT(OUT). +! +! Contributed by Salvatore Filippone <sfilippone@uniroma2.it> +! +module d_mat_mod + type :: base_sparse_mat + end type base_sparse_mat + + type, extends(base_sparse_mat) :: d_base_sparse_mat + integer :: i + end type d_base_sparse_mat + + type :: d_sparse_mat + class(d_base_sparse_mat), allocatable :: a + end type d_sparse_mat +end module d_mat_mod + + use d_mat_mod + type(d_sparse_mat) :: b + allocate (b%a) + b%a%i = 42 + call bug14 (b) + if (allocated (b%a)) call abort +contains + subroutine bug14(a) + implicit none + type(d_sparse_mat), intent(out) :: a + end subroutine bug14 +end +! { dg-final { cleanup-modules "d_mat_mod " } } diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_10.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_10.f90 new file mode 100644 index 00000000000..5bccefaaf15 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_10.f90 @@ -0,0 +1,46 @@ +! { dg-do run } +! +! PR 43388: [F2008][OOP] ALLOCATE with MOLD= +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +type :: t1 + integer :: i +end type + +type,extends(t1) :: t2 + integer :: j = 4 +end type + +class(t1),allocatable :: x,y +type(t2) :: z + + +!!! first example (works) + +z%j = 5 +allocate(x,MOLD=z) + +select type (x) +type is (t2) + print *,x%j + if (x%j/=4) call abort +class default + call abort() +end select + + +!!! second example (fails) +!!! FIXME: uncomment once implemented (cf. PR 44541) + +! allocate(y,MOLD=x) +! +! select type (y) +! type is (t2) +! print *,y%j +! if (y%j/=4) call abort +! class default +! call abort() +! end select + +end diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_11.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_11.f90 new file mode 100644 index 00000000000..c8c7ac633cd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_11.f90 @@ -0,0 +1,26 @@ +! { dg-do compile } +! +! PR fortran/44556 +! +! Contributed by Jonathan Hogg and Steve Kargl. +! +program oh_my + implicit none + type a + integer, allocatable :: b(:), d(:) + character(len=80) :: err + character(len=80), allocatable :: str(:) + integer :: src + end type a + + integer j + type(a) :: c + c%err = 'ok' + allocate(c%d(1)) + allocate(c%b(2), errmsg=c%err, stat=c%d(1)) ! OK + deallocate(c%b, errmsg=c%err, stat=c%d(1)) ! OK + allocate(c%b(2), errmsg=c%err, stat=c%b(1)) ! { dg-error "the same ALLOCATE statement" } + deallocate(c%b, errmsg=c%err, stat=c%b(1)) ! { dg-error "the same DEALLOCATE statement" } + allocate(c%str(2), errmsg=c%str(1), stat=j) ! { dg-error "the same ALLOCATE statement" } + deallocate(c%str, errmsg=c%str(1), stat=j) ! { dg-error "the same DEALLOCATE statement" } +end program oh_my diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_7.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_7.f90 new file mode 100644 index 00000000000..e77f6b7c638 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_7.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! +! PR 44207: ICE with ALLOCATABLE components and SOURCE +! +! Contributed by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de> + +program ice_prog + +type::ice_type + integer,dimension(:),allocatable::list +end type ice_type + +type(ice_type)::this +integer::dim=10,i + +allocate(this%list(dim),source=[(i,i=1,dim)]) + +end program ice_prog diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_8.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_8.f90 new file mode 100644 index 00000000000..39aa3638b46 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_8.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR 43388: [F2008][OOP] ALLOCATE with MOLD= +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +type :: t +end type + +class(t),allocatable :: x +type(t) :: z + +allocate(x,MOLD=z) ! { dg-error "MOLD tag at" } + +end diff --git a/gcc/testsuite/gfortran.dg/allocate_alloc_opt_9.f90 b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_9.f90 new file mode 100644 index 00000000000..e51a7ec868a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_alloc_opt_9.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! +! PR 43388: [F2008][OOP] ALLOCATE with MOLD= +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +type :: t +end type + +type :: u +end type + +class(t),allocatable :: x +type(t) :: z1,z2 +type(u) :: z3 + +allocate(x,MOLD=z1,MOLD=z2) ! { dg-error "Redundant MOLD tag" } +allocate(x,SOURCE=z1,MOLD=z2) ! { dg-error "conflicts with SOURCE tag" } +allocate(t::x,MOLD=z1) ! { dg-error "conflicts with the typespec" } + +allocate(x,MOLD=z3) ! { dg-error "is type incompatible" } + +end diff --git a/gcc/testsuite/gfortran.dg/array_constructor_23.f b/gcc/testsuite/gfortran.dg/array_constructor_23.f index ac57efc2440..fa0a28a1f17 100644 --- a/gcc/testsuite/gfortran.dg/array_constructor_23.f +++ b/gcc/testsuite/gfortran.dg/array_constructor_23.f @@ -20,7 +20,7 @@ DDA1 = ATAN2 ((/(REAL(J1,KV),J1=1,10)/), $ REAL((/(J1,J1=nf10,nf1,mf1)/), KV)) !fails DDA2 = ATAN2 (DDA, DDA(10:1:-1)) - if (any (DDA1 .ne. DDA2)) call abort () + if (any (DDA1 - DDA2 .gt. epsilon(dval))) call abort () END subroutine FA6077 (nf10,nf1,mf1, ida) @@ -42,7 +42,7 @@ QDA1 = MOD ( 1.1_k*( QDA(1) -5.0_k), P=( QDA -2.5_k)) DO J1 = 1,10 QVAL = MOD(1.1_k*(QDA(1)-5.0_k),P=(QDA(J1)-2.5_k)) - if (qval .ne. qda1(j1)) call abort () + if (qval - qda1(j1) .gt. epsilon(qval)) call abort () ENDDO END diff --git a/gcc/testsuite/gfortran.dg/array_memcpy_3.f90 b/gcc/testsuite/gfortran.dg/array_memcpy_3.f90 index df6bd49ef26..78097308030 100644 --- a/gcc/testsuite/gfortran.dg/array_memcpy_3.f90 +++ b/gcc/testsuite/gfortran.dg/array_memcpy_3.f90 @@ -11,5 +11,5 @@ subroutine bar(x) x = (/ 3, 1, 4, 1 /) end subroutine -! { dg-final { scan-tree-dump-times "memcpy|ref-all" 2 "original" } } +! { dg-final { scan-tree-dump-times "memcpy|(ref-all.*ref-all)" 2 "original" } } ! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/array_memcpy_4.f90 b/gcc/testsuite/gfortran.dg/array_memcpy_4.f90 index 0f8b5cb15b0..9f2279d881c 100644 --- a/gcc/testsuite/gfortran.dg/array_memcpy_4.f90 +++ b/gcc/testsuite/gfortran.dg/array_memcpy_4.f90 @@ -9,5 +9,5 @@ d = s end -! { dg-final { scan-tree-dump-times "d = " 1 "original" } } +! { dg-final { scan-tree-dump-times "MEM.*d\\\] = MEM" 1 "original" } } ! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/associate_1.f03 b/gcc/testsuite/gfortran.dg/associate_1.f03 new file mode 100644 index 00000000000..90579c99ce3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_1.f03 @@ -0,0 +1,49 @@ +! { dg-do run } +! { dg-options "-std=f2003 -fall-intrinsics" } + +! PR fortran/38936 +! Check the basic semantics of the ASSOCIATE construct. + +PROGRAM main + IMPLICIT NONE + REAL :: a, b, c + INTEGER, ALLOCATABLE :: arr(:) + + a = -2.0 + b = 3.0 + c = 4.0 + + ! Simple association to expressions. + ASSOCIATE (r => SQRT (a**2 + b**2 + c**2), t => a + b) + PRINT *, t, a, b + IF (ABS (r - SQRT (4.0 + 9.0 + 16.0)) > 1.0e-3) CALL abort () + IF (ABS (t - a - b) > 1.0e-3) CALL abort () + END ASSOCIATE + + ! TODO: Test association to variables when that is supported. + ! TODO: Test association to derived types. + + ! Test association to arrays. + ! TODO: Enable when working. + !ALLOCATE (arr(3)) + !arr = (/ 1, 2, 3 /) + !ASSOCIATE (doubled => 2 * arr) + ! IF (doubled(1) /= 2 .OR. doubled(2) /= 4 .OR. doubled(3) /= 6) & + ! CALL abort () + !END ASSOCIATE + + ! Named and nested associate. + myname: ASSOCIATE (x => a - b * c) + ASSOCIATE (y => 2.0 * x) + IF (ABS (y - 2.0 * (a - b * c)) > 1.0e-3) CALL abort () + END ASSOCIATE + END ASSOCIATE myname ! Matching end-label. + + ! Correct behaviour when shadowing already existing names. + ASSOCIATE (a => 1 * b, b => 1 * a, x => 1, y => 2) + IF (ABS (a - 3.0) > 1.0e-3 .OR. ABS (b + 2.0) > 1.0e-3) CALL abort () + ASSOCIATE (x => 1 * y, y => 1 * x) + IF (x /= 2 .OR. y /= 1) CALL abort () + END ASSOCIATE + END ASSOCIATE +END PROGRAM main diff --git a/gcc/testsuite/gfortran.dg/associate_2.f95 b/gcc/testsuite/gfortran.dg/associate_2.f95 new file mode 100644 index 00000000000..a41398d7850 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_2.f95 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-std=f95" } + +! PR fortran/38936 +! Test that F95 rejects ASSOCIATE. + +PROGRAM main + IMPLICIT NONE + + ASSOCIATE (a => 5) ! { dg-error "Fortran 2003" } + END ASSOCIATE +END PROGRAM main diff --git a/gcc/testsuite/gfortran.dg/associate_3.f03 b/gcc/testsuite/gfortran.dg/associate_3.f03 new file mode 100644 index 00000000000..c53bd559fb8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_3.f03 @@ -0,0 +1,41 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } + +! PR fortran/38936 +! Check for errors with ASSOCIATE. + +PROGRAM main + IMPLICIT NONE + + ASSOCIATE ! { dg-error "Expected association list" } + + ASSOCIATE () ! { dg-error "Expected association" } + + ASSOCIATE (a => 1) 5 ! { dg-error "Junk after ASSOCIATE" } + + ASSOCIATE (x =>) ! { dg-error "Expected association" } + + ASSOCIATE (=> 5) ! { dg-error "Expected association" } + + ASSOCIATE (x => 5, ) ! { dg-error "Expected association" } + + myname: ASSOCIATE (a => 1) + END ASSOCIATE ! { dg-error "Expected block name of 'myname'" } + + ASSOCIATE (b => 2) + END ASSOCIATE myname ! { dg-error "Syntax error in END ASSOCIATE" } + + myname2: ASSOCIATE (c => 3) + END ASSOCIATE myname3 ! { dg-error "Expected label 'myname2'" } + + ASSOCIATE (a => 1, b => 2, a => 3) ! { dg-error "Duplicate name 'a'" } + + ASSOCIATE (a => 5) + a = 4 ! { dg-error "variable definition context" } + ENd ASSOCIATE + + ASSOCIATE (a => 5) + INTEGER :: b ! { dg-error "Unexpected data declaration statement" } + END ASSOCIATE +END PROGRAM main ! { dg-error "Expecting END ASSOCIATE" } +! { dg-excess-errors "Unexpected end of file" } diff --git a/gcc/testsuite/gfortran.dg/associate_4.f08 b/gcc/testsuite/gfortran.dg/associate_4.f08 new file mode 100644 index 00000000000..c336af2ab13 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_4.f08 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-std=f2008 -fcoarray=single" } + +! PR fortran/38936 +! Check for error with coindexed target. + +PROGRAM main + IMPLICIT NONE + INTEGER :: a[*] + + ASSOCIATE (x => a[1]) ! { dg-error "must not be coindexed" } +END PROGRAM main diff --git a/gcc/testsuite/gfortran.dg/associated_target_4.f90 b/gcc/testsuite/gfortran.dg/associated_target_4.f90 new file mode 100644 index 00000000000..24f331785e8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associated_target_4.f90 @@ -0,0 +1,23 @@ +! { dg-do run } +! +! PR 44696: [OOP] ASSOCIATED fails on polymorphic variables +! +! Original test case by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de> +! Modified by Janus Weil <janus@gcc.gnu.org> + +program rte1 + implicit none + type::node_type + class(node_type),pointer::parent,child + integer::id + end type node_type + class(node_type),pointer::root + allocate(root) + allocate(root%child) + root%child%parent=>root + root%id=1 + root%child%id=2 + print *,root%child%id," is child of ",root%id,":" + print *,root%child%parent%id,root%id + if (.not. associated(root%child%parent,root)) call abort() +end program rte1 diff --git a/gcc/testsuite/gfortran.dg/asynchronous_3.f03 b/gcc/testsuite/gfortran.dg/asynchronous_3.f03 new file mode 100644 index 00000000000..7b83374a6e5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/asynchronous_3.f03 @@ -0,0 +1,15 @@ +! { dg-do "compile" } +! +! PR fortran/44457 - no array-subscript actual argument +! for an asynchronous dummy +! + + integer :: a(10), sect(3) + sect = [1,2,3] + call f(a(sect)) ! { dg-error "incompatible" } + call f(a(::2)) +contains + subroutine f(x) + integer, asynchronous :: x(:) + end subroutine f +end diff --git a/gcc/testsuite/gfortran.dg/atan2_1.f90 b/gcc/testsuite/gfortran.dg/atan2_1.f90 index 1f998a1ccde..65da63cd2d3 100644 --- a/gcc/testsuite/gfortran.dg/atan2_1.f90 +++ b/gcc/testsuite/gfortran.dg/atan2_1.f90 @@ -1,4 +1,5 @@ ! { dg-do run } +! { dg-options "-ffloat-store" } ! ! PR fortran/33197 ! diff --git a/gcc/testsuite/gfortran.dg/btest_1.f90 b/gcc/testsuite/gfortran.dg/btest_1.f90 new file mode 100644 index 00000000000..8a72c314cd5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/btest_1.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +program a + integer :: i = 42 + logical l + l = btest(i, -1) ! { dg-error "must be nonnegative" } + l = btest(i, 65) ! { dg-error "must be less than" } +end program a diff --git a/gcc/testsuite/gfortran.dg/class_23.f03 b/gcc/testsuite/gfortran.dg/class_23.f03 new file mode 100644 index 00000000000..e1e35176294 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_23.f03 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR 42051: [OOP] ICE on array-valued function with CLASS formal argument +! +! Original test case by Damian Rouson <damian@rouson.net> +! Modified by Janus Weil <janus@gcc.gnu.org> + + type grid + end type + +contains + + function return_x(this) result(this_x) + class(grid) :: this + real ,dimension(1) :: this_x + end function + + subroutine output() + type(grid) :: mesh + real ,dimension(1) :: x + x = return_x(mesh) + end subroutine + +end diff --git a/gcc/testsuite/gfortran.dg/class_allocate_2.f03 b/gcc/testsuite/gfortran.dg/class_allocate_2.f03 index 754faa9a9f4..cec05f17a1f 100644 --- a/gcc/testsuite/gfortran.dg/class_allocate_2.f03 +++ b/gcc/testsuite/gfortran.dg/class_allocate_2.f03 @@ -18,6 +18,6 @@ end type t2 class(t), allocatable :: a,c,d type(t2) :: b -allocate(a) ! { dg-error "requires a type-spec or SOURCE" } -allocate(b%t) ! { dg-error "requires a type-spec or SOURCE" } +allocate(a) ! { dg-error "requires a type-spec or source-expr" } +allocate(b%t) ! { dg-error "requires a type-spec or source-expr" } end diff --git a/gcc/testsuite/gfortran.dg/contiguous_1.f90 b/gcc/testsuite/gfortran.dg/contiguous_1.f90 new file mode 100644 index 00000000000..e75c08d8ef4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/contiguous_1.f90 @@ -0,0 +1,177 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! +! PR fortran/40632 +! +! CONTIGUOUS compile-time tests +! + +! C448: Must be an array with POINTER attribute +type t1 + integer, contiguous :: ca(5) ! { dg-error "Component .ca. at .1. has the CONTIGUOUS" } +end type t1 +type t2 + integer, contiguous, allocatable :: cb(:) ! { dg-error "Component .cb. at .1. has the CONTIGUOUS" } +end type t2 +type t3 + integer, contiguous, pointer :: cc(:) ! OK +end type t3 +type t4 + integer, pointer, contiguous :: cd ! { dg-error "Component .cd. at .1. has the CONTIGUOUS" } +end type t4 +end + +! C530: Must be an array and (a) a POINTER or (b) assumed shape. +subroutine test(x, y) + integer, pointer :: x(:) + integer, intent(in) :: y(:) + contiguous :: x, y + + integer, contiguous :: a(5) ! { dg-error ".a. at .1. has the CONTIGUOUS attribute" } + integer, contiguous, allocatable :: b(:) ! { dg-error ".b. at .1. has the CONTIGUOUS attribute" } + integer, contiguous, pointer :: c(:) ! OK + integer, pointer, contiguous :: d ! { dg-error ".d. at .1. has the CONTIGUOUS attribute" } +end + +! Pointer assignment check: +! If the pointer object has the CONTIGUOUS attribute, the pointer target shall be contiguous. +! Note: This is not compile-time checkable; but F2008, 5.3.7 except in a very few cases. +subroutine ptr_assign() + integer, pointer, contiguous :: ptr1(:) + integer, target :: tgt(5) + ptr1 => tgt +end subroutine + + +! C1239 (R1223) If an actual argument is a nonpointer array that has the ASYNCHRONOUS or VOLATILE +! attribute but is not simply contiguous (6.5.4), and the corresponding dummy argument has either the +! VOLATILE or ASYNCHRONOUS attribute, that dummy argument shall be an assumed-shape array +! that does not have the CONTIGUOUS attribute. + +subroutine C1239 + type t + integer :: e(4) + end type t + type(t), volatile :: f + integer, asynchronous :: a(4), b(4) + integer, volatile :: c(4), d(4) + call test (a,b,c) ! OK + call test (a,b(::2),c) ! { dg-error "array without CONTIGUOUS" } + call test (a(::2),b,c) ! { dg-error "array without CONTIGUOUS" } + + call test (a,b,f%e) ! OK + call test (a,f%e,c) ! OK + call test (f%e,b,c) ! OK + call test (a,b,f%e(::2)) ! OK + call test (a,f%e(::2),c) ! { dg-error "array without CONTIGUOUS" } + call test (f%e(::2),b,c) ! { dg-error "array without CONTIGUOUS" } +contains + subroutine test(u, v, w) + integer, asynchronous :: u(:), v(*) + integer, volatile :: w(:) + contiguous :: u + end subroutine test +end subroutine C1239 + + +! C1240 (R1223) If an actual argument is an array pointer that has the ASYNCHRONOUS or VOLATILE +! attribute but does not have the CONTIGUOUS attribute, and the corresponding dummy argument has +! either the VOLATILE or ASYNCHRONOUS attribute, that dummy argument shall be an array pointer +! or an assumed-shape array that does not have the CONTIGUOUS attribute. + +subroutine C1240 + type t + integer,pointer :: e(:) + end type t + type(t), volatile :: f + integer, pointer, asynchronous :: a(:), b(:) + integer,pointer, volatile :: c(:), d(:) + call test (a,b,c) ! { dg-error "array without CONTIGUOUS" } + call test (a,b(::2),c) ! { dg-error "array without CONTIGUOUS" } + call test (a(::2),b,c) ! { dg-error "array without CONTIGUOUS" } + + call test (a,b,f%e) ! { dg-error "array without CONTIGUOUS" } + call test (a,f%e,c) ! { dg-error "array without CONTIGUOUS" } + call test (f%e,b,c) ! { dg-error "array without CONTIGUOUS" } + call test (a,b,f%e(::2)) ! { dg-error "array without CONTIGUOUS" } + call test (a,f%e(::2),c) ! { dg-error "array without CONTIGUOUS" } + call test (f%e(::2),b,c) ! { dg-error "array without CONTIGUOUS" } + + call test2(a,b) + call test3(a,b) + call test2(c,d) + call test3(c,d) + call test2(f%e,d) + call test3(c,f%e) +contains + subroutine test(u, v, w) + integer, asynchronous :: u(:), v(*) + integer, volatile :: w(:) + contiguous :: u + end subroutine test + subroutine test2(x,y) + integer, asynchronous :: x(:) + integer, volatile :: y(:) + end subroutine test2 + subroutine test3(x,y) + integer, pointer, asynchronous :: x(:) + integer, pointer, volatile :: y(:) + end subroutine test3 +end subroutine C1240 + + + +! 12.5.2.7 Pointer dummy variables +! C1241 The actual argument corresponding to a dummy pointer with the CONTIGUOUS attribute shall be +! simply contiguous (6.5.4). + +subroutine C1241 + integer, pointer, contiguous :: a(:) + integer, pointer :: b(:) + call test(a) + call test(b) ! { dg-error "must be simply contigous" } +contains + subroutine test(x) + integer, pointer, contiguous :: x(:) + end subroutine test +end subroutine C1241 + + +! 12.5.2.8 Coarray dummy variables +! If the dummy argument is an array coarray that has the CONTIGUOUS attribute or is not of assumed shape, +! the corresponding actual argument shall be simply contiguous + +subroutine sect12528(cob) + integer, save :: coa(6)[*] + integer :: cob(:)[*] + + call test(coa) + call test2(coa) + call test3(coa) + + call test(cob) ! { dg-error "must be simply contiguous" } + call test2(cob) ! { dg-error "must be simply contiguous" } + call test3(cob) +contains + subroutine test(x) + integer, contiguous :: x(:)[*] + end subroutine test + subroutine test2(x) + integer :: x(*)[*] + end subroutine test2 + subroutine test3(x) + integer :: x(:)[*] + end subroutine test3 +end subroutine sect12528 + + + +subroutine test34 + implicit none + integer, volatile,pointer :: a(:,:),i + call foo(a(2,2:3:2)) ! { dg-error "must be simply contigous" } +contains + subroutine foo(x) + integer, pointer, contiguous, volatile :: x(:) + end subroutine +end subroutine test34 diff --git a/gcc/testsuite/gfortran.dg/contiguous_2.f90 b/gcc/testsuite/gfortran.dg/contiguous_2.f90 new file mode 100644 index 00000000000..782d23dc7cd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/contiguous_2.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR fortran/40632 +! +! CONTIGUOUS compile-time tests +! + +integer, pointer, contiguous :: a(:) ! { dg-error "Fortran 2008:" } +integer, pointer :: b(:) +contiguous :: b ! { dg-error "Fortran 2008:" } +end diff --git a/gcc/testsuite/gfortran.dg/contiguous_3.f90 b/gcc/testsuite/gfortran.dg/contiguous_3.f90 new file mode 100644 index 00000000000..aac55367a45 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/contiguous_3.f90 @@ -0,0 +1,65 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/40632 +! +! CONTIGUOUS compile-time tests: Check that contigous +! works properly. + +subroutine test1(a,b) + integer, pointer, contiguous :: test1_a(:) + call foo(test1_a) + call foo(test1_a(::1)) + call foo(test1_a(::2)) +contains + subroutine foo(b) + integer :: b(*) + end subroutine foo +end subroutine test1 + +! For the first two no pack is done; for the third one, an array descriptor +! (cf. below test3) is created for packing. +! +! { dg-final { scan-tree-dump-times "_internal_pack.*test1_a" 0 "original" } } +! { dg-final { scan-tree-dump-times "_internal_unpack.*test1_a" 0 "original" } } + + +subroutine t2(a1,b1,c2,d2) + integer, pointer, contiguous :: a1(:), b1(:) + integer, pointer :: c2(:), d2(:) + a1 = b1 + c2 = d2 +end subroutine t2 + +! { dg-final { scan-tree-dump-times "= a1->dim.0..stride;" 0 "original" } } +! { dg-final { scan-tree-dump-times "= b1->dim.0..stride;" 0 "original" } } +! { dg-final { scan-tree-dump-times "= c2->dim.0..stride;" 1 "original" } } +! { dg-final { scan-tree-dump-times "= d2->dim.0..stride;" 1 "original" } } + + +subroutine test3() + implicit none + integer :: test3_a(8),i + test3_a = [(i,i=1,8)] + call foo(test3_a(::1)) + call foo(test3_a(::2)) + call bar(test3_a(::1)) + call bar(test3_a(::2)) +contains + subroutine foo(x) + integer, contiguous :: x(:) + print *, x + end subroutine + subroutine bar(x) + integer :: x(:) + print *, x + end subroutine bar +end subroutine test3 + +! Once for test1 (third call), once for test3 (second call) +! { dg-final { scan-tree-dump-times "data = origptr" 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_internal_pack .&parm" 2 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_internal_unpack .&parm" 2 "original" } } + + +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/data_namelist_conflict.f90 b/gcc/testsuite/gfortran.dg/data_namelist_conflict.f90 new file mode 100644 index 00000000000..b09f167fc7c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/data_namelist_conflict.f90 @@ -0,0 +1,26 @@ +! { dg-do run } +! Problem report: http://gcc.gnu.org/ml/fortran/2010-05/msg00139.html +! +module globals + implicit none + integer j + data j/1/ +end module + +program test + use globals + implicit none + character(len=80) str + integer :: i + data i/0/ + namelist /nl/i,j + open(unit=10,status='scratch') + write(10,nl) + i = 42 + j = 42 + rewind(10) + read(10,nl) + if (i /= 0 .or. j /= 1) call abort + close(10) +end program +! { dg-final { cleanup-modules "globals" } } diff --git a/gcc/testsuite/gfortran.dg/end_subroutine_1.f90 b/gcc/testsuite/gfortran.dg/end_subroutine_1.f90 new file mode 100644 index 00000000000..b42f950546b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/end_subroutine_1.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +interface + subroutine foo() + end + integer function bar() + end +end interface +contains + subroutine test() + end + integer function f() + f = 42 + end +end diff --git a/gcc/testsuite/gfortran.dg/end_subroutine_2.f90 b/gcc/testsuite/gfortran.dg/end_subroutine_2.f90 new file mode 100644 index 00000000000..8f2e3d10a13 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/end_subroutine_2.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +program main +interface + subroutine foo() + end + integer function bar() + end +end interface +contains + subroutine test() + end ! { dg-error "Fortran 2008: END statement instead of END SUBROUTINE" } + end subroutine ! To silence successive errors +end program + +subroutine test2() +contains + integer function f() + f = 42 + end ! { dg-error "Fortran 2008: END statement instead of END FUNCTION" } + end function ! To silence successive errors +end subroutine test2 + diff --git a/gcc/testsuite/gfortran.dg/endfile_2.f90 b/gcc/testsuite/gfortran.dg/endfile_2.f90 index e91e80eb2aa..ee911e89e9e 100644 --- a/gcc/testsuite/gfortran.dg/endfile_2.f90 +++ b/gcc/testsuite/gfortran.dg/endfile_2.f90 @@ -5,7 +5,7 @@ integer i endfile(8) rewind(8) - read(8,end=0023)i + read(8,*,end=0023)i call abort ! should never get here stop 0023 continue diff --git a/gcc/testsuite/gfortran.dg/endfile_3.f90 b/gcc/testsuite/gfortran.dg/endfile_3.f90 new file mode 100644 index 00000000000..0c413145c5d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/endfile_3.f90 @@ -0,0 +1,9 @@ +! { dg-do run } +! pr44477 READ/WRITE not allowed after ENDFILE +!------------------------------------------- + open(10, form='formatted', & + action='write', position='rewind', status="scratch") + endfile(10) + write(10,'(a)') "aa" ! { dg-shouldfail "Cannot perform ENDFILE" } +end + diff --git a/gcc/testsuite/gfortran.dg/endfile_4.f90 b/gcc/testsuite/gfortran.dg/endfile_4.f90 new file mode 100644 index 00000000000..a2462c9f878 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/endfile_4.f90 @@ -0,0 +1,8 @@ +! { dg-do run } +! pr44477 ENDFILE not allowed after ENDFILE +!------------------------------------------- + open(10, form='formatted', & + action='write', position='rewind', status="scratch") + endfile(10) + endfile(10) ! { dg-shouldfail "Cannot perform ENDFILE" } +end diff --git a/gcc/testsuite/gfortran.dg/entry_19.f90 b/gcc/testsuite/gfortran.dg/entry_19.f90 new file mode 100644 index 00000000000..b7b8bfa2f2e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/entry_19.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! +! Entry is obsolete in Fortran 2008 +! +subroutine foo() +entry bar() ! { dg-error "Fortran 2008 obsolescent feature: ENTRY" } +end diff --git a/gcc/testsuite/gfortran.dg/eof_3.f90 b/gcc/testsuite/gfortran.dg/eof_3.f90 index 83d652912bc..f1d5098c77b 100644 --- a/gcc/testsuite/gfortran.dg/eof_3.f90 +++ b/gcc/testsuite/gfortran.dg/eof_3.f90 @@ -4,5 +4,6 @@ program test open(unit=32,status="scratch",access="sequential",form="unformatted") read(32,end=100) 100 continue +backspace(32) write (32) end program test diff --git a/gcc/testsuite/gfortran.dg/generic_23.f03 b/gcc/testsuite/gfortran.dg/generic_23.f03 new file mode 100644 index 00000000000..eab185b483d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/generic_23.f03 @@ -0,0 +1,67 @@ +! { dg-do run } +! Test the fix for PR43945 in which the over-ridding of 'doit' and +! 'getit' in type 'foo2' was missed in the specific binding to 'do' and 'get'. +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> +! and reported to clf by Salvatore Filippone <sfilippone@uniroma2.it> +! +module foo_mod + type foo + integer :: i + contains + procedure, pass(a) :: doit + procedure, pass(a) :: getit + generic, public :: do => doit + generic, public :: get => getit + end type foo + private doit,getit +contains + subroutine doit(a) + class(foo) :: a + a%i = 1 + write(*,*) 'FOO%DOIT base version' + end subroutine doit + function getit(a) result(res) + class(foo) :: a + integer :: res + res = a%i + end function getit +end module foo_mod + +module foo2_mod + use foo_mod + type, extends(foo) :: foo2 + integer :: j + contains + procedure, pass(a) :: doit => doit2 + procedure, pass(a) :: getit => getit2 +!!$ generic, public :: do => doit +!!$ generic, public :: get => getit + end type foo2 + private doit2, getit2 + +contains + + subroutine doit2(a) + class(foo2) :: a + a%i = 2 + a%j = 3 + end subroutine doit2 + function getit2(a) result(res) + class(foo2) :: a + integer :: res + res = a%j + end function getit2 +end module foo2_mod + +program testd15 + use foo2_mod + type(foo2) :: af2 + + call af2%do() + if (af2%i .ne. 2) call abort + if (af2%get() .ne. 3) call abort + +end program testd15 + +! { dg-final { cleanup-modules "foo_mod foo2_mod" } } diff --git a/gcc/testsuite/gfortran.dg/gomp/pr44536.f90 b/gcc/testsuite/gfortran.dg/gomp/pr44536.f90 new file mode 100644 index 00000000000..0dc896dccea --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr44536.f90 @@ -0,0 +1,10 @@ +! PR fortran/44536 +! { dg-do compile } +! { dg-options "-fopenmp" } + subroutine foo (a, i, j) + integer, dimension(:) :: a + integer :: i, j +!$omp parallel default(none) shared(i, j) ! { dg-error "enclosing parallel" } + j=a(i) ! { dg-error "not specified in" } +!$omp end parallel + end subroutine diff --git a/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 b/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 index 5c1581454b2..05be38283a9 100644 --- a/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 @@ -29,7 +29,7 @@ subroutine foo (vara, varb, varc, vard, n) !$omp master vara(1) = 1 ! { dg-error "not specified" } varb(1) = 1 ! Assumed-size is predetermined - varc(1) = 1 ! { dg-error "not specified" "" { xfail *-*-* } } + varc(1) = 1 ! { dg-error "not specified" } vard(1) = 1 ! { dg-error "not specified" } vare(1) = 1 ! { dg-error "not specified" } !$omp end master diff --git a/gcc/testsuite/gfortran.dg/ibclr_1.f90 b/gcc/testsuite/gfortran.dg/ibclr_1.f90 new file mode 100644 index 00000000000..3932789ec4f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ibclr_1.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +program a + integer :: i = 42 + integer l + l = ibclr(i, -1) ! { dg-error "must be nonnegative" } + l = ibclr(i, 65) ! { dg-error "must be less than" } +end program a diff --git a/gcc/testsuite/gfortran.dg/ibits_1.f90 b/gcc/testsuite/gfortran.dg/ibits_1.f90 new file mode 100644 index 00000000000..2bcbe829b86 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ibits_1.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! +! PR fortran/44346 +! Original test sumbitted by Vittorio Zecca, zeccav at gmail dot com. +! Modified by Steven G. Kargl for dejagnu testsuite. +! +program a + integer :: j, i = 42 + j = ibits(i, -1, 1) ! { dg-error "must be nonnegative" } + j = ibits(i, 1, -1) ! { dg-error "must be nonnegative" } + j = ibits(i, 100, 100) ! { dg-error "must be less than" } +end program a + diff --git a/gcc/testsuite/gfortran.dg/ibset_1.f90 b/gcc/testsuite/gfortran.dg/ibset_1.f90 new file mode 100644 index 00000000000..2ff261dbd2b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ibset_1.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +program a + integer :: i = 42 + integer l + l = ibset(i, -1) ! { dg-error "must be nonnegative" } + l = ibset(i, 65) ! { dg-error "must be less than" } +end program a diff --git a/gcc/testsuite/gfortran.dg/import8.f90 b/gcc/testsuite/gfortran.dg/import8.f90 new file mode 100644 index 00000000000..0d88e625b81 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/import8.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! +! PR fortran/44614 +! +! + +implicit none + +type, abstract :: Connection +end type Connection + +abstract interface + subroutine generic_desc(self) + ! <<< missing IMPORT + class(Connection) :: self ! { dg-error "has not been declared within the interface" } + end subroutine generic_desc +end interface +end diff --git a/gcc/testsuite/gfortran.dg/interface_proc_end.f90 b/gcc/testsuite/gfortran.dg/interface_proc_end.f90 index ab95b794268..2fc9921df41 100644 --- a/gcc/testsuite/gfortran.dg/interface_proc_end.f90 +++ b/gcc/testsuite/gfortran.dg/interface_proc_end.f90 @@ -14,6 +14,5 @@ REAL :: TLS1,TLS2 END ! OK END INTERFACE - end ! { dg-error "END SUBROUTINE statement" } - end module ! { dg-error "END SUBROUTINE statement" } -! { dg-error "Unexpected end of file" "" { target "*-*-*" } 0 } + end subroutine + end module diff --git a/gcc/testsuite/gfortran.dg/ltrans-7.f90 b/gcc/testsuite/gfortran.dg/ltrans-7.f90 index 2829b2cda18..9c9bcf939eb 100644 --- a/gcc/testsuite/gfortran.dg/ltrans-7.f90 +++ b/gcc/testsuite/gfortran.dg/ltrans-7.f90 @@ -1,5 +1,6 @@ ! { dg-do compile } ! { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all" } +! { dg-options "-O2 -ftree-loop-linear -fdump-tree-ltrans-all -march=i486" { target { i?86-*-* && ilp32 } } } Program FOO IMPLICIT INTEGER (I-N) diff --git a/gcc/testsuite/gfortran.dg/mvbits_9.f90 b/gcc/testsuite/gfortran.dg/mvbits_9.f90 new file mode 100644 index 00000000000..952286b09a6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/mvbits_9.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! PR fortran/44346 +! Original test sumbitted by Vittorio Zecca, zeccav at gmail dot com. +! Modified by Steven G. Kargl for dejagnu testsuite. +! +program a + integer :: n = 42 + ! 64 + 3 > bitsize(n) + call mvbits(n, 64, 3, n, 1) ! { dg-error "must be less than" } + ! 64 + 2 > bitsize(n) + call mvbits(n, 30, 2, n, 64) ! { dg-error "must be less than" } + ! LEN negative + call mvbits(n, 30, -2, n, 30) ! { dg-error "must be nonnegative" } + ! TOPOS negative + call mvbits(n, 30, 2, n, -3) ! { dg-error "must be nonnegative" } + ! FROMPOS negative + call mvbits(n, -1, 2, n, 3) ! { dg-error "must be nonnegative" } +end program a diff --git a/gcc/testsuite/gfortran.dg/nan_6.f90 b/gcc/testsuite/gfortran.dg/nan_6.f90 new file mode 100644 index 00000000000..8f0af294420 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/nan_6.f90 @@ -0,0 +1,99 @@ +! { dg-do run } +! { dg-add-options ieee } +! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } } +! +! List-directed part of PR fortran/43298 +! and follow up to PR fortran/34319. +! +! Check handling of "NAN(alphanum)" +! +character(len=200) :: str +real :: r +complex :: z + +! read_real: + +r = 1.0 +str = 'INfinity' ; read(str,*) r +if (r < 0 .or. r /= r*1.1) call abort() + +r = 1.0 +str = '-INF' ; read(str,*) r +if (r > 0 .or. r /= r*1.1) call abort() + +r = 1.0 +str = '+INF' ; read(str,*) r +if (r < 0 .or. r /= r*1.1) call abort() + +r = 1.0 +str = '-inFiniTY' ; read(str,*) r +if (r > 0 .or. r /= r*1.1) call abort() + +r = 1.0 +str = 'NAN' ; read(str,*) r +if (.not. isnan(r)) call abort() + +r = 1.0 +str = '-NAN' ; read(str,*) r +if (.not. isnan(r)) call abort() + +r = 1.0 +str = '+NAN' ; read(str,*) r +if (.not. isnan(r)) call abort() + +r = 1.0 +str = 'NAN(0x111)' ; read(str,*) r +if (.not. isnan(r)) call abort() + +r = 1.0 +str = '-NAN(123)' ; read(str,*) r +if (.not. isnan(r)) call abort() + +r = 1.0 +str = '+NAN(0xFFE)' ; read(str,*) r +if (.not. isnan(r)) call abort() + + +! parse_real + +z = cmplx(-2.0,-4.0) +str = '(0.0,INfinity)' ; read(str,*) z +if (aimag(z) < 0 .or. aimag(z) /= aimag(z)*1.1) call abort() + +z = cmplx(-2.0,-4.0) +str = '(-INF,0.0)' ; read(str,*) z +if (real(z) > 0 .or. real(z) /= real(z)*1.1) call abort() + +z = cmplx(-2.0,-4.0) +str = '(0.0,+INF)' ; read(str,*) z +if (aimag(z) < 0 .or. aimag(z) /= aimag(z)*1.1) call abort() + +z = cmplx(-2.0,-4.0) +str = '(-inFiniTY,0.0)' ; read(str,*) z +if (real(z) > 0 .or. real(z) /= real(z)*1.1) call abort() + +z = cmplx(-2.0,-4.0) +str = '(NAN,0.0)' ; read(str,*) z +if (.not. isnan(real(z))) call abort() + +z = cmplx(-2.0,-4.0) +str = '(0.0,-NAN)' ; read(str,*) z +if (.not. isnan(aimag(z))) call abort() + +z = cmplx(-2.0,-4.0) +str = '(+NAN,0.0)' ; read(str,*) z +if (.not. isnan(real(z))) call abort() + +z = cmplx(-2.0,-4.0) +str = '(NAN(0x111),0.0)' ; read(str,*) z +if (.not. isnan(real(z))) call abort() + +z = cmplx(-2.0,-4.0) +str = '(0.0,-NaN(123))' ; read(str,*) z +if (.not. isnan(aimag(z))) call abort() + +z = cmplx(-2.0,-4.0) +str = '(+nan(0xFFE),0.0)' ; read(str,*) z +if (.not. isnan(real(z))) call abort() + +end diff --git a/gcc/testsuite/gfortran.dg/pr43688.f90 b/gcc/testsuite/gfortran.dg/pr43688.f90 new file mode 100644 index 00000000000..face02212b8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr43688.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-O0 -fipa-reference" } + + subroutine sub + type :: a + integer :: i = 42 + end type a + type(a), target :: dt(2) + integer, pointer :: ip(:) + ip => dt%i + end subroutine diff --git a/gcc/testsuite/gfortran.dg/pr43866.f90 b/gcc/testsuite/gfortran.dg/pr43866.f90 new file mode 100644 index 00000000000..abfdaa1557f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr43866.f90 @@ -0,0 +1,44 @@ +! PR middle-end/43866 +! { dg-do run } +! { dg-options "-funswitch-loops -fbounds-check" } + +MODULE PR43866 + IMPLICIT NONE + TYPE TT + REAL(KIND=4), DIMENSION(:,:), POINTER :: A + REAL(KIND=8), DIMENSION(:,:), POINTER :: B + END TYPE +CONTAINS + SUBROUTINE FOO(M,X,Y,T) + TYPE(TT), POINTER :: M + INTEGER, INTENT(IN) :: Y, X + INTEGER :: C, D + LOGICAL :: T + REAL(KIND = 4), DIMENSION(:,:), POINTER :: P + REAL(KIND = 8), DIMENSION(:,:), POINTER :: Q + + Q => M%B + P => M%A + DO C=1,X + DO D=C+1,Y + IF (T) THEN + P(D,C)=P(C,D) + ELSE + Q(D,C)=Q(C,D) + ENDIF + ENDDO + ENDDO + END SUBROUTINE FOO +END MODULE PR43866 + + USE PR43866 + TYPE(TT), POINTER :: Q + INTEGER, PARAMETER :: N=17 + ALLOCATE (Q) + NULLIFY (Q%A) + ALLOCATE (Q%B(N,N)) + Q%B=0 + CALL FOO (Q,N,N,.FALSE.) +END + +! { dg-final { cleanup-modules "pr43866" } } diff --git a/gcc/testsuite/gfortran.dg/pr44592.f90 b/gcc/testsuite/gfortran.dg/pr44592.f90 new file mode 100644 index 00000000000..8b043ba33ed --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr44592.f90 @@ -0,0 +1,20 @@ +! { dg-do run } +! { dg-options "-O3" } +! From forall_12.f90 +! Fails with loop reversal at -O3 +! + character(len=1) :: b(4) = (/"1","2","3","4"/), c(4) + c = b + i = 1 + ! This statement must be here for the abort below + b(1:3)(i:i) = b(2:4)(i:i) + + b = c + b(4:2:-1)(i:i) = b(3:1:-1)(i:i) + + ! This fails. If the condition is printed, the result is F F F F + if (any (b .ne. (/"1","1","2","3"/))) i = 2 + print *, b + print *, b .ne. (/"1","1","2","3"/) + if (i == 2) call abort +end diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_27.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_27.f90 new file mode 100644 index 00000000000..83f09598110 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_27.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! +! PR fortran/44446 +! +! Contributed by Marco Restelli. +! +! Procedure pointer with PROTECTED was wrongly rejected. +! +module m + implicit none + abstract interface + pure function i_f(x) result(y) + real, intent(in) :: x + real :: y + end function i_f + end interface + procedure(i_f), pointer, protected :: p_f => null() +end module m + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_28.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_28.f90 new file mode 100644 index 00000000000..8754d8e2982 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_28.f90 @@ -0,0 +1,39 @@ +! { dg-do compile } +! +! PR 44718: Procedure-pointer name is wrongly regarded as "external procedure" +! +! Contributed by John McFarland <john.mcfarland@swri.org> + +MODULE m + + IMPLICIT NONE + +CONTAINS + + FUNCTION func(x) RESULT(y) + INTEGER :: x,y + y = x *2 + END FUNCTION func + + SUBROUTINE sub(x) + INTEGER :: x + PRINT*, x + END SUBROUTINE sub + + + SUBROUTINE use_func() + PROCEDURE(func), POINTER :: f + INTEGER :: y + f => func + y = f(2) + END SUBROUTINE use_func + + SUBROUTINE use_sub() + PROCEDURE(sub), POINTER :: f + f => sub + CALL f(2) + END SUBROUTINE use_sub + +END MODULE m + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/read_infnan_1.f90 b/gcc/testsuite/gfortran.dg/read_infnan_1.f90 new file mode 100644 index 00000000000..515a6900270 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/read_infnan_1.f90 @@ -0,0 +1,31 @@ +! { dg-do run } +! { dg-add-options ieee } +! { dg-skip-if "NaN not supported" { spu-*-* } { "*" } { "" } } + +! PR43298 Fortran library does not read in NaN, NaN(), -Inf, or Inf + +! Formatted READ part of PR fortran/43298 + +! Test case prepared by Jerry DeLisle <jvdelisle@gcc.gnu.org> +program pr43298 + real(4) :: x4(7) + real(8) :: x8(7) + character(80) :: output + +open(10, status='scratch') +! 0123456789012345678901234567890123456789012345678901234567890123456789 +write(10,'(a)') "inf nan infinity NaN(dx) -INf NAN InFiNiTy" +rewind(10) +x4 = 0.0_4 +x8 = 0.0_8 +read(10,'(7f10.3)') x4 +rewind(10) +read(10,'(7f10.3)') x8 +write (output, '("x4 =",7G6.0)') x4 +if (output.ne."x4 = +Inf NaN +Inf NaN -Inf NaN +Inf") call abort +write (output, '("x8 =",7G6.0)') x8 +if (output.ne."x8 = +Inf NaN +Inf NaN -Inf NaN +Inf") call abort +!print '("x4 =",7G6.0)', x4 +!print '("x8 =",7G6.0)', x8 +end program pr43298 + diff --git a/gcc/testsuite/gfortran.dg/selected_char_kind_4.f90 b/gcc/testsuite/gfortran.dg/selected_char_kind_4.f90 new file mode 100644 index 00000000000..046ddf0e74c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/selected_char_kind_4.f90 @@ -0,0 +1,24 @@ +! { dg-do run } +! +! Check that runtime result values of SELECTED_CHAR_KIND agree with +! front-end simplification results. +! + implicit none + character(len=20) :: s + + s = "ascii" + if (selected_char_kind(s) /= selected_char_kind("ascii")) call abort + + s = "default" + if (selected_char_kind(s) /= selected_char_kind("default")) call abort + + s = "iso_10646" + if (selected_char_kind(s) /= selected_char_kind("iso_10646")) call abort + + s = "" + if (selected_char_kind(s) /= selected_char_kind("")) call abort + + s = "invalid" + if (selected_char_kind(s) /= selected_char_kind("invalid")) call abort + +end diff --git a/gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 b/gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 new file mode 100644 index 00000000000..0f40a595d2f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 @@ -0,0 +1,10 @@ +! { dg-do "compile" } +! +! PR fortran/44347 - arguments of SELECTED_REAL_KIND shall be scalar +! Testcase contributed by Vittorio Zecca <zeccav AT gmail DOT com> +! + + dimension ip(1), ir(1) + i = selected_real_kind(ip, i) ! { dg-error "must be a scalar" } + j = selected_real_kind(i, ir) ! { dg-error "must be a scalar" } +end diff --git a/gcc/testsuite/gfortran.dg/selected_real_kind_2.f90 b/gcc/testsuite/gfortran.dg/selected_real_kind_2.f90 new file mode 100644 index 00000000000..cf73520f930 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/selected_real_kind_2.f90 @@ -0,0 +1,32 @@ +! { dg-do run } +! { dg-options "-std=f2008 -fall-intrinsics" } +! + +integer :: p, r, rdx + +! Compile-time version + +if (selected_real_kind(radix=2) /= 4) call should_not_fail() +if (selected_real_kind(radix=4) /= -5) call should_not_fail() +if (selected_real_kind(precision(0.0),range(0.0),radix(0.0)) /= kind(0.0)) & + call should_not_fail() +if (selected_real_kind(precision(0.0d0),range(0.0d0),radix(0.0d0)) /= kind(0.0d0)) & + call should_not_fail() + +! Run-time version + +rdx = 2 +if (selected_real_kind(radix=rdx) /= 4) call abort() +rdx = 4 +if (selected_real_kind(radix=rdx) /= -5) call abort() + +rdx = radix(0.0) +p = precision(0.0) +r = range(0.0) +if (selected_real_kind(p,r,rdx) /= kind(0.0)) call abort() + +rdx = radix(0.0d0) +p = precision(0.0d0) +r = range(0.0d0) +if (selected_real_kind(p,r,rdx) /= kind(0.0d0)) call abort() +end diff --git a/gcc/testsuite/gfortran.dg/selected_real_kind_3.f90 b/gcc/testsuite/gfortran.dg/selected_real_kind_3.f90 new file mode 100644 index 00000000000..d24d877acfe --- /dev/null +++ b/gcc/testsuite/gfortran.dg/selected_real_kind_3.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +print *, selected_real_kind(p=precision(0.0),radix=2) ! { dg-error "Fortran 2008" } +print *, selected_real_kind() ! { dg-error "neither 'P' nor 'R' argument" } +end diff --git a/gcc/testsuite/gfortran.dg/semicolon_fixed.f b/gcc/testsuite/gfortran.dg/semicolon_fixed.f index 2c667ae0cb9..7bd0ada825c 100644 --- a/gcc/testsuite/gfortran.dg/semicolon_fixed.f +++ b/gcc/testsuite/gfortran.dg/semicolon_fixed.f @@ -1,9 +1,11 @@ ! { dg-do compile } -! PR 19259 Semicolon cannot start a line +! { dg-options "-std=f2003" } +! +! PR 19259 Semicolon cannot start a line (in F2003) x=1; y=1; x=2;; x=3; - ; ! { dg-error "Semicolon at" } - ;; ! { dg-error "Semicolon at" } + ; ! { dg-error "Fortran 2008: Semicolon at" } + ;; ! { dg-error "Fortran 2008: Semicolon at" } 900 ; ! { dg-error "Semicolon at" } end diff --git a/gcc/testsuite/gfortran.dg/semicolon_fixed_2.f b/gcc/testsuite/gfortran.dg/semicolon_fixed_2.f new file mode 100644 index 00000000000..8ee444c3ff5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/semicolon_fixed_2.f @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } + +! PR 19259 Semicolon cannot start a line +! but it F2008 it can! + x=1; y=1; + x=2;; + x=3; + ; ! OK + ;; ! OK + 900 ; ! { dg-error "Semicolon at" } + end diff --git a/gcc/testsuite/gfortran.dg/semicolon_free.f90 b/gcc/testsuite/gfortran.dg/semicolon_free.f90 index 28e8da2b285..4d05d83f86b 100644 --- a/gcc/testsuite/gfortran.dg/semicolon_free.f90 +++ b/gcc/testsuite/gfortran.dg/semicolon_free.f90 @@ -1,4 +1,5 @@ ! { dg-do compile } +! { dg-options "-std=f2003" } ! PR 19259 Semicolon cannot start a line x=1; y=1; x=2;; diff --git a/gcc/testsuite/gfortran.dg/semicolon_free_2.f90 b/gcc/testsuite/gfortran.dg/semicolon_free_2.f90 new file mode 100644 index 00000000000..2fae26e1607 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/semicolon_free_2.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! PR 19259 Semicolon cannot start a line +x=1; y=1; +x=2;; +x=3; + ; ! OK +;; ! OK +111 ; ! { dg-error "Semicolon at" } +end diff --git a/gcc/testsuite/gfortran.dg/type_decl_1.f90 b/gcc/testsuite/gfortran.dg/type_decl_1.f90 new file mode 100644 index 00000000000..93928652a05 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/type_decl_1.f90 @@ -0,0 +1,30 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! +! Fortran 2008: TYPE ( intrinsic-type-spec ) +! +implicit none +type(integer) :: a +type(real) :: b +type(logical ) :: c +type(character) :: d +type(double precision) :: e + +type(integer(8)) :: f +type(real(kind=4)) :: g +type(logical ( kind = 1 ) ) :: h +type(character (len=10,kind=1) ) :: i + +type(double complex) :: j ! { dg-error "Extension: DOUBLE COMPLEX" } +end + +module m + integer, parameter :: k4 = 4 +end module m + +type(integer (kind=k4)) function f() + use m + f = 42 +end + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/type_decl_2.f90 b/gcc/testsuite/gfortran.dg/type_decl_2.f90 new file mode 100644 index 00000000000..6525880e06e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/type_decl_2.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! Fortran 2008: TYPE ( intrinsic-type-spec ) +! +implicit none +type(integer) :: a ! { dg-error "Fortran 2008" } +type(real) :: b ! { dg-error "Fortran 2008" } +type(logical) :: c ! { dg-error "Fortran 2008" } +type(character) :: d ! { dg-error "Fortran 2008" } +type(double precision) :: e ! { dg-error "Fortran 2008" } +end diff --git a/gcc/testsuite/gfortran.dg/typebound_call_14.f03 b/gcc/testsuite/gfortran.dg/typebound_call_14.f03 new file mode 100644 index 00000000000..e8cbf846e5d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_call_14.f03 @@ -0,0 +1,29 @@ +! { dg-do compile } +! +! PR 44211: [OOP] ICE with TBP of pointer component of derived type array +! +! Original test case by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de> +! Modified by Janus Weil <janus@gcc.gnu.org> + +module ice_module + type::ice_type + class(ice_type),pointer::next + contains + procedure::ice_sub + procedure::ice_fun + end type ice_type +contains + subroutine ice_sub(this) + class(ice_type)::this + end subroutine + integer function ice_fun(this) + class(ice_type)::this + end function + subroutine ice() + type(ice_type),dimension(2)::ice_array + call ice_array(1)%next%ice_sub() + print *,ice_array(2)%next%ice_fun() + end subroutine +end module ice_module + +! { dg-final { cleanup-modules "ice_module" } } diff --git a/gcc/testsuite/gfortran.dg/typebound_call_15.f03 b/gcc/testsuite/gfortran.dg/typebound_call_15.f03 new file mode 100644 index 00000000000..ac6a668cc46 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_call_15.f03 @@ -0,0 +1,25 @@ +! { dg-do compile } +! +! PR 44558: [OOP] ICE on invalid code: called TBP subroutine as TBP function +! +! Contributed by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de> + +module ice5 + type::a_type + contains + procedure::a_subroutine_1 + procedure::a_subroutine_2 + end type a_type +contains + real function a_subroutine_1(this) + class(a_type)::this + real::res + res=this%a_subroutine_2() ! { dg-error "should be a FUNCTION" } + end function + subroutine a_subroutine_2(this) + class(a_type)::this + call this%a_subroutine_1() ! { dg-error "should be a SUBROUTINE" } + end subroutine +end module ice5 + +! { dg-final { cleanup-modules "ice5" } } diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_14.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_14.f03 new file mode 100644 index 00000000000..766a0ef66c1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_14.f03 @@ -0,0 +1,33 @@ +! { dg-do compile } +! +! PR 40117: [OOP][F2008] Type-bound procedure: allow list after PROCEDURE +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +module m + +implicit none + +type :: t +contains + procedure :: foo, bar, baz +end type + +contains + + subroutine foo (this) + class(t) :: this + end subroutine + + real function bar (this) + class(t) :: this + end function + + subroutine baz (this, par) + class(t) :: this + integer :: par + end subroutine + +end + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_15.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_15.f03 new file mode 100644 index 00000000000..37907b3f4df --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_15.f03 @@ -0,0 +1,34 @@ +! { dg-do compile } +! { dg-options "-std=f2003" } +! +! PR 40117: [OOP][F2008] Type-bound procedure: allow list after PROCEDURE +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + +module m + +implicit none + +type :: t +contains + procedure :: foo + procedure :: bar, baz ! { dg-error "PROCEDURE list" } +end type + +contains + + subroutine foo (this) + class(t) :: this + end subroutine + + subroutine bar (this) + class(t) :: this + end subroutine + + subroutine baz (this) + class(t) :: this + end subroutine + +end + +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_16.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_16.f03 new file mode 100644 index 00000000000..828f5102204 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_16.f03 @@ -0,0 +1,58 @@ +! { dg-do compile } +! +! PR 44549: [OOP][F2008] Type-bound procedure: bogus error from list after PROCEDURE +! +! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr> + +MODULE rational_numbers + IMPLICIT NONE + PRIVATE + TYPE,PUBLIC :: rational + PRIVATE + INTEGER n,d + + CONTAINS + ! ordinary type-bound procedure + PROCEDURE :: real => rat_to_real + ! specific type-bound procedures for generic support + PROCEDURE,PRIVATE :: rat_asgn_i, rat_plus_rat, rat_plus_i + PROCEDURE,PRIVATE,PASS(b) :: i_plus_rat + ! generic type-bound procedures + GENERIC :: ASSIGNMENT(=) => rat_asgn_i + GENERIC :: OPERATOR(+) => rat_plus_rat, rat_plus_i, i_plus_rat + END TYPE + CONTAINS + ELEMENTAL REAL FUNCTION rat_to_real(this) RESULT(r) + CLASS(rational),INTENT(IN) :: this + r = REAL(this%n)/this%d + END FUNCTION + + ELEMENTAL SUBROUTINE rat_asgn_i(a,b) + CLASS(rational),INTENT(OUT) :: a + INTEGER,INTENT(IN) :: b + a%n = b + a%d = 1 + END SUBROUTINE + + ELEMENTAL TYPE(rational) FUNCTION rat_plus_i(a,b) RESULT(r) + CLASS(rational),INTENT(IN) :: a + INTEGER,INTENT(IN) :: b + r%n = a%n + b*a%d + r%d = a%d + END FUNCTION + + ELEMENTAL TYPE(rational) FUNCTION i_plus_rat(a,b) RESULT(r) + INTEGER,INTENT(IN) :: a + CLASS(rational),INTENT(IN) :: b + r%n = b%n + a*b%d + r%d = b%d + END FUNCTION + + ELEMENTAL TYPE(rational) FUNCTION rat_plus_rat(a,b) RESULT(r) + CLASS(rational),INTENT(IN) :: a,b + r%n = a%n*b%d + b%n*a%d + r%d = a%d*b%d + END FUNCTION +END + +! { dg-final { cleanup-modules "rational_numbers" } } diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_4.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_4.f03 index 92adc1a852a..60aa728a40f 100644 --- a/gcc/testsuite/gfortran.dg/typebound_proc_4.f03 +++ b/gcc/testsuite/gfortran.dg/typebound_proc_4.f03 @@ -17,12 +17,12 @@ MODULE testmod PROCEDURE ? ! { dg-error "Expected binding name" } PROCEDURE :: p2 => ! { dg-error "Expected binding target" } PROCEDURE :: p3 =>, ! { dg-error "Expected binding target" } - PROCEDURE p4, ! { dg-error "Junk after" } - PROCEDURE :: p5 => proc2, ! { dg-error "Junk after" } + PROCEDURE p4, ! { dg-error "Expected binding name" } + PROCEDURE :: p5 => proc2, ! { dg-error "Expected binding name" } PROCEDURE :: p0 => proc3 ! { dg-error "already a procedure" } PROCEDURE, PASS p6 ! { dg-error "::" } PROCEDURE, PASS NON_OVERRIDABLE ! { dg-error "Expected" } - PROCEDURE PASS :: ! { dg-error "Junk after" } + PROCEDURE PASS :: ! { dg-error "Syntax error" } PROCEDURE, PASS (x ! { dg-error "Expected" } PROCEDURE, PASS () ! { dg-error "Expected" } PROCEDURE, NOPASS, PASS ! { dg-error "illegal PASS" } diff --git a/gcc/testsuite/gfortran.dg/unpack_bounds_1.f90 b/gcc/testsuite/gfortran.dg/unpack_bounds_1.f90 index 360790b5705..360790b5705 100755..100644 --- a/gcc/testsuite/gfortran.dg/unpack_bounds_1.f90 +++ b/gcc/testsuite/gfortran.dg/unpack_bounds_1.f90 diff --git a/gcc/testsuite/gfortran.dg/unpack_bounds_2.f90 b/gcc/testsuite/gfortran.dg/unpack_bounds_2.f90 index fd049f5abbb..fd049f5abbb 100755..100644 --- a/gcc/testsuite/gfortran.dg/unpack_bounds_2.f90 +++ b/gcc/testsuite/gfortran.dg/unpack_bounds_2.f90 diff --git a/gcc/testsuite/gfortran.dg/unpack_bounds_3.f90 b/gcc/testsuite/gfortran.dg/unpack_bounds_3.f90 index c6734b14c1f..c6734b14c1f 100755..100644 --- a/gcc/testsuite/gfortran.dg/unpack_bounds_3.f90 +++ b/gcc/testsuite/gfortran.dg/unpack_bounds_3.f90 diff --git a/gcc/testsuite/gfortran.dg/warn_conversion.f90 b/gcc/testsuite/gfortran.dg/warn_conversion.f90 index f658b655cae..c8f0e23e2ff 100644 --- a/gcc/testsuite/gfortran.dg/warn_conversion.f90 +++ b/gcc/testsuite/gfortran.dg/warn_conversion.f90 @@ -18,7 +18,6 @@ SUBROUTINE pr27866c4 integer(kind=4) :: i4 i4 = 2.3 ! { dg-warning "conversion" } i1 = 500 ! { dg-error "overflow" } - ! { dg-warning "conversion" "" { target *-*-* } 20 } a = 2**26-1 ! assignment INTEGER(4) to REAL(4) - no warning b = 1d999 ! { dg-error "overflow" } diff --git a/gcc/testsuite/gfortran.dg/warn_conversion_2.f90 b/gcc/testsuite/gfortran.dg/warn_conversion_2.f90 index cb3b760a5e2..c0222983a0f 100644 --- a/gcc/testsuite/gfortran.dg/warn_conversion_2.f90 +++ b/gcc/testsuite/gfortran.dg/warn_conversion_2.f90 @@ -2,5 +2,10 @@ ! { dg-options "-Wconversion-extra" } real(8) :: sqrt2 - sqrt2 = sqrt(2.0) ! { dg-warning "conversion" } + real x + + x = 2.0 + sqrt2 = sqrt(x) ! { dg-warning "Conversion" } + + sqrt2 = sqrt(2.0) ! no warning; simplified to a constant and range checked end diff --git a/gcc/testsuite/gfortran.dg/whole_file_18.f90 b/gcc/testsuite/gfortran.dg/whole_file_18.f90 index dbff1859216..fac15d6ca4f 100644 --- a/gcc/testsuite/gfortran.dg/whole_file_18.f90 +++ b/gcc/testsuite/gfortran.dg/whole_file_18.f90 @@ -5,7 +5,7 @@ ! PROGRAM MAIN REAL A - CALL SUB(A) ! { dg-error "must have an explicit interface" } + CALL SUB(A) ! { dg-error "requires an explicit interface" } END PROGRAM SUBROUTINE SUB(A,I) diff --git a/gcc/testsuite/gfortran.dg/whole_file_20.f03 b/gcc/testsuite/gfortran.dg/whole_file_20.f03 new file mode 100644 index 00000000000..231a5aaf283 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/whole_file_20.f03 @@ -0,0 +1,33 @@ +! { dg-do "compile" } +! { dg-options "-fwhole-file -fcoarray=single" } +! +! Procedures with dummy arguments that are coarrays or polymorphic +! must have an explicit interface in the calling routine. +! + +MODULE classtype + type :: t + integer :: comp + end type +END MODULE + +PROGRAM main + USE classtype + CLASS(t), POINTER :: tt + + INTEGER :: coarr[*] + + CALL coarray(coarr) ! { dg-error " must have an explicit interface" } + CALL polymorph(tt) ! { dg-error " must have an explicit interface" } +END PROGRAM + +SUBROUTINE coarray(a) + INTEGER :: a[*] +END SUBROUTINE + +SUBROUTINE polymorph(b) + USE classtype + CLASS(t) :: b +END SUBROUTINE + +! { dg-final { cleanup-modules "classtype" } } diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr40421.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr40421.f90 new file mode 100644 index 00000000000..64b129efc3c --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr40421.f90 @@ -0,0 +1,15 @@ +subroutine pr40421 (j, q, r) + double precision :: q(1,1), r(1,1,3) + save + integer :: i, j, m, n + double precision :: s, t, u + do i=1,2 + do m=1,j + do n=1,1 + s=q(n,m)*r(n,m,1) + t=q(n,m)*r(n,m,2) + u=q(n,m)*r(n,m,3) + end do + end do + end do +end diff --git a/gcc/testsuite/gnat.dg/class_wide2.adb b/gcc/testsuite/gnat.dg/class_wide2.adb index b82289d5ef5..9df54bf9071 100644 --- a/gcc/testsuite/gnat.dg/class_wide2.adb +++ b/gcc/testsuite/gnat.dg/class_wide2.adb @@ -4,7 +4,7 @@ package body Class_Wide2 is procedure Initialize is Var_Acc : Class_Acc := new Grand_Child; - Var : Grand_Child'Class := Grand_Child'Class (Var_Acc.all); -- { dg-bogus "already constrained" "" { xfail *-*-* } } + Var : Grand_Child'Class := Grand_Child'Class (Var_Acc.all); begin Var := Grand_Child'Class (Var_Acc.all); diff --git a/gcc/testsuite/gnat.dg/noreturn3.adb b/gcc/testsuite/gnat.dg/noreturn3.adb new file mode 100644 index 00000000000..4457373c308 --- /dev/null +++ b/gcc/testsuite/gnat.dg/noreturn3.adb @@ -0,0 +1,27 @@ +-- { dg-do compile } + +with Ada.Exceptions; + +package body Noreturn3 is + + procedure Raise_Error (E : Enum; ErrorMessage : String) is + + function Msg return String is + begin + return "Error :" & ErrorMessage; + end; + + begin + case E is + when One => + Ada.Exceptions.Raise_Exception (Exc1'Identity, Msg); + + when Two => + Ada.Exceptions.Raise_Exception (Exc2'Identity, Msg); + + when others => + Ada.Exceptions.Raise_Exception (Exc3'Identity, Msg); + end case; + end; + +end Noreturn3; diff --git a/gcc/testsuite/gnat.dg/noreturn3.ads b/gcc/testsuite/gnat.dg/noreturn3.ads new file mode 100644 index 00000000000..d830a14910e --- /dev/null +++ b/gcc/testsuite/gnat.dg/noreturn3.ads @@ -0,0 +1,12 @@ +package Noreturn3 is + + Exc1 : Exception; + Exc2 : Exception; + Exc3 : Exception; + + type Enum is (One, Two, Three); + + procedure Raise_Error (E : Enum; ErrorMessage : String); + pragma No_Return (Raise_Error); + +end Noreturn3; diff --git a/gcc/testsuite/gnat.dg/not_null.adb b/gcc/testsuite/gnat.dg/not_null.adb index 7d3c63dc9cd..3cbd86c1633 100644 --- a/gcc/testsuite/gnat.dg/not_null.adb +++ b/gcc/testsuite/gnat.dg/not_null.adb @@ -11,10 +11,8 @@ procedure not_null is begin declare pragma Warnings (Off, "*null not allowed in null-excluding objects"); - pragma Warnings (Off, """Constraint_Error"" will be raised at run time"); package Inst_2 is new GPack (null); pragma Warnings (On, "*null not allowed in null-excluding objects"); - pragma Warnings (On, """Constraint_Error"" will be raised at run time"); begin null; end; diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp index 7b51fdd2f6f..7d0620faa0e 100644 --- a/gcc/testsuite/lib/lto.exp +++ b/gcc/testsuite/lib/lto.exp @@ -32,7 +32,7 @@ proc lto_prune_warns { text } { # Sun ld warns about common symbols with differing sizes. Unlike GNU ld # --warn-common (off by default), they cannot be disabled. - regsub -all "(^|\n)ld: warning: symbol `\[^\n\]*' has differing sizes:" $text "" text + regsub -all "(^|\n)ld: warning: symbol \[`'\]\[^\n\]*' has differing sizes:" $text "" text regsub -all "(^|\n)\[ \t\]*\[\(\]file \[^\n\]* value=\[^\n\]*; file \[^\n\]* value=\[^\n\]*\[)\];" $text "" text regsub -all "(^|\n)\[ \t\]*\[^\n\]* definition taken" $text "" text @@ -110,6 +110,7 @@ set lto_skip_list $LTO_SKIPS load_lib dg.exp load_lib gcc-dg.exp +load_lib gcc.exp # lto-obj -- compile to an object file # @@ -137,7 +138,13 @@ proc lto-obj { source dest optall optfile optstr xfaildata } { lappend options "additional_flags=$optall $optfile" set compiler_conditional_xfail_data $xfaildata - set comp_output [${tool}_target_compile "$source" "$dest" object $options] + + # Allow C source files to mix freely with other languages + if [ string match "*.c" $source ] then { + set comp_output [gcc_target_compile "$source" "$dest" object $options] + } else { + set comp_output [${tool}_target_compile "$source" "$dest" object $options] + } # Prune unimportant visibility warnings before checking output. set comp_output [lto_prune_warns $comp_output] ${tool}_check_compile "$testcase $dest assemble" $optstr $dest $comp_output diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 1a36127e95b..1cdc53b4983 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -992,6 +992,30 @@ proc check_vmx_hw_available { } { }] } +proc check_ppc_recip_hw_available { } { + return [check_cached_effective_target ppc_recip_hw_available { + # Some simulators may not support FRE/FRES/FRSQRTE/FRSQRTES + # For now, disable on Darwin + if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} { + expr 0 + } else { + set options "-mpowerpc-gfxopt -mpowerpc-gpopt -mpopcntb" + check_runtime_nocache ppc_recip_hw_available { + volatile double d_recip, d_rsqrt, d_four = 4.0; + volatile float f_recip, f_rsqrt, f_four = 4.0f; + int main() + { + asm volatile ("fres %0,%1" : "=f" (f_recip) : "f" (f_four)); + asm volatile ("fre %0,%1" : "=d" (d_recip) : "d" (d_four)); + asm volatile ("frsqrtes %0,%1" : "=f" (f_rsqrt) : "f" (f_four)); + asm volatile ("frsqrte %0,%1" : "=f" (d_rsqrt) : "d" (d_four)); + return 0; + } + } $options + } + }] +} + # Return 1 if the target supports executing AltiVec and Cell PPU # instructions, 0 otherwise. Cache the result. @@ -2972,6 +2996,8 @@ proc is-effective-target { arg } { } else { switch $arg { "vmx_hw" { set selected [check_vmx_hw_available] } + "vsx_hw" { set selected [check_vsx_hw_available] } + "ppc_recip_hw" { set selected [check_ppc_recip_hw_available] } "named_sections" { set selected [check_named_sections_available] } "gc_sections" { set selected [check_gc_sections_available] } "cxa_atexit" { set selected [check_cxa_atexit_available] } @@ -2991,6 +3017,8 @@ proc is-effective-target-keyword { arg } { # These have different names for their check_* procs. switch $arg { "vmx_hw" { return 1 } + "vsx_hw" { return 1 } + "ppc_recip_hw" { return 1 } "named_sections" { return 1 } "gc_sections" { return 1 } "cxa_atexit" { return 1 } @@ -3305,6 +3333,28 @@ proc check_effective_target_correct_iso_cpp_string_wchar_protos { } { }] } +# Return 1 if GNU as is used. + +proc check_effective_target_gas { } { + global use_gas_saved + global tool + + if {![info exists use_gas_saved]} { + # Check if the as used by gcc is GNU as. + set gcc_as [lindex [${tool}_target_compile "-print-prog-name=as" "" "none" ""] 0] + # Provide /dev/null as input, otherwise gas times out reading from + # stdin. + set status [remote_exec host "$gcc_as" "-v /dev/null"] + set as_output [lindex $status 1] + if { [ string first "GNU" $as_output ] >= 0 } { + set use_gas_saved 1 + } else { + set use_gas_saved 0 + } + } + return $use_gas_saved +} + # Return 1 if the compiler has been configure with link-time optimization # (LTO) support. |
