summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog1382
-rw-r--r--gcc/testsuite/c-c++-common/Wunused-var-12.c25
-rw-r--r--gcc/testsuite/c-c++-common/guality/pr43141.c (renamed from gcc/testsuite/gcc.dg/guality/pr43141.c)0
-rw-r--r--gcc/testsuite/c-c++-common/pr44832.c160
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-add.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mixed-div.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mixed-mul.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mixed-sub.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mul-minus-one.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mul-one.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-mul.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/complex-sign-sub.c2
-rw-r--r--gcc/testsuite/c-c++-common/torture/pr42834.c23
-rw-r--r--gcc/testsuite/c-c++-common/uninit-17.c4
-rw-r--r--gcc/testsuite/g++.dg/abi/covariant1.C13
-rw-r--r--gcc/testsuite/g++.dg/abi/covariant6.C34
-rw-r--r--gcc/testsuite/g++.dg/abi/mangle44.C19
-rw-r--r--gcc/testsuite/g++.dg/abi/noreturn1.C14
-rw-r--r--gcc/testsuite/g++.dg/abi/noreturn2.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype23.C5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/defaulted2.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit6.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit7.C37
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/implicit8.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/initlist41.C14
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/nullptr04.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/sfinae2.C39
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/union1.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/union2.C34
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/union3.C69
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/const2b.C1
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C13
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C37
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C41
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C2
-rw-r--r--gcc/testsuite/g++.dg/dg.exp3
-rw-r--r--gcc/testsuite/g++.dg/ext/altivec-17.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/altivec-2.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/pretty3.C19
-rw-r--r--gcc/testsuite/g++.dg/ext/vector14.C3
-rw-r--r--gcc/testsuite/g++.dg/gomp/sections-4.C2
-rw-r--r--gcc/testsuite/g++.dg/guality/guality.exp53
-rw-r--r--gcc/testsuite/g++.dg/guality/guality.h1
-rw-r--r--gcc/testsuite/g++.dg/guality/redeclaration1.C26
-rw-r--r--gcc/testsuite/g++.dg/inherit/covariant17.C43
-rw-r--r--gcc/testsuite/g++.dg/inherit/covariant7.C20
-rw-r--r--gcc/testsuite/g++.dg/lto/20100721-1_0.C9
-rw-r--r--gcc/testsuite/g++.dg/lto/20100722-1_0.C5
-rw-r--r--gcc/testsuite/g++.dg/opt/nrv16.C16
-rw-r--r--gcc/testsuite/g++.dg/other/i386-1.C14
-rw-r--r--gcc/testsuite/g++.dg/other/i386-2.C2
-rw-r--r--gcc/testsuite/g++.dg/other/i386-3.C2
-rw-r--r--gcc/testsuite/g++.dg/other/mmintrin.C1
-rw-r--r--gcc/testsuite/g++.dg/other/pr25632.C6
-rw-r--r--gcc/testsuite/g++.dg/other/pr40446.C13
-rw-r--r--gcc/testsuite/g++.dg/parse/error28.C2
-rw-r--r--gcc/testsuite/g++.dg/parse/template25.C14
-rw-r--r--gcc/testsuite/g++.dg/plugin/attribute_plugin.c3
-rw-r--r--gcc/testsuite/g++.dg/plugin/dumb_plugin.c1
-rw-r--r--gcc/testsuite/g++.dg/plugin/pragma_plugin.c1
-rw-r--r--gcc/testsuite/g++.dg/plugin/selfassign.c34
-rw-r--r--gcc/testsuite/g++.dg/template/crash100.C24
-rw-r--r--gcc/testsuite/g++.dg/template/crash101.C12
-rw-r--r--gcc/testsuite/g++.dg/template/dtor7.C2
-rw-r--r--gcc/testsuite/g++.dg/template/partial8.C4
-rw-r--r--gcc/testsuite/g++.dg/template/ptrmem17.C2
-rw-r--r--gcc/testsuite/g++.dg/template/ptrmem22.C29
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae19.C44
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae20.C45
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae21.C40
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae22.C39
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae23.C23
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae24.C26
-rw-r--r--gcc/testsuite/g++.dg/template/warn1.C4
-rw-r--r--gcc/testsuite/g++.dg/tls/static-1.C1
-rw-r--r--gcc/testsuite/g++.dg/tls/static-1a.cc1
-rw-r--r--gcc/testsuite/g++.dg/torture/20100702-1.C37
-rw-r--r--gcc/testsuite/g++.dg/torture/pr36745.C1
-rw-r--r--gcc/testsuite/g++.dg/torture/pr36960.C22
-rw-r--r--gcc/testsuite/g++.dg/torture/pr44809.C6
-rw-r--r--gcc/testsuite/g++.dg/torture/pr44813.C60
-rw-r--r--gcc/testsuite/g++.dg/torture/pr44826.C44
-rw-r--r--gcc/testsuite/g++.dg/torture/pr44900.C76
-rw-r--r--gcc/testsuite/g++.dg/torture/pr44915.C13
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/copyprop-1.C4
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr19952.C2
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr31146.C2
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr33604.C12
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr44706.C46
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr44914.C20
-rw-r--r--gcc/testsuite/g++.dg/vect/pr44861.cc34
-rw-r--r--gcc/testsuite/g++.dg/vect/vect.exp5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wshadow-7.C37
-rw-r--r--gcc/testsuite/g++.dg/warn/noeffect2.C6
-rw-r--r--gcc/testsuite/g++.dg/warn/volatile1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.ext/anon2.C1
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/misc6.C2
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20100609-1.c8
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44707.c14
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44784.c47
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44788.c8
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44831.c15
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44891.c26
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44941.c8
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44946.c27
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr44988.c13
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr45047.c9
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20100316-1.c24
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20100416-1.c40
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20100708-1.c29
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr40657.c23
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr44468.c60
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr44683.x6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr44828.c19
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr44852.c22
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr44942.c70
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr45017.c22
-rw-r--r--gcc/testsuite/gcc.dg/Wtrampolines.c57
-rw-r--r--gcc/testsuite/gcc.dg/attr-weak-hidden-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c9
-rw-r--r--gcc/testsuite/gcc.dg/compat/pr38736_main.c2
-rw-r--r--gcc/testsuite/gcc.dg/compat/union-m128-1_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1a_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-1b_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2a_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/compat/vector-2b_main.c14
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c1
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c19
-rw-r--r--gcc/testsuite/gcc.dg/float-range-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/float-range-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/float-range-5.c2
-rw-r--r--gcc/testsuite/gcc.dg/fold-overflow-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/format/ms_unnamed-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/format/unnamed-1.c3
-rw-r--r--gcc/testsuite/gcc.dg/gomp/sections-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr40281.c1
-rw-r--r--gcc/testsuite/gcc.dg/guality/asm-1.c25
-rw-r--r--gcc/testsuite/gcc.dg/guality/guality.exp1
-rw-r--r--gcc/testsuite/gcc.dg/guality/guality.h28
-rw-r--r--gcc/testsuite/gcc.dg/guality/nrv-1.c29
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr45003-1.c31
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr45003-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr45003-3.c31
-rw-r--r--gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c1
-rw-r--r--gcc/testsuite/gcc.dg/ipa/pure-const-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/lto/20090210_0.c2
-rw-r--r--gcc/testsuite/gcc.dg/lto/20090313_0.c1
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100518_0.c1
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100709-1_0.c7
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100709-1_1.c11
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-1_0.c22
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-1_1.c15
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-2_0.c23
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-2_1.c16
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-3_0.c24
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-3_1.c17
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100720-4_0.c15
-rw-r--r--gcc/testsuite/gcc.dg/lto/20100722-1_0.c6
-rw-r--r--gcc/testsuite/gcc.dg/plugin/ggcplug.c1
-rw-r--r--gcc/testsuite/gcc.dg/plugin/selfassign.c34
-rw-r--r--gcc/testsuite/gcc.dg/pr32370.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr34856.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr36584.c16
-rw-r--r--gcc/testsuite/gcc.dg/pr36902.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr36997.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr37544.c17
-rw-r--r--gcc/testsuite/gcc.dg/pr40550.c17
-rw-r--r--gcc/testsuite/gcc.dg/pr42427.c3
-rw-r--r--gcc/testsuite/gcc.dg/pr43058.c1
-rw-r--r--gcc/testsuite/gcc.dg/pr44290-1.c18
-rw-r--r--gcc/testsuite/gcc.dg/pr44290-2.c24
-rw-r--r--gcc/testsuite/gcc.dg/pr44838.c33
-rw-r--r--gcc/testsuite/gcc.dg/pr44971.c27
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_prof_global_array.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_prof_global_var.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_prof_local_array.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_prof_local_var.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_prof_single_str_global.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_prof_two_strs.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/w_ratio_cold_str.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_array_field.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_array_through_pointer.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_double_malloc.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_empty_str.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_escape_arg_to_local.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_escape_return.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_escape_str_init.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_array.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_pointer.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_escape_substr_value.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_global_array.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_global_var.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_local_array.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_local_var.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_malloc_size_var.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_single_str_global.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_single_str_local.c2
-rw-r--r--gcc/testsuite/gcc.dg/struct/wo_prof_two_strs.c2
-rw-r--r--gcc/testsuite/gcc.dg/tls/emutls-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/opt-11.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/opt-12.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/pr24428-2.c1
-rw-r--r--gcc/testsuite/gcc.dg/tls/pr24428.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/builtin-cproj-1.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr16104-1.c14
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr35771-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr35771-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr35771-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr35771.h12
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr36891.c1
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr44695.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr44806.c90
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr44977.c41
-rw-r--r--gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c12
-rw-r--r--gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c12
-rw-r--r--gcc/testsuite/gcc.dg/torture/stackalign/push-1.c17
-rw-r--r--gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c13
-rw-r--r--gcc/testsuite/gcc.dg/transparent-union-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/transparent-union-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/stringop-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/20030807-7.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/foldaddr-2.c13
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/foldaddr-3.c28
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-10.c11
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c11
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ifc-6.c15
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ifc-pr44710.c44
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c37
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr17141-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr21463.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-1.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pta-ptrarith-2.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-21.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-23.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-25.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-26.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c11
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-1.c3
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-13.c3
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-14.c3
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-7.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ssa-sccvn-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/struct-aliasing-2.c5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp50.c36
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp51.c58
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp52.c16
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp53.c24
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31d.c51
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-68d.c50
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr35821-altivec.c24
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr35821-spu.c22
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-perm-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-perm-2.c10
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-perm-3.c12
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-perm-4.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/tree-vect.h5
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-109.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-42.c5
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-56.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-60.c6
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-93.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-96.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c21
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c21
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-peel-1.c51
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-peel-2.c52
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-peel-3.c55
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-peel-4.c47
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-6.c3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect.exp9
-rw-r--r--gcc/testsuite/gcc.dg/volatile2.c7
-rw-r--r--gcc/testsuite/gcc.target/arm/interrupt-1.c23
-rw-r--r--gcc/testsuite/gcc.target/arm/interrupt-2.c26
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vadds64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vaddu64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vands64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vandu64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vbics64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vbicu64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c22
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c22
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c22
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c22
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-veors64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-veoru64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vmla-1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vmls-1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c22
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c23
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vorns64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vornu64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vorrs64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vorru64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vsubs64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon-vsubu64.c21
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vadds64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vaddu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vands64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vandu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vbics64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vbicu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/veors64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/veoru64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vorns64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vornu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vorrs64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vorru64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vsubs64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/neon/vsubu64.c1
-rw-r--r--gcc/testsuite/gcc.target/arm/pr39839.c24
-rw-r--r--gcc/testsuite/gcc.target/arm/pr40657-1.c13
-rw-r--r--gcc/testsuite/gcc.target/arm/pr40657-2.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/pr42172-1.c19
-rw-r--r--gcc/testsuite/gcc.target/arm/pr42235.c11
-rw-r--r--gcc/testsuite/gcc.target/arm/pr42505.c23
-rw-r--r--gcc/testsuite/gcc.target/arm/pr42835.c12
-rw-r--r--gcc/testsuite/gcc.target/arm/pr43698.c38
-rw-r--r--gcc/testsuite/gcc.target/arm/pr44788.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/20020523.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/aes-avx-check.h3
-rw-r--r--gcc/testsuite/gcc.target/i386/all_one_m128i.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-check.h2
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-cmpsd-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-cmpss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vcmppd-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vcmppd-256-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vcmpps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vcmpps-256-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vcmpsd-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx-vcmpss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/brokensqrt.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/f16c-check.h30
-rw-r--r--gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/fpcvt-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/fpcvt-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/fpcvt-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/funcspec-9.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/i386.exp3
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-12.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-7.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/incoming-8.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp14
-rw-r--r--gcc/testsuite/gcc.target/i386/ms_hook_prologue.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/opt-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/opt-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ordcmp-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pclmul-avx-check.h3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr13685.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr17692.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr18614-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr22152.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr23570.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr23575.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr24306.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr26449-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr26600.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr27790.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr28839.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr30970.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32065-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32280.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32661.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32708-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32961.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr33329.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr35714.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr35767-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr36222-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr36992-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr37101.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr37275.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr37434-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr37434-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr37434-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr37434-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39162.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39315-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39315-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39315-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39315-4.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39315-check.c3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr39496.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr40957.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr42542-3a.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr44942.c44
-rw-r--r--gcc/testsuite/gcc.target/i386/push-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/quad-sse.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/rdfsbase-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/rdfsbase-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/rdgsbase-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/rdgsbase-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/rdrand-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/rdrand-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/rdrand-3.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/reload-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-12.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-13.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-14.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-15.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-19.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-20.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-22.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-23.c4
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-7.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-9.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-addps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-addss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-andnps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-andps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-check.h5
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cmpss-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-comiss-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-divps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-divss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-maxps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-maxss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-minps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-minss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movaps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movaps-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movhlps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movhps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movhps-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movlhps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movmskps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movntps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movss-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movups-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-movups-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-mulps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-mulss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-orps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-os-support.h55
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-rcpps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-recip-vec.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-recip.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-set-ps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-subps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-subss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-vect-types.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-xorps-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse2-check.h3
-rw-r--r--gcc/testsuite/gcc.target/i386/sse2-cmpsd-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse2-unpack-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sse3-check.h4
-rw-r--r--gcc/testsuite/gcc.target/i386/ssefn-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssefn-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssefp-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssefp-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sseregparm-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sseregparm-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sseregparm-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sseregparm-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/sseregparm-7.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssetype-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssetype-2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssetype-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssetype-4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/ssetype-5.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/stackalign/return-3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/unordcmp-1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vcvtph2ps-1.c28
-rw-r--r--gcc/testsuite/gcc.target/i386/vcvtph2ps-2.c36
-rw-r--r--gcc/testsuite/gcc.target/i386/vcvtph2ps-3.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/vcvtps2ph-1.c32
-rw-r--r--gcc/testsuite/gcc.target/i386/vcvtps2ph-2.c36
-rw-r--r--gcc/testsuite/gcc.target/i386/vcvtps2ph-3.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/vecinit-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vecinit-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vecinit-3.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vecinit-4.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vecinit-5.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vecinit-6.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize1.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize3.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize4.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize7.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vectorize8.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v2df.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v2di.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c7
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v4si-1.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v4si-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/wrfsbase-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/wrfsbase-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/wrgsbase-1.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/wrgsbase-2.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/xorps-sse2.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/xorps.c1
-rw-r--r--gcc/testsuite/gcc.target/m68k/pr45015.c26
-rw-r--r--gcc/testsuite/gcc.target/mips/cache-1.c2
-rw-r--r--gcc/testsuite/gcc.target/mips/mips.exp16
-rw-r--r--gcc/testsuite/gcc.target/mips/mips16-attributes-4.c17
-rw-r--r--gcc/testsuite/gcc.target/powerpc/altivec-volatile.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/block-move-1.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/block-move-2.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/recip-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/recip-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/recip-3.c2
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s28
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/asm-support.S28
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S28
-rw-r--r--gcc/testsuite/gcc.target/x86_64/abi/avx/avx-check.h2
-rw-r--r--gcc/testsuite/gfortran.dg/aliasing_dummy_5.f9055
-rw-r--r--gcc/testsuite/gfortran.dg/array_memcpy_3.f902
-rw-r--r--gcc/testsuite/gfortran.dg/array_memcpy_4.f902
-rw-r--r--gcc/testsuite/gfortran.dg/c_loc_tests_15.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/c_sizeof_1.f9012
-rw-r--r--gcc/testsuite/gfortran.dg/char4_iunit_1.f0332
-rw-r--r--gcc/testsuite/gfortran.dg/char4_iunit_2.f0347
-rw-r--r--gcc/testsuite/gfortran.dg/char_bounds_check_fail_1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/class_24.f0322
-rw-r--r--gcc/testsuite/gfortran.dg/class_defined_operator_1.f03102
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_10.f9020
-rw-r--r--gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f902
-rw-r--r--gcc/testsuite/gfortran.dg/dim_range_1.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/dynamic_dispatch_1.f037
-rw-r--r--gcc/testsuite/gfortran.dg/dynamic_dispatch_2.f0310
-rw-r--r--gcc/testsuite/gfortran.dg/dynamic_dispatch_3.f037
-rw-r--r--gcc/testsuite/gfortran.dg/endfile_2.f902
-rw-r--r--gcc/testsuite/gfortran.dg/exit_1.f0850
-rw-r--r--gcc/testsuite/gfortran.dg/exit_2.f0831
-rw-r--r--gcc/testsuite/gfortran.dg/ftell_3.f9030
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr44847.f9086
-rw-r--r--gcc/testsuite/gfortran.dg/graphite/pr42185.f902
-rw-r--r--gcc/testsuite/gfortran.dg/initialization_20.f902
-rw-r--r--gcc/testsuite/gfortran.dg/initialization_24.f902
-rw-r--r--gcc/testsuite/gfortran.dg/intent_out_5.f902
-rw-r--r--gcc/testsuite/gfortran.dg/ltrans-7.f902
-rw-r--r--gcc/testsuite/gfortran.dg/minmaxloc_4.f906
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_36.f902
-rw-r--r--gcc/testsuite/gfortran.dg/parameter_array_init_6.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/pr44882.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/runtime_warning_1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/select_char_2.f9045
-rw-r--r--gcc/testsuite/gfortran.dg/select_char_3.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/storage_size_1.f0831
-rw-r--r--gcc/testsuite/gfortran.dg/storage_size_2.f0827
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_call_16.f0335
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_generic_6.f0369
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_generic_7.f0328
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_generic_8.f0329
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_generic_9.f0363
-rw-r--r--gcc/testsuite/gfortran.dg/use_iso_c_binding.f904
-rw-r--r--gcc/testsuite/gfortran.dg/use_rename_6.f9040
-rw-r--r--gcc/testsuite/gfortran.dg/vect/vect.exp5
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/pr40421.f9015
-rw-r--r--gcc/testsuite/gnat.dg/aggr15.adb18
-rw-r--r--gcc/testsuite/gnat.dg/aggr15.ads15
-rw-r--r--gcc/testsuite/gnat.dg/atomic3.adb24
-rw-r--r--gcc/testsuite/gnat.dg/cond_expr1.adb7
-rw-r--r--gcc/testsuite/gnat.dg/loop_optimization7.adb1
-rw-r--r--gcc/testsuite/gnat.dg/modular3.adb32
-rw-r--r--gcc/testsuite/gnat.dg/modular3_pkg.ads11
-rw-r--r--gcc/testsuite/gnat.dg/noreturn1.adb2
-rw-r--r--gcc/testsuite/gnat.dg/specs/small_alignment.ads2
-rw-r--r--gcc/testsuite/gnat.dg/sse_nolib.adb1
-rw-r--r--gcc/testsuite/gnat.dg/unchecked_convert5b.adb22
-rw-r--r--gcc/testsuite/gnat.dg/unchecked_convert6.adb22
-rw-r--r--gcc/testsuite/gnat.dg/unchecked_convert6b.adb22
-rw-r--r--gcc/testsuite/lib/fortran-torture.exp3
-rw-r--r--gcc/testsuite/lib/objc-torture.exp33
-rw-r--r--gcc/testsuite/lib/plugin-support.exp2
-rw-r--r--gcc/testsuite/lib/scanasm.exp37
-rw-r--r--gcc/testsuite/lib/target-supports-dg.exp8
-rw-r--r--gcc/testsuite/lib/target-supports.exp153
-rw-r--r--gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm24
-rw-r--r--gcc/testsuite/obj-c++.dg/encode-2.mm8
-rw-r--r--gcc/testsuite/obj-c++.dg/encode-3.mm4
-rw-r--r--gcc/testsuite/obj-c++.dg/lto/lto.exp84
-rw-r--r--gcc/testsuite/obj-c++.dg/lto/trivial-1_0.mm43
-rw-r--r--gcc/testsuite/obj-c++.dg/tls/static-1.mm1
-rw-r--r--gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm1
-rw-r--r--gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm3
-rw-r--r--gcc/testsuite/obj-c++.dg/torture/tls/thr-init-3.mm1
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/Object1.h151
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/next-abi.h9
-rw-r--r--gcc/testsuite/objc.dg/image-info.m1
-rw-r--r--gcc/testsuite/objc.dg/lto/lto.exp84
-rw-r--r--gcc/testsuite/objc.dg/lto/trivial-1_0.m37
-rw-r--r--gcc/testsuite/objc.dg/symtab-1.m7
-rw-r--r--gcc/testsuite/objc.dg/torture/tls/thr-init-2.m1
-rw-r--r--gcc/testsuite/objc.dg/torture/tls/thr-init-3.m1
-rw-r--r--gcc/testsuite/objc.dg/torture/tls/thr-init.m1
-rw-r--r--gcc/testsuite/objc/execute/forward-1.m5
655 files changed, 8225 insertions, 918 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d9e9a4025f9..f6a20dc290a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,1385 @@
+2010-07-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.target/i386/aes-avx-check.h (main): Require OSXSAVE for
+ AVX support.
+ * gcc.target/i386/pclmul-avx-check.h (main): Likewise.
+ * gcc.target/x86_64/abi/avx/avx-check.h (main): Likewise.
+
+2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lib/target-supports.exp (add_options_for_tls): New proc.
+ * g++.dg/tls/static-1.C: Use dg-add-options tls.
+ * g++.dg/tls/static-1a.cc: Likewise.
+ * gcc.dg/tls/emutls-1.c: Likewise.
+ * gcc.dg/tls/opt-11.c: Likewise.
+ * gcc.dg/tls/opt-12.c: Likewise.
+ * gcc.dg/tls/pr24428-2.c: Likewise.
+ * gcc.dg/tls/pr24428.c: Likewise.
+ * obj-c++.dg/tls/static-1.mm: Likewise.
+ * obj-c++.dg/torture/tls/thr-init-1.mm: Likewise.
+ * obj-c++.dg/torture/tls/thr-init-2.mm: Likewise.
+ * obj-c++.dg/torture/tls/thr-init-3.mm: Likewise.
+ * objc.dg/torture/tls/thr-init-2.m: Likewise.
+ * objc.dg/torture/tls/thr-init-3.m: Likewise.
+ * objc.dg/torture/tls/thr-init.m: Likewise.
+ * gcc.dg/lto/20090210_0.c: Add -pthread for *-*-solaris2.[89].
+
+2010-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.dg/tree-ssa/loadpre6.c: Cleanup fre dump file.
+ * gcc.dg/ipa/ipa-sra-6.c: Cleanup eipa_sra dump file.
+ * gcc.dg/ipa/pure-const-2.c: Cleanup local-pure-const1 and
+ optimized dump files.
+
+2010-07-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/45047
+ * gcc.c-torture/compile/pr45047.c: New test.
+
+2010-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.dg/float-range-3.c: Use "dg-do compile" dejagnu directive
+ instead of dg-compile.
+ * gcc.dg/float-range-4.c: Ditto.
+ * gcc.dg/float-range-5.c: Ditto.
+ * gcc.dg/fold-overflow-1.c: Ditto.
+ * gcc.dg/gomp/sections-4.c: Ditto.
+ * gcc.dg/transparent-union-1.c: Ditto.
+ * gcc.dg/transparent-union-2.c: Ditto.
+ * gcc.target/i386/pr39315-check.c: Ditto.
+ * g++.dg/gomp/sections-4.C: Ditto.
+ * g++.dg/template/dtor7.C: Ditto.
+ * g++.dg/tree-ssa/pr19952.C: Ditto.
+ * gfortran.dg/derived_constructor_comps_3.f90: Ditto.
+ * gfortran.dg/graphite/pr42185.f90: Ditto.
+ * gfortran.dg/namelist_36.f90: Ditto.
+ * gnat.dg/noreturn1.adb: Ditto.
+ * gnat.dg/specs/small_alignment.ads: Ditto.
+
+2010-07-23 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/44915
+ * g++.dg/torture/pr44915.C: New test.
+
+2010-07-23 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/44914
+ * g++.dg/tree-ssa/pr44914.C: New test.
+
+2010-07-23 Jie Zhang <jie@codesourcery.com>
+
+ PR target/44290
+ * gcc.dg/pr44290-1.c: New test.
+ * gcc.dg/pr44290-2.c: New test.
+
+2010-07-23 Jason Merrill <jason@redhat.com>
+
+ PR c++/45008
+ * g++.dg/abi/mangle44.C: New.
+
+2010-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/*.c: Do not require sse{,2,3,4} effective target
+ for compile-time only tests.
+ * gcc.target/i386/pr39315-2.c: Remove redundant sse2 effective
+ target check.
+ * gcc.target/i386/pr39315-4.c: Ditto.
+ * gcc.target/i386/vperm-v4si-1.c: Remove sse_runtime effective
+ target check. Include sse-os-support.h.
+ (main): Call check_isa and sse_os_support.
+ * gcc.target/i386/vperm-v4sf-1.c: Ditto.
+ * gcc.target/i386/vperm-v4si-2.c (main): Call check_isa.
+ * gcc.target/i386/vperm-v4sf-2.c: Ditto.
+ * gcc.target/i386/vperm-v2di.c: Remove sse2_runtime effective
+ target check. Include sse-os-support.h.
+ (main): Call check_isa and sse_os_support.
+ * gcc.target/i386/vperm-v2df.c: Ditto.
+
+2010-07-23 Uros Bizjak <ubizjak@gmail.com>
+
+ * lib/target-supports.exp (check_avx_hw_available): New procedure.
+ (check_effective_target_avx_runtime): New procedure.
+ (check_effective_target_sse2_runtime): Add check_effective_target_sse2.
+ (check_effective_target_sse_runtime): Add check_effective_target_sse.
+
+ * gcc.dg/compat/pr38736_main.c: Use avx_runtime effective target.
+ * gcc.dg/compat/vector-1b_main.c: Ditto. Remove cpuid.h include
+ and __get_cpuid test.
+ * gcc.dg/compat/vector-2b_main.c: Ditto.
+
+ * gcc.target/i386/avx-check.h (main): Also check bit_OSXSAVE.
+
+ * gcc.dg/20020418-1.c: Do not require sse{,2} effective target
+ for compile-time only test.
+ * gcc.dg/pr32716.c: Ditto.
+ * gcc.dg/pr34856.c: Ditto.
+ * gcc.dg/pr36997.c: Ditto.
+ * gcc.dg/prefetch-loop-arrays-1.c: Ditto.
+ * gfortran.dg/pr28158.f90: Ditto.
+ * gfortran.dg/pr30667.f: Ditto.
+
+ * gcc.dg/vect/vect.exp: Use check_effective_target_sse2_runtime for
+ i?86-*-* and x86_64-*-* targets to disable execution on targets
+ without sse2 runtime support.
+ * g++.dg/vect/vect.exp: Ditto.
+ * gfortran.dg/vect/vect.exp: Ditto.
+
+ * gcc.dg/pr36584.c: Remove redundant sse{,2} effective target check.
+ * gcc.dg/pr37544.c: Ditto.
+ * gcc.dg/pr40550.c: Ditto.
+ * gcc.dg/compat/union-m128-1_main.c: Ditto.
+ * gcc.dg/compat/vector-1a_main.c: Ditto.
+ * gcc.dg/compat/vector-2a_main.c: Ditto.
+ * gcc.dg/torture/pr16104-1.c: Ditto.
+ * gcc.dg/torture/pr35771-1.c: Ditto.
+ * gcc.dg/torture/pr35771-2.c: Ditto.
+ * gcc.dg/torture/pr35771-3.c: Ditto.
+ * gcc.dg/torture/stackalign/alloca-2.c: Ditto.
+ * gcc.dg/torture/stackalign/alloca-3.c: Ditto.
+ * gcc.dg/torture/stackalign/push-1.c: Ditto.
+ * gcc.dg/torture/stackalign/vararg-3.c: Ditto.
+ * g++.dg/other/i386-1.C: Ditto.
+ * g++.dg/other/pr40446.C: Ditto.
+
+2010-07-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.dg/pr43058.c: Use dg-timeout-factor 4.
+
+2010-07-23 Daniel Kraft <d@domob.eu>
+
+ PR fortran/44709
+ * gfortran.dg/exit_1.f08: New test.
+ * gfortran.dg/exit_2.f08: New test.
+
+2010-07-22 Sandra Loosemore <sandra@codesourcery.com>
+
+ PR tree-optimization/39839
+ * gcc.target/arm/pr39839.c: New test case.
+
+2010-07-22 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/unchecked_convert5b.adb: New test.
+ * gnat.dg/unchecked_convert6.adb: Likewise.
+ * gnat.dg/unchecked_convert6b.adb: Likewise.
+
+2010-07-22 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/aggr15.ad[sb]: New test.
+
+2010-07-22 Dodji Seketeli <dodji@redhat.com>
+
+ PR debug/45024
+ * g++.dg/debug/dwarf2/nested-2.C: New test case.
+
+2010-07-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gcc.dg/lto/20100722-1_0.c: Replace dg-require-lto-plugin
+ with dg-require-linker-plugin.
+
+2010-07-22 Richard Guenther <rguenther@suse.de>
+
+ PR lto/43850
+ * g++.dg/lto/20100722-1_0.C: New testcase.
+
+2010-07-22 Richard Guenther <rguenther@suse.de>
+
+ PR lto/42451
+ * gcc.dg/lto/20100720-3_0.c: New testcase.
+ * gcc.dg/lto/20100720-3_1.c: Likewise.
+
+2010-07-22 Richard Guenther <rguenther@suse.de>
+
+ * lib/target-supports-dg.exp (dg-require-linker-plugin): New proc.
+ * lib/target-supports.exp (check_linker_plugin_available): Likewise.
+
+ PR lto/43373
+ * gcc.dg/lto/20100722-1_0.c: New testcase.
+
+2010-07-22 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/44891
+ * testsuite/gcc.c-torture/compile/pr44891.c: New test.
+
+2010-07-22 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/45017
+ * gcc.c-torture/execute/pr45017.c: New testcase.
+
+2010-07-22 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/45019
+ * gfortran.dg/aliasing_dummy_5.f90: New.
+
+2010-07-22 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+
+ PR target/43698
+ * gcc.target/arm/pr43698.c: New test.
+
+2010-07-21 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/44929
+ * Revert my commit r162325 for this PR.
+
+2010-07-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/45015
+ * gcc.target/m68k/pr45015.c: New test.
+
+2010-07-21 Jeffrey Yasskin <jyasskin@google.com>
+
+ PR c++/44641
+ * lib/scanasm.exp (dg-function-on-line): Fix regex for IA64's
+ comments.
+
+2010-07-21 Richard Guenther <rguenther@suse.de>
+
+ PR lto/45018
+ * g++.dg/lto/20100721-1_0.C: New testcase.
+
+2010-07-21 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/44900
+ * g++.dg/torture/pr44900.C: New test.
+
+2010-07-21 Bernd Schmidt <bernds@codesourcery.com>
+
+ PR middle-end/44738
+ * c-c++-common/uninit-17.c: Correct expected error.
+
+2010-07-21 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/guality/asm-1.c: New test.
+
+ PR debug/45003
+ * gcc.dg/guality/pr45003-2.c: New test.
+ * gcc.dg/guality/pr45003-3.c: New test.
+
+2010-07-20 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/44697
+ * gfortran.dg/ftell_3.f90: Take care of cr-lf record endings.
+
+2010-07-20 Jeffrey Yasskin <jyasskin@google.com>
+
+ * lib/scanasm.exp (dg-function-on-line): Test that a function is
+ defined on the current line.
+ * g++.dg/debug/dwarf2/lineno-simple1.C: New. Line number sanity test.
+ * g++.dg/debug/dwarf2/pr44641.C: New.
+
+2010-07-20 Nathan Froyd <froydnj@codesourcery.com>
+
+ * gcc.target/powerpc/block-move-1.c: New test.
+ * gcc.target/powerpc/block-move-2.c: New test.
+
+2010-07-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/44967
+ * g++.dg/cpp0x/sfinae2.C: New.
+
+2010-07-20 Richard Guenther <rguenther@suse.de>
+
+ PR lto/42696
+ * gcc.dg/lto/20100720-4_0.c: New testcase.
+
+2010-07-20 Richard Guenther <rguenther@suse.de>
+
+ PR lto/43221
+ * gcc.dg/lto/20100720-2_0.c: New testcase.
+ * gcc.dg/lto/20100720-2_1.c: Likewise.
+
+2010-07-20 Richard Guenther <rguenther@suse.de>
+
+ PR lto/43208
+ * gcc.dg/lto/20100720-1_0.c: New testcase.
+ * gcc.dg/lto/20100720-1_1.c: Likewise.
+
+2010-07-20 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/45003
+ * gcc.dg/guality/pr45003-1.c: New test.
+
+2010-07-20 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44977
+ * gcc.dg/torture/pr44977.c: New testcase.
+
+2010-07-20 Bingfeng Mei <bmei@broadcom.com>
+
+ * gcc.dg/lto/20090313_0.c: Use dg-require-effective-target
+ sync_char_short
+
+2010-07-20 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/44971
+ PR middle-end/44988
+ * gcc.dg/pr44971.c: New testcase.
+ * gcc.c-torture/compile/pr44988.c: Likewise.
+
+2010-07-19 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/44929
+ * gfortran.dg/allocate_with_typespec.f90: New test.
+ * gfortran.dg/allocate_derived_1.f90: Update error message.
+
+2010-07-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/44996
+ * g++.dg/cpp0x/decltype23.C: New.
+
+2010-07-19 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/42385
+ * gfortran.dg/class_defined_operator_1.f03 : New test.
+
+2010-07-19 Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.dg/vect/slp-perm-1.c (main): Make sure loops aren't vectorized.
+ * gcc.dg/vect/slp-perm-2.c (main): Likewise.
+ * gcc.dg/vect/slp-perm-3.c (main): Likewise. Fix loop limit.
+ * gcc.dg/vect/slp-perm-4.c (main): Fix loop limit.
+
+2010-07-19 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/44941
+ * gcc.c-torture/compile/pr44941.c: New testcase.
+
+2010-07-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/44969
+ * g++.dg/template/sfinae24.C: New.
+
+2010-07-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR fortran/44353
+ * gfortran.dg/data_implied_do_2.f90: Removed.
+
+2010-07-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/44969
+ * g++.dg/template/sfinae23.C: New.
+
+2010-07-19 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lib/target-supports.exp (check_sse_os_support_available): New
+ proc.
+ (check_sse_hw_available): New proc.
+ (check_effective_target_sse_runtime): New proc.
+ (check_effective_target_sse2_runtime): New proc.
+ * lib/fortran-torture.exp (get-fortran-torture-options): Only add
+ -msse2 if check_sse_os_support_available.
+ * g++.dg/vect/vect.exp: Only run -msse2 tests if
+ check_sse_os_support_available.
+ * gcc.dg/vect/vect.exp: Likewise.
+ * gfortran.dg/vect/vect.exp: Likewise.
+ * gcc.target/i386/sol2-check: Renamed to ...
+ * gcc.target/i386/sse-os-support.h: ... this.
+ (sol2_check): Renamed to ...
+ (sse_os_support): ... this.
+ Only test movss with xmm registers.
+ * gcc.target/i386/sse-check.h: Reflect new header and function names.
+ Removed ILL_INSN, ILL_INSN_LEN.
+ * gcc.target/i386/sse2-check.h: Likewise.
+ * gcc.target/i386/sse3-check.h: Likewise.
+ * gcc.dg/pr40550.c: Use dg-require-effective-target sse_runtime.
+ Removed cpuid.h, __get_cpuid test.
+ * g++.dg/other/i386-1.C: Use dg-require-effective-target sse2_runtime.
+ Removed cpuid.h, __get_cpuid test.
+ * g++.dg/other/pr40446.C: Likewise.
+ * gcc.dg/compat/union-m128-1_main.c: Likewise.
+ * gcc.dg/compat/vector-1a_main.c: Likewise.
+ * gcc.dg/compat/vector-2a_main.c: Likewise.
+ * gcc.dg/pr36584.c: Likewise.
+ * gcc.dg/pr37544.c: Likewise.
+ * gcc.dg/torture/pr16104-1.c: Likewise.
+ * gcc.dg/torture/stackalign/alloca-2.c: Likewise.
+ * gcc.dg/torture/stackalign/alloca-3.c: Likewise.
+ * gcc.dg/torture/stackalign/push-1.c: Likewise.
+ * gcc.dg/torture/stackalign/vararg-3.c: Likewise.
+ * gcc.dg/torture/pr35771.h: Removed cpuid.h, __get_cpuid test.
+ * gcc.dg/torture/pr35771-1.c: Use dg-require-effective-target
+ sse2_runtime.
+ * gcc.dg/torture/pr35771-2.c: Likewise.
+ * gcc.dg/torture/pr35771-3.c: Likewise.
+ * gcc.target/i386/pr39315-2.c: Likewise.
+ * gcc.target/i386/pr39315-4.c: Likewise.
+ * gcc.target/i386/vperm-v2df.c: Likewise.
+ * gcc.target/i386/vperm-v2di.c: Likewise.
+ * gcc.target/i386/vperm-v4si-1.c: Likewise.
+ * gcc.target/i386/vperm-v4sf-1.c: Use dg-require-effective-target
+ sse_runtime.
+
+2010-07-18 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/44353
+ * gfortran.dg/data_implied_do_2.f90: New test.
+
+2010-07-18 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gcc.target/mips/cache-1.c: Allow 0 instead of 0x0.
+
+2010-07-18 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gcc.target/mips/mips.exp (mips_option_groups): Add -mflip-mips16
+ to the "mips16" group.
+ (mips_using_mips16_p): New procedure.
+ (mips-dg-options): Use it.
+
+2010-07-18 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * gcc.target/mips/mips16-attributes-4.c: New test.
+
+2010-07-17 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR testsuite/44418
+ * gcc.target/powerpc/recip-1.c: Do not run for powerpc*-apple-darwin*
+ * gcc.target/powerpc/recip-2.c: Ditto.
+ * gcc.target/powerpc/recip-3.c: Ditto.
+
+2010-07-17 Bernd Schmidt <bernds@codesourcery.com>
+
+ * gcc.target/arm/pr42235.c: New test.
+
+2010-07-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/32505
+ * g++.dg/template/partial8.C: New.
+
+2010-07-16 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/guality/guality.exp: Run also c-c++-common/guality/ tests.
+ * gcc.dg/guality/guality.h: Include unistd.h. Make the header usable
+ in C++.
+ (gualcvt): New overloaded inline.
+ (GUALCVT): Use it for C++.
+ * g++.dg/guality/guality.exp: New.
+ * g++.dg/guality/guality.h: New.
+ * g++.dg/guality/redeclaration1.C: New test.
+ * g++.dg/dg.exp: Prune also guality/* tests.
+ * gcc.dg/guality/pr43141.c: Moved to...
+ * c-c++-common/guality/pr43141.c: ... here.
+
+2010-07-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/37077
+ * gfortran.dg/char4_iunit_2.f03: New test.
+
+2010-07-16 Iain Sandoe <iains@gcc.gnu.org>
+
+ * lib/plugin-support.exp (plugin-test-execute):
+ Add ${gcc_objdir}/intl to includes.
+
+2010-07-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/44942
+ * gcc.c-torture/execute/pr44942.c: New test.
+ * gcc.target/i386/pr44942.c: New test.
+
+2010-07-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/44909
+ * g++.dg/cpp0x/implicit7.C: New.
+ * g++.dg/cpp0x/implicit8.C: New.
+
+2010-07-15 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ Disable float tests for __SPU__ targets due to lack of signed zero:
+ * c-c++-common/torture/complex-sign-add.c (check_add_float).
+ * c-c++-common/torture/complex-sign-sub.c (check_sub_float).
+ * c-c++-common/torture/complex-sign-mul.c (check_mul_float).
+ * c-c++-common/torture/complex-sign-mul-one.c (check_mul_float).
+ * c-c++-common/torture/complex-sign-mul-minus-one.c (check_mul_float).
+ * c-c++-common/torture/complex-sign-mixed-add.c (check_add_float).
+ * c-c++-common/torture/complex-sign-mixed-sub.c (check_sub_float).
+ * c-c++-common/torture/complex-sign-mixed-mul.c (check_mul_float).
+ * c-c++-common/torture/complex-sign-mixed-div.c (check_div_float).
+
+2010-07-15 Jakub Jelinek <jakub@redhat.com>
+
+ * gfortran.dg/select_char_2.f90: New test.
+
+2010-07-15 Nathan Froyd <froydnj@codesourcery.com>
+
+ * g++.dg/plugin/attribute_plugin.c: Carefully replace TREE_CHAIN
+ with DECL_CHAIN.
+
+2010-07-15 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44936
+ * gfortran.dg/typebound_generic_9.f03: New.
+
+2010-07-15 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44946
+ * gcc.c-torture/compile/pr44946.c: New testcase.
+
+2010-07-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/40206
+ * gfortran.dg/select_char_3.f90: New test.
+
+2010-07-15 Magnus Granberg <zorry@gentoo.org>
+ Kevin F. Quinn <kevquinn@gentoo.org>
+
+ * gcc.dg/Wtrampolines.c: New.
+
+2010-07-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/44934
+ * gfortran.dg/endfile_2.f90: Fix to unformatted file type.
+
+2010-07-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/44810
+ * g++.dg/torture/pr36745.C: Avoid undefined behavior.
+
+ Implement C++0x unrestricted unions (N2544)
+ * g++.dg/cpp0x/union1.C: New.
+ * g++.dg/cpp0x/union2.C: New.
+ * g++.dg/cpp0x/union3.C: New.
+ * g++.dg/cpp0x/defaulted2.C: Adjust.
+ * g++.old-deja/g++.bugs/900121_02.C: Adjust.
+ * g++.old-deja/g++.ext/anon2.C: Adjust.
+ * g++.old-deja/g++.mike/misc6.C: Adjust.
+
+2010-07-14 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44925
+ * gfortran.dg/c_loc_tests_15.f90: New.
+
+2010-07-13 Jason Merrill <jason@redhat.com>
+
+ PR c++/44909
+ * g++.dg/cpp0x/implicit6.C: New.
+
+2010-07-13 Jason Merrill <jason@redhat.com>
+
+ PR c++/44540
+ * g++.dg/abi/noreturn1.C: New.
+ * g++.dg/abi/noreturn2.C: New.
+
+2010-07-13 Joern Rennecke <joern.rennecke@embecosm.com>
+
+ PR other/44874
+ PR debug/44832
+ * c-c++-common/pr44832.c: New test.
+
+2010-07-13 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR objc/44488
+ * lib/objc-torture.exp (objc-set-runtime-options): Base runtime list
+ on the target. Make sure that we can assemble the emitted asm when
+ the test type is 'compile'.
+
+2010-07-13 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/36960
+ * g++.dg/torture/pr36960.C: New testcase.
+
+2010-07-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/44908
+ * g++.dg/template/sfinae21.C: New.
+ * g++.dg/template/sfinae22.C: Likewise.
+
+2010-07-16 Jack Howarth <howarth@bromo.med.uc.edu>
+
+ PR testsuite/42843
+ * gcc.dg/plugin/selfassign.c: Include diagnostic.h.
+ * gcc.dg/plugin/ggcplug.c: Likewise.
+ * g++.dg/plugin/selfassign.c: Likewise.
+ * g++.dg/plugin/attribute_plugin.c: Likewise.
+ * g++.dg/plugin/dumb_plugin.c: Likewise.
+ * g++.dg/plugin/pragma_plugin.c: Likewise.
+
+2010-07-13 Kaz Kojima <kkojima@gcc.gnu.org>
+
+ * gcc.c-torture/execute/pr44683.x: New.
+ * gcc.dg/torture/builtin-cproj-1.c: Add dg-add-options ieee.
+
+2010-07-13 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44434
+ PR fortran/44565
+ PR fortran/43945
+ PR fortran/44869
+ * gfortran.dg/dynamic_dispatch_1.f03: Fixed invalid test case.
+ * gfortran.dg/dynamic_dispatch_2.f03: Ditto.
+ * gfortran.dg/dynamic_dispatch_3.f03: Ditto.
+ * gfortran.dh/typebound_call_16.f03: New.
+ * gfortran.dg/typebound_generic_6.f03: New.
+ * gfortran.dg/typebound_generic_7.f03: New.
+ * gfortran.dg/typebound_generic_8.f03: New.
+
+2010-07-12 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR libfortran/37077
+ * gfortran.dg/char4_iunit_1.f03: New test.
+
+2010-07-12 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/tree-ssa/vrp53.c: New test.
+
+2010-07-12 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/44907
+ * g++.dg/template/sfinae19.C: New.
+ * g++.dg/template/sfinae20.C: Likewise.
+
+2010-07-12 Jie Zhang <jie@codesourcery.com>
+
+ * gcc.target/arm/interrupt-1.c: New test.
+ * gcc.target/arm/interrupt-2.c: New test.
+
+2010-07-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.dg/pr42427.c: Require c99_runtime.
+ * gcc.target/i386/avx-cmpsd-1.c: Use dg-require-effective-target
+ c99_runtime.
+ * gcc.target/i386/avx-cmpss-1.c: Likewise.
+ * gcc.target/i386/avx-vcmppd-1.c: Likewise.
+ * gcc.target/i386/avx-vcmppd-256-1.c: Likewise.
+ * gcc.target/i386/avx-vcmpps-1.c: Likewise.
+ * gcc.target/i386/avx-vcmpps-256-1.c: Likewise.
+ * gcc.target/i386/avx-vcmpsd-1.c: Likewise.
+ * gcc.target/i386/avx-vcmpss-1.c: Likewise.
+ * gcc.target/i386/sse-cmpss-1.c: Likewise.
+ * gcc.target/i386/sse2-cmpsd-1.c: Likewise
+ * gcc.target/i386/pr37275.c: Require visibility support.
+
+2010-07-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lib/target-supports.exp (check_effective_target_sse): New proc.
+ * gcc.target/i386/sol2-check.h: New file.
+ * gcc.target/i386/sse-check.h (ILL_INSN, ILL_INSN_LEN): Define.
+ Include sol2-check.h.
+ (main) Only run do_test () if sol2_check ().
+ * gcc.target/i386/sse2-check.h: Likewise.
+ * gcc.target/i386/sse3-check.h: Likewise.
+ * gcc.dg/vect/tree-vect.h (check_vect) [__i386__ || __x86_64__]
+ [__sun__ && __svr4__]: Execute SSE2 instruction.
+ * gcc.target/i386/math-torture/math-torture.exp: Only add options
+ with -msse to MATH_TORTURE_OPTIONS if check_effective_target_sse.
+ * g++.dg/debug/dwarf2/const2b.C: Use dg-require-effective-target sse.
+ * g++.dg/ext/vector14.C: Likewise.
+ * g++.dg/other/mmintrin.C: Likewise.
+ * gcc.dg/20020418-1.c: Likewise.
+ * gcc.dg/debug/dwarf2/const-2b.c: Likewise.
+ * gcc.dg/format/ms_unnamed-1.c: Likewise.
+ * gcc.dg/format/unnamed-1.c: Likewise.
+ Adapt dg-warning line number.
+ * gcc.dg/graphite/pr40281.c: Likewise.
+ * gcc.dg/pr32176.c: Likewise.
+ * gcc.dg/pr40550.c: Likewise.
+ * gcc.dg/prefetch-loop-arrays-1.c: Likewise.
+ * gcc.dg/torture/pr36891.c: Likewise.
+ * gcc.target/i386/20020218-1.c: Likewise.
+ * gcc.target/i386/20020523.c: Likewise.
+ * gcc.target/i386/abi-1.c: Likewise.
+ * gcc.target/i386/brokensqrt.c: Likewise.
+ * gcc.target/i386/fastcall-sseregparm.c: Likewise.
+ * gcc.target/i386/pr13366.c: Likewise.
+ * gcc.target/i386/pr13685.c: Likewise.
+ * gcc.target/i386/pr24306.c: Likewise.
+ * gcc.target/i386/pr31486.c: Likewise.
+ * gcc.target/i386/pr32065-1.c: Likewise.
+ * gcc.target/i386/pr32065-2.c: Likewise.
+ * gcc.target/i386/pr32389.c: Likewise.
+ * gcc.target/i386/pr38824.c: Likewise.
+ * gcc.target/i386/pr38931.c: Likewise.
+ * gcc.target/i386/pr39592-1.c: Likewise.
+ * gcc.target/i386/pr43766.c: Likewise.
+ * gcc.target/i386/recip-divf.c: Likewise.
+ * gcc.target/i386/recip-sqrtf.c: Likewise.
+ * gcc.target/i386/recip-vec-divf.c: Likewise.
+ * gcc.target/i386/recip-vec-sqrtf.c: Likewise.
+ * gcc.target/i386/sse-1.c: Likewise.
+ * gcc.target/i386/sse-16.c: Likewise.
+ * gcc.target/i386/sse-2.c: Likewise.
+ * gcc.target/i386/sse-20.c: Likewise.
+ * gcc.target/i386/sse-3.c: Likewise.
+ * gcc.target/i386/sse-7.c: Likewise.
+ * gcc.target/i386/sse-9.c: Likewise.
+ * gcc.target/i386/sse-addps-1.c: Likewise.
+ * gcc.target/i386/sse-addss-1.c: Likewise.
+ * gcc.target/i386/sse-andnps-1.c: Likewise.
+ * gcc.target/i386/sse-andps-1.c: Likewise.
+ * gcc.target/i386/sse-cmpss-1.c: Likewise.
+ * gcc.target/i386/sse-comiss-1.c: Likewise.
+ * gcc.target/i386/sse-comiss-2.c: Likewise.
+ * gcc.target/i386/sse-comiss-3.c: Likewise.
+ * gcc.target/i386/sse-comiss-4.c: Likewise.
+ * gcc.target/i386/sse-comiss-5.c: Likewise.
+ * gcc.target/i386/sse-comiss-6.c: Likewise.
+ * gcc.target/i386/sse-copysignf-vec.c: Likewise.
+ * gcc.target/i386/sse-cvtsi2ss-1.c: Likewise.
+ * gcc.target/i386/sse-cvtsi2ss-2.c: Likewise.
+ * gcc.target/i386/sse-cvtss2si-1.c: Likewise.
+ * gcc.target/i386/sse-cvtss2si-2.c: Likewise.
+ * gcc.target/i386/sse-cvttss2si-1.c: Likewise.
+ * gcc.target/i386/sse-cvttss2si-2.c: Likewise.
+ * gcc.target/i386/sse-divps-1.c: Likewise.
+ * gcc.target/i386/sse-divss-1.c: Likewise.
+ * gcc.target/i386/sse-init-v4hi-1.c: Likewise.
+ * gcc.target/i386/sse-init-v4sf-1.c: Likewise.
+ * gcc.target/i386/sse-maxps-1.c: Likewise.
+ * gcc.target/i386/sse-maxss-1.c: Likewise.
+ * gcc.target/i386/sse-minps-1.c: Likewise.
+ * gcc.target/i386/sse-minss-1.c: Likewise.
+ * gcc.target/i386/sse-movaps-1.c: Likewise.
+ * gcc.target/i386/sse-movaps-2.c: Likewise.
+ * gcc.target/i386/sse-movhlps-1.c: Likewise.
+ * gcc.target/i386/sse-movhps-1.c: Likewise.
+ * gcc.target/i386/sse-movhps-2.c: Likewise.
+ * gcc.target/i386/sse-movlhps-1.c: Likewise.
+ * gcc.target/i386/sse-movmskps-1.c: Likewise.
+ * gcc.target/i386/sse-movntps-1.c: Likewise.
+ * gcc.target/i386/sse-movss-1.c: Likewise.
+ * gcc.target/i386/sse-movss-2.c: Likewise.
+ * gcc.target/i386/sse-movss-3.c: Likewise.
+ * gcc.target/i386/sse-movups-1.c: Likewise.
+ * gcc.target/i386/sse-movups-2.c: Likewise.
+ * gcc.target/i386/sse-mulps-1.c: Likewise.
+ * gcc.target/i386/sse-mulss-1.c: Likewise.
+ * gcc.target/i386/sse-orps-1.c: Likewise.
+ * gcc.target/i386/sse-rcpps-1.c: Likewise.
+ * gcc.target/i386/sse-recip-vec.c: Likewise.
+ * gcc.target/i386/sse-recip.c: Likewise.
+ * gcc.target/i386/sse-rsqrtps-1.c: Likewise.
+ * gcc.target/i386/sse-set-ps-1.c: Likewise.
+ * gcc.target/i386/sse-sqrtps-1.c: Likewise.
+ * gcc.target/i386/sse-subps-1.c: Likewise.
+ * gcc.target/i386/sse-subss-1.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-1.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-2.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-3.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-4.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-5.c: Likewise.
+ * gcc.target/i386/sse-ucomiss-6.c: Likewise.
+ * gcc.target/i386/sse-unpckhps-1.c: Likewise.
+ * gcc.target/i386/sse-unpcklps-1.c: Likewise.
+ * gcc.target/i386/sse-xorps-1.c: Likewise.
+ * gcc.target/i386/ssefn-1.c: Likewise.
+ * gcc.target/i386/ssefn-3.c: Likewise.
+ * gcc.target/i386/sseregparm-1.c: Likewise.
+ * gcc.target/i386/stackalign/return-3.c: Likewise.
+ * gcc.target/i386/vectorize1.c: Likewise.
+ * gcc.target/i386/vperm-v4sf-1.c: Likewise.
+ * gcc.target/i386/xorps-sse.c: Likewise.
+ * gfortran.dg/pr28158.f90: Likewise.
+ * gfortran.dg/pr30667.f: Likewise.
+ * gnat.dg/loop_optimization7.adb: Likewise.
+ * gnat.dg/sse_nolib.adb: Likewise.
+
+2010-07-11 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/44702
+ * gfortran.dg/use_rename_6.f90: New.
+ * gfortran.dg/use_iso_c_binding.f90: Update dg-error.
+
+2010-07-11 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44869
+ * gfortran.dg/class_24.f03: New.
+
+2010-07-10 Richard Guenther <rguenther@suse.de>
+
+ PR lto/44889
+ * gcc.dg/lto/20100709-1_0.c: New testcase.
+ * gcc.dg/lto/20100709-1_1.c: Likewise.
+
+2010-07-10 Richard Sandiford <r.sandiford@uk.ibm.com>
+
+ * gcc.dg/attr-weak-hidden-1.c, gcc.dg/attr-weak-hidden-1a.c: New test.
+
+2010-07-10 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR objc/44140
+ * objc.dg/lto/trivial-1_0.m: New.
+ * objc.dg/lto/lto.exp: New.
+ * obj-c++.dg/lto/trivial-1_0.mm: New.
+ * obj-c++.dg/lto/lto.exp: New.
+ * objc.dg/symtab-1.m: Adjust sizes.
+ * objc.dg/image-info.m: Do not run for gnu-runtime.
+
+2010-07-09 Bernd Schmidt <bernds@codesourcery.com>
+
+ * gcc.dg/pr32370.c: Allow another kind of error message.
+
+2010-07-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/atomic3.adb: New test.
+
+2010-07-09 Jakub Jelinek <jakub@redhat.com>
+ Denys Vlasenko <dvlasenk@redhat.com>
+ Bernhard Reutner-Fischer <aldot@gcc.gnu.org>
+
+ PR tree-optimization/28632
+ * gcc.dg/tree-ssa/vrp51.c: New test.
+ * gcc.dg/tree-ssa/vrp52.c: New test.
+
+2010-07-09 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/abi/covariant6.C: New.
+ * g++.dg/inherit/covariant17.C: Test both bases.
+ * g++.dg/inherit/covariant7.C: Check vtable layout.
+
+2010-07-09 Tom de Vries <tjvries@xs4all.nl>
+
+ * gcc.dg/debug/dwarf2/pr31230.c: New testcase.
+
+2010-07-09 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44852
+ * gcc.c-torture/execute/pr44852.c: New testcase.
+
+2010-07-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc.target/x86_64/abi/asm-support.S (snapshot): Replace
+ multiplication by values.
+ * gcc.target/x86_64/abi/asm-support-darwin.s (_snapshot): Likewise.
+ * gcc.target/x86_64/abi/avx/asm-support.S (snapshot): Likewise.
+
+2010-07-09 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44882
+ * gfortran.dg/pr44882.f90: New testcase.
+
+2010-07-09 Bernd Schmidt <bernds@codesourcery.com>
+
+ PR target/40657
+ * gcc.target/arm/pr40657-1.c: New test.
+ * gcc.target/arm/pr40657-2.c: New test.
+ * gcc.c-torture/execute/pr40657.c: New test.
+
+2010-07-09 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/tree-ssa/vrp50.c: New test.
+ * gcc.dg/vect/slp-perm-4.c (main): Make sure loop isn't vectorized.
+
+2010-07-08 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/44649
+ * gfortran.dg/c_sizeof_1.f90: Modified.
+ * gfortran.dg/storage_size_1.f08: New.
+ * gfortran.dg/storage_size_2.f08: New.
+
+2010-07-08 Mikael Pettersson <mikpe@it.uu.se>
+
+ * gcc.c-torture/execute/20100708-1.c: New test.
+
+2010-07-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/44847
+ * gfortran.dg/gomp/pr44847.f90: New test.
+
+2010-07-08 Sebastian Pop <sebastian.pop@amd.com>
+
+ PR tree-optimization/44710
+ * gcc.dg/tree-ssa/ifc-6.c: New.
+ * gcc.dg/tree-ssa/ifc-pr44710.c: New.
+
+2010-07-08 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/18918
+ * gfortran.dg/coarray_10.f90: Add an additional test.
+
+2010-07-08 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR middle-end/44828
+ * gcc.c-torture/execute/pr44828.c (foo): Use signed char.
+ * gcc.c-torture/execute/pr44828.x: Revert.
+
+2010-07-08 Jason Merrill <jason@redhat.com>
+
+ PR c++/43120
+ * g++.dg/inherit/covariant17.C: New.
+ * g++.dg/abi/covariant1.C: Actually test for the bug.
+
+2010-07-08 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR rtl-optimization/44838
+ * gcc.dg/pr44838.c: New.
+
+2010-07-08 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44831
+ * gcc.c-torture/compile/pr44831.c: New testcase.
+ * gcc.dg/tree-ssa/pr21463.c: Adjust.
+
+2010-07-08 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44861
+ * g++.dg/vect/pr44861.cc: New testcase.
+
+2010-07-07 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR middle-end/44828
+ * gcc.c-torture/execute/pr44828.x: New file.
+
+2010-07-07 Peter Bergner <bergner@vnet.ibm.com>
+
+ * g++.dg/ext/altivec-2.C: Add -Wno-unused-but-set-variable to
+ dg-options.
+ * g++.dg/ext/altivec-17.C: Adjust error message.
+
+2010-07-07 Tom Tromey <tromey@redhat.com>
+
+ * g++.dg/debug/dwarf2/pubnames-1.C: Make darwin-specific.
+
+2010-07-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/44844
+ * gcc.target/i386/rdrand-1.c: Scan "jnc".
+ * gcc.target/i386/rdrand-2.c: Likewise.
+ * gcc.target/i386/rdrand-3.c: Likewise.
+
+2010-07-07 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/44813
+ * g++.dg/torture/pr44813.C: New testcase.
+ * g++.dg/torture/pr44826.C: New testcase.
+
+2010-07-07 Bernd Schmidt <bernds@codesourcery.com>
+
+ PR rtl-optimization/44787
+ * gcc.c-torture/compile/pr44788.c: New test.
+ * gcc.target/arm/pr44788.c: New test.
+
+2010-07-06 Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/altivec-volatile.c: Adjust expected warning.
+
+2010-07-06 Peter Bergner <bergner@vnet.ibm.com>
+
+ * gcc.target/powerpc/ppu-intrinsics.c: Add -Wno-unused-but-set-variable
+ to dg-options.
+
+2010-07-06 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/44742
+ * gfortran.dg/parameter_array_init_6.f90: New.
+ * gfortran.dg/initialization_20.f90: Update dg-error.
+ * gfortran.dg/initialization_24.f90: Ditto.
+
+2010-07-06 Thomas Koenig <tkoenig@gcc.gnu.org>
+ PR fortran/PR44693
+ * gfortran.dg/dim_range_1.f90: New test.
+ * gfortran.dg/minmaxloc_4.f90: Remove invalid test.
+
+2010-07-06 Jason Merrill <jason@redhat.com>
+
+ PR c++/44703
+ * g++.dg/cpp0x/initlist41.C: New.
+
+ PR c++/44778
+ * g++.dg/template/ptrmem22.C: New.
+
+2010-07-06 Kai Tietz <kai.tietz@onevision.com>
+
+ * gcc.target/i386/ms_hook_prologue.c: Add x64 ms_hook_prologue
+ support.
+ * gcc.target/i386/i386.exp: Likewise.
+
+2010-07-06 Peter Bergner <bergner@vnet.ibm.com>
+
+ PR testsuite/44195
+ * gcc.dg/lto/20100518_0.c: Limit to x86.
+
+2010-07-06 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/44828
+ * gcc.c-torture/execute/pr44828.c: New testcase.
+
+2010-07-06 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * g++.dg/warn/noeffect2.C: Adjust expected warning.
+ * g++.dg/warn/volatile1.C: Likewise.
+ * g++.dg/template/warn1.C: Likewise.
+
+2010-07-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ AVX Programming Reference (June, 2010)
+ * g++.dg/other/i386-2.C: Add -mfsgsbase -mrdrnd -mf16c.
+ * g++.dg/other/i386-3.C: Likewise.
+ * gcc.target/i386/sse-12.c: Likewise.
+
+ * gcc.target/i386/f16c-check.h: New.
+ * gcc.target/i386/rdfsbase-1.c: Likewise.
+ * gcc.target/i386/rdfsbase-2.c: Likewise.
+ * gcc.target/i386/rdgsbase-1.c: Likewise.
+ * gcc.target/i386/rdgsbase-2.c: Likewise.
+ * gcc.target/i386/rdrand-1.c: Likewise.
+ * gcc.target/i386/rdrand-2.c: Likewise.
+ * gcc.target/i386/rdrand-3.c: Likewise.
+ * gcc.target/i386/vcvtph2ps-1.c: Likewise.
+ * gcc.target/i386/vcvtph2ps-2.c: Likewise.
+ * gcc.target/i386/vcvtph2ps-3.c: Likewise.
+ * gcc.target/i386/vcvtps2ph-1.c: Likewise.
+ * gcc.target/i386/vcvtps2ph-2.c: Likewise.
+ * gcc.target/i386/vcvtps2ph-3.c: Likewise.
+ * gcc.target/i386/wrfsbase-1.c: Likewise.
+ * gcc.target/i386/wrfsbase-2.c: Likewise.
+ * gcc.target/i386/wrgsbase-1.c: Likewise.
+ * gcc.target/i386/wrgsbase-2.c: Likewise.
+
+ * gcc.target/i386/sse-13.c: Add -mfsgsbase -mrdrnd -mf16c.
+ (__builtin_ia32_vcvtps2ph): New.
+ (__builtin_ia32_vcvtps2ph256): Likewise.
+
+ * gcc.target/i386/sse-14.c: Add -mfsgsbase -mrdrnd -mf16c.
+ Test _cvtss_sh, _mm_cvtps_ph and _mm256_cvtps_ph.
+
+ * gcc.target/i386/sse-22.c: Add fsgsbase,rdrnd,f16c.
+ Test _cvtss_sh, _mm_cvtps_ph and _mm256_cvtps_ph.
+
+ * gcc.target/i386/sse-23.c (__builtin_ia32_vcvtps2ph): New.
+ (__builtin_ia32_vcvtps2ph256): Likewise.
+ Add fsgsbase,rdrnd,f16c.
+
+ * lib/target-supports.exp (check_effective_target_f16c): New.
+
+2010-07-05 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/guality/nrv-1.c: New test.
+
+2010-07-05 Sandra Loosemore <sandra@codesourcery.com>
+
+ PR middle-end/42505
+ * gcc.target/arm/pr42505.c: New test case.
+
+2010-07-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/44808
+ * g++.dg/opt/nrv16.C: New test.
+
+2010-07-05 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44784
+ * gcc.c-torture/compile/pr44784.c: New testcase.
+
+2010-07-05 Ira Rosen <irar@il.ibm.com>
+
+ * gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c:
+ Increase loop bound and array size.
+ * gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c:
+ Likewise.
+
+2010-07-05 Ira Rosen <irar@il.ibm.com>
+
+ * gcc.dg/vect/costmodel/ppc/costmodel-vect-31d.c: Remove.
+ * gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c: Increase loop bound.
+ * gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c: Likewise.
+ * gcc.dg/vect/costmodel/ppc/costmodel-vect-68d.c: Remove.
+ * gcc.dg/vect/pr35821-altivec.c, gcc.dg/vect/pr35821-spu.c: Likewise.
+
+2010-07-05 Shujing Zhao <pearly.zhao@oracle.com>
+
+ PR c++/22138
+ * g++.dg/parse/template25.C: New.
+
+2010-07-04 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR rtl-optimization/44695
+ * gcc.dg/torture/pr44695.c: New.
+
+2010-07-04 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR c++/16630
+ * g++.dg/ext/pretty3.C: New.
+
+2010-07-04 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/44809
+ * g++.dg/torture/pr44809.C: New testcase.
+
+2010-07-04 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44656
+ * gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL.
+
+2010-07-04 Ira Rosen <irar@il.ibm.com>
+ Revital Eres <eres@il.ibm.com>
+
+ * gcc.dg/vect/vect-42.c: Don't expect peeling on targets that support
+ misaligned stores.
+ * gcc.dg/vect/vect-60.c, gcc.dg/vect/vect-56.c, gcc.dg/vect/vect-93.c,
+ gcc.dg/vect/vect-96.c: Likewise.
+ * gcc.dg/vect/vect-109.c: Expect vectorization only on targets that
+ that support misaligned stores. Change the number of expected
+ misaligned accesses.
+ * gcc.dg/vect/vect-peel-1.c: New test.
+ * gcc.dg/vect/vect-peel-2.c, gcc.dg/vect/vect-peel-3.c,
+ gcc.dg/vect/vect-peel-4.c: Likewise.
+ * gcc.dg/vect/vect-multitypes-1.c: Change the test to make it
+ vectorizable on all targets that support realignment.
+ * gcc.dg/vect/vect-multitypes-4.c: Likewise.
+
+2010-07-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR c/44806
+ * gcc.dg/torture/pr44806.c: New.
+
+2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/cond_expr1.adb: New test.
+
+2010-07-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/modular3.adb: New test.
+ * gnat.dg/modular3_pkg.ads: New helper.
+
+2010-07-03 Iain Sandoe <iains@gcc.gnu.org>
+ Mikael Pettersson <mikpe@it.uu.se>
+
+ PR testsuite/44518
+ * obj-c++.dg/encode-2.mm: Produce object and save temps.
+ Make signed-ness of chars explicit. Scan the object for
+ strings that are split by some target assemblers.
+ * obj-c++.dg/encode-3.mm: Make the signed-ness of chars
+ explicit.
+
+2010-07-03 Hans-Peter Nilsson <hp@axis.com>
+
+ * gfortran.dg/char_bounds_check_fail_1.f90: Correct dg-output string.
+
+2010-07-02 Le-Chun Wu <lcwu@google.com>
+
+ PR/44128
+ * g++.dg/warn/Wshadow-7.C: New test.
+
+2010-07-02 Daniel Jacobowitz <dan@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
+
+ * gcc.c-torture/execute/20100416-1.c: New test case.
+
+2010-07-02 Julian Brown <julian@codesourcery.com>
+ Sandra Loosemore <sandra@codesourcery.com>
+
+ PR target/43703
+
+ * gcc.dg/vect/vect.exp: Add -ffast-math for NEON.
+ * gcc.dg/vect/vect-reduc-6.c: Add XFAIL for NEON.
+
+2010-07-02 Sandra Loosemore <sandra@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * gcc.target/arm/neon/vadds64.c: Regenerated.
+ * gcc.target/arm/neon/vaddu64.c: Regenerated.
+ * gcc.target/arm/neon/vsubs64.c: Regenerated.
+ * gcc.target/arm/neon/vsubu64.c: Regenerated.
+ * gcc.target/arm/neon-vmla-1.c: Add -ffast-math to options.
+ * gcc.target/arm/neon-vmls-1.c: Likewise.
+ * gcc.target/arm/neon-vsubs64.c: New execution test.
+ * gcc.target/arm/neon-vsubu64.c: New execution test.
+ * gcc.target/arm/neon-vadds64.c: New execution test.
+ * gcc.target/arm/neon-vaddu64.c: New execution test.
+
+2010-07-02 Sandra Loosemore <sandra@codesourcery.com>
+
+ * gcc.target/arm/neon-vands64.c: New.
+ * gcc.target/arm/neon-vandu64.c: New.
+ * gcc.target/arm/neon-vbics64.c: New.
+ * gcc.target/arm/neon-vbicu64.c: New.
+ * gcc.target/arm/neon-veors64.c: New.
+ * gcc.target/arm/neon-veoru64.c: New.
+ * gcc.target/arm/neon-vorns64.c: New.
+ * gcc.target/arm/neon-vornu64.c: New.
+ * gcc.target/arm/neon-vorrs64.c: New.
+ * gcc.target/arm/neon-vorru64.c: New.
+ * gcc.target/arm/neon/vands64.c: Regenerated.
+ * gcc.target/arm/neon/vandu64.c: Regenerated.
+ * gcc.target/arm/neon/vbics64.c: Regenerated.
+ * gcc.target/arm/neon/vbicu64.c: Regenerated.
+ * gcc.target/arm/neon/veors64.c: Regenerated.
+ * gcc.target/arm/neon/veoru64.c: Regenerated.
+ * gcc.target/arm/neon/vorns64.c: Regenerated.
+ * gcc.target/arm/neon/vornu64.c: Regenerated.
+ * gcc.target/arm/neon/vorrs64.c: Regenerated.
+ * gcc.target/arm/neon/vorru64.c: Regenerated.
+
+2010-07-02 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * gfortran.dg/runtime_warning_1.f90: Remove extra dg line.
+
+2010-07-02 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ * gfortran.dg/runtime_warning_1.f90: Fix dg syntax.
+ * gfortran.dg/intent_out_5.f90: Same.
+ * gfortran.dg/ltrans-7.f90: Same.
+ * gfortran.dg/char_bounds_check_fail_1.f90: Same.
+
+2010-07-02 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/tree-ssa/ipa-split-5.c: New function.
+
+2010-07-02 Iain Sandoe <iains@gcc.gnu.org>
+
+ * objc-obj-c++-shared/Object1.h: Correct Line endings.
+
+2010-07-02 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/44780
+ * c-c++-common/Wunused-var-12.c: New test.
+
+2010-07-02 Bernd Schmidt <bernds@codesourcery.com>
+
+ PR target/42835
+ * gcc.target/arm/pr42835.c: New test.
+
+ PR target/42172
+ * gcc.target/arm/pr42172-1.c: New test.
+
+2010-07-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * g++.dg/template/crash98.C: Remove stray // from dg-error comment.
+
+2010-07-02 Sandra Loosemore <sandra@codesourcery.com>
+
+ * gcc.target/arm/neon/vdup_ns64.c: Regenerated.
+ * gcc.target/arm/neon/vdup_nu64.c: Regenerated.
+ * gcc.target/arm/neon/vdupQ_ns64.c: Regenerated.
+ * gcc.target/arm/neon/vdupQ_nu64.c: Regenerated.
+ * gcc.target/arm/neon/vmov_ns64.c: Regenerated.
+ * gcc.target/arm/neon/vmov_nu64.c: Regenerated.
+ * gcc.target/arm/neon/vmovQ_ns64.c: Regenerated.
+ * gcc.target/arm/neon/vmovQ_nu64.c: Regenerated.
+ * gcc.target/arm/neon/vget_lanes64.c: Regenerated.
+ * gcc.target/arm/neon/vget_laneu64.c: Regenerated.
+ * gcc.target/arm/neon/vset_lanes64.c: Regenerated.
+ * gcc.target/arm/neon/vset_laneu64.c: Regenerated.
+ * gcc.target/arm/neon-vdup_ns64.c: New.
+ * gcc.target/arm/neon-vdup_nu64.c: New.
+ * gcc.target/arm/neon-vdupQ_ns64.c: New.
+ * gcc.target/arm/neon-vdupQ_nu64.c: New.
+ * gcc.target/arm/neon-vdupQ_lanes64.c: New.
+ * gcc.target/arm/neon-vdupQ_laneu64.c: New.
+ * gcc.target/arm/neon-vmov_ns64.c: New.
+ * gcc.target/arm/neon-vmov_nu64.c: New.
+ * gcc.target/arm/neon-vmovQ_ns64.c: New.
+ * gcc.target/arm/neon-vmovQ_nu64.c: New.
+ * gcc.target/arm/neon-vget_lanes64.c: New.
+ * gcc.target/arm/neon-vget_laneu64.c: New.
+ * gcc.target/arm/neon-vset_lanes64.c: New.
+ * gcc.target/arm/neon-vset_laneu64.c: New.
+
+2010-07-02 Richard Guenther <rguenther@suse.de>
+
+ * g++.dg/torture/20100702-1.C: New testcase.
+
+2010-07-02 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+
+ PR target/44707
+ * gcc.c-torture/compile/pr44707.c: New test.
+
+2010-07-02 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/44039
+ * g++.dg/template/crash101.C: New.
+
+2010-07-02 Iain Sandoe <iains@gcc.gnu.org>
+
+ * obj-c++.dg/cxx-ivars-3.mm: Make the test require OSX <= 10.4.
+ Use the ABI-0 accessors and fail it for m64.
+
+2010-07-02 Jan Hubicka <jh@suse.cz>
+
+ * g++.dg/tree-ssa/pr44706.C: New testcase.
+
+2010-07-02 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44748
+ * gcc.dg/tree-ssa/ssa-ccp-29.c: New testcase.
+
+2010-07-02 Iain Sandoe <iains@gcc.gnu.org>
+
+ * objc-obj-c++-shared/next-abi.h: Remove dependency on system
+ headers. Add clause to reflect that, pre-10.5, ABI is always 0.
+ * objc/execute/forward-1.m: Depend only on __NEXT_RUNTIME__ for
+ the method types to forward:.
+
+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.
diff --git a/gcc/testsuite/c-c++-common/Wunused-var-12.c b/gcc/testsuite/c-c++-common/Wunused-var-12.c
new file mode 100644
index 00000000000..312680a72e8
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wunused-var-12.c
@@ -0,0 +1,25 @@
+/* PR c++/44780 */
+/* { dg-do compile } */
+/* { dg-options "-Wunused" } */
+
+typedef double vec __attribute__ ((__vector_size__ (16)));
+vec c, d;
+
+void
+foo (void)
+{
+ vec a;
+ vec b;
+ a = c;
+ b = a;
+ d = b;
+}
+
+void
+bar (void)
+{
+ vec a;
+ vec b; /* { dg-warning "set but not used" } */
+ a = c;
+ b = a;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr43141.c b/gcc/testsuite/c-c++-common/guality/pr43141.c
index e6fe79a0efc..e6fe79a0efc 100644
--- a/gcc/testsuite/gcc.dg/guality/pr43141.c
+++ b/gcc/testsuite/c-c++-common/guality/pr43141.c
diff --git a/gcc/testsuite/c-c++-common/pr44832.c b/gcc/testsuite/c-c++-common/pr44832.c
new file mode 100644
index 00000000000..4138e37f01d
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr44832.c
@@ -0,0 +1,160 @@
+/* PR debug/44832 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcompare-debug" } */
+
+struct rtx_def;
+typedef struct rtx_def *rtx;
+typedef const struct rtx_def *const_rtx;
+struct rtvec_def;
+typedef struct rtvec_def *rtvec;
+extern int ix86_isa_flags;
+
+enum machine_mode
+{
+ VOIDmode,
+ V8HImode,
+ V16QImode,
+ V4SImode,
+ V2DImode,
+ V32QImode,
+ MAX_MACHINE_MODE,
+
+ NUM_MACHINE_MODES = MAX_MACHINE_MODE
+};
+extern unsigned char mode_size[NUM_MACHINE_MODES];
+extern const unsigned char mode_inner[NUM_MACHINE_MODES];
+extern const unsigned char mode_nunits[NUM_MACHINE_MODES];
+enum rtx_code {
+
+CONST_INT ,
+
+CONST_FIXED ,
+
+CONST_DOUBLE
+
+ };
+union rtunion_def
+{
+ rtvec rt_rtvec;
+};
+typedef union rtunion_def rtunion;
+struct rtx_def {
+
+ __extension__ enum rtx_code code: 16;
+
+ __extension__ enum machine_mode mode : 8;
+
+ union u {
+ rtunion fld[1];
+ } u;
+};
+struct rtvec_def {
+ rtx elem[1];
+};
+extern int rtx_equal_p (const_rtx, const_rtx);
+extern rtx gen_reg_rtx (enum machine_mode);
+
+extern void
+ix86_expand_vector_init_concat (enum machine_mode mode,
+ rtx target, rtx *ops, int n);
+
+static void
+ix86_expand_vector_init_general (unsigned char mmx_ok, enum machine_mode mode,
+ rtx target, rtx vals)
+{
+ rtx ops[32], op0, op1;
+ enum machine_mode half_mode = VOIDmode;
+ int n, i;
+
+ switch (mode)
+ {
+ case V4SImode:
+ case V2DImode:
+ n = mode_nunits[mode];
+ ix86_expand_vector_init_concat (mode, target, ops, n);
+ return;
+
+ case V32QImode:
+ goto half;
+half:
+{
+ typedef int eger;
+ if (mode != V4SImode)
+ ops[0] = 0;
+}
+ n = mode_nunits[mode];
+ for (i = 0; i < n; i++)
+ ops[i] = (((((vals)->u.fld[0]).rt_rtvec))->elem[i]);
+ op0 = gen_reg_rtx (VOIDmode);
+ return;
+
+ case V16QImode:
+ if (!((ix86_isa_flags & (1 << 19)) != 0))
+ break;
+
+ case V8HImode:
+ if (!((ix86_isa_flags & (1 << 17)) != 0))
+ break;
+
+ n = mode_nunits[mode];
+ for (i = 0; i < n; i++)
+ ops[i] = (((((vals)->u.fld[0]).rt_rtvec))->elem[i]);
+ return;
+
+ default:
+ ;
+ }
+
+ {
+ int n_words;
+
+ n_words = ((unsigned short) mode_size[mode]) / 4;
+
+ if (n_words == 4)
+ ix86_expand_vector_init_general (0, V4SImode, 0, 0);
+ }
+}
+
+
+void
+ix86_expand_vector_init (unsigned char mmx_ok, rtx target, rtx vals)
+{
+ enum machine_mode mode = ((enum machine_mode) (target)->mode);
+ enum machine_mode inner_mode = ((enum machine_mode) mode_inner[mode]);
+ int n_elts = mode_nunits[mode];
+ int n_var = 0, one_var = -1;
+ unsigned char all_same = 1, all_const_zero = 1;
+ int i;
+ rtx x;
+
+ for (i = 0; i < n_elts; ++i)
+ {
+ x = (((((vals)->u.fld[0]).rt_rtvec))->elem[i]);
+ if (!((((enum rtx_code) (x)->code) == CONST_INT)
+ || ((enum rtx_code) (x)->code) == CONST_DOUBLE
+ || ((enum rtx_code) (x)->code) == CONST_FIXED))
+ n_var++, one_var = i;
+ else
+ all_const_zero = 0;
+ if (i > 0 && !rtx_equal_p (x, (((((vals)->u.fld[0]).rt_rtvec))->elem[0])))
+ all_same = 0;
+ }
+
+
+ if (n_var == 0)
+ {
+ return;
+ }
+
+ if (all_same)
+ return;
+
+ if (n_var == 1)
+ {
+ if (all_const_zero)
+ return;
+
+ }
+
+ ix86_expand_vector_init_general (mmx_ok, mode, target, vals);
+}
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-add.c b/gcc/testsuite/c-c++-common/torture/complex-sign-add.c
index e81223224dc..bcaf8bba9e3 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-add.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-add.c
@@ -28,7 +28,9 @@
void
check_add_float (void)
{
+#ifndef __SPU__
CHECK_ADD (float, __builtin_copysignf, 0.0f, 0.0if);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c
index d1e20912ae1..caea562e8bd 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-add.c
@@ -28,7 +28,9 @@
void
check_add_float (void)
{
+#ifndef __SPU__
CHECK_ADD (float, __builtin_copysignf, 0.0f, 0.0if);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-div.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-div.c
index f7ee48341c0..269d5ec42ea 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-div.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-div.c
@@ -20,7 +20,9 @@
void
check_div_float (void)
{
+#ifndef __SPU__
CHECK_DIV (float, __builtin_copysignf, 0.0f, 0.0if, 1.0f);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-mul.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-mul.c
index 02f936b75bd..e79db6d4559 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-mul.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-mul.c
@@ -28,7 +28,9 @@
void
check_mul_float (void)
{
+#ifndef __SPU__
CHECK_MUL (float, __builtin_copysignf, 0.0f, 0.0if);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-sub.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-sub.c
index 739500d2f8b..d9e083cfdce 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-sub.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mixed-sub.c
@@ -28,7 +28,9 @@
void
check_sub_float (void)
{
+#ifndef __SPU__
CHECK_SUB (float, __builtin_copysignf, 0.0f, 0.0if);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mul-minus-one.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mul-minus-one.c
index 05cc4fabea4..d20b5e6c87f 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mul-minus-one.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mul-minus-one.c
@@ -36,7 +36,9 @@
void
check_mul_float (void)
{
+#ifndef __SPU__
CHECK_MUL (float, __builtin_copysignf, 0.0f, 0.0if, 1.0f);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mul-one.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mul-one.c
index 014d813e99e..ad02a2cd666 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mul-one.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mul-one.c
@@ -36,7 +36,9 @@
void
check_mul_float (void)
{
+#ifndef __SPU__
CHECK_MUL (float, __builtin_copysignf, 0.0f, 0.0if, 1.0f);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-mul.c b/gcc/testsuite/c-c++-common/torture/complex-sign-mul.c
index 08d247aa5c0..a3274d2ea44 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-mul.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-mul.c
@@ -28,7 +28,9 @@
void
check_mul_float (void)
{
+#ifndef __SPU__
CHECK_MUL (float, __builtin_copysignf, 0.0f, 0.0if);
+#endif
}
void
diff --git a/gcc/testsuite/c-c++-common/torture/complex-sign-sub.c b/gcc/testsuite/c-c++-common/torture/complex-sign-sub.c
index d4da14dc5f5..0a4e3029e68 100644
--- a/gcc/testsuite/c-c++-common/torture/complex-sign-sub.c
+++ b/gcc/testsuite/c-c++-common/torture/complex-sign-sub.c
@@ -28,7 +28,9 @@
void
check_sub_float (void)
{
+#ifndef __SPU__
CHECK_SUB (float, __builtin_copysignf, 0.0f, 0.0if);
+#endif
}
void
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
index b895ac7dcd9..628296213d5 100644
--- a/gcc/testsuite/c-c++-common/uninit-17.c
+++ b/gcc/testsuite/c-c++-common/uninit-17.c
@@ -9,9 +9,9 @@ static void bar(int a, int *ptr)
{
do
{
- int b; /* { dg-message "note: 'b' was declared here" } */
+ int b; /* { dg-warning "is used uninitialized" } */
if (b < 40) {
- ptr[0] = b; /* { dg-warning "may be used uninitialized" } */
+ ptr[0] = b;
}
b += 1;
ptr++;
diff --git a/gcc/testsuite/g++.dg/abi/covariant1.C b/gcc/testsuite/g++.dg/abi/covariant1.C
index 203ec2c9fcb..ae8c5e603da 100644
--- a/gcc/testsuite/g++.dg/abi/covariant1.C
+++ b/gcc/testsuite/g++.dg/abi/covariant1.C
@@ -1,8 +1,8 @@
// { dg-do compile }
// { dg-options "-w" }
-// We don't want to use a covariant thunk to have a virtual
-// primary base
+// If a covariant thunk is overriding a virtual primary base, we have to
+// use the vcall offset even though we know it will be 0.
struct c4 {};
@@ -16,6 +16,11 @@ struct c12 : c11 { };
struct c14 :
virtual c12,
- virtual c11 { virtual c12* f17(); };
+ virtual c11 { virtual void f(); c12* f17(); };
-// { dg-final { scan-assembler-not "\n_ZTch0_v0_n16_N3c143f17Ev\[: \t\n\]" } }
+void c14::f() { }
+
+// { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N3c143f17Ev" { target ilp32 } } }
+// { dg-final { scan-assembler-not "_ZTch0_v0_n16_N3c143f17Ev" } }
+// { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N3c143f17Ev" { target lp64 } } }
+// { dg-final { scan-assembler-not "_ZTch0_v0_n32_N3c143f17Ev" } }
diff --git a/gcc/testsuite/g++.dg/abi/covariant6.C b/gcc/testsuite/g++.dg/abi/covariant6.C
new file mode 100644
index 00000000000..9dfc5ba74ab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/covariant6.C
@@ -0,0 +1,34 @@
+struct A
+{
+ virtual A* f();
+};
+
+struct B: virtual A
+{
+ virtual A* f();
+};
+
+struct C: B
+{
+ virtual C* f();
+};
+
+C* C::f() { return 0; }
+
+// When we emit C::f, we should emit both thunks: one for B and one for A.
+// { dg-final { scan-assembler "_ZTch0_v0_n16_N1C1fEv" { target ilp32 } } }
+// { dg-final { scan-assembler "_ZTch0_v0_n32_N1C1fEv" { target lp64 } } }
+// { dg-final { scan-assembler "_ZTcv0_n12_v0_n16_N1C1fEv" { target ilp32 } } }
+// { dg-final { scan-assembler "_ZTcv0_n24_v0_n32_N1C1fEv" { target lp64 } } }
+
+struct D: B
+{
+ virtual void dummy ();
+ virtual D* f();
+};
+
+void D::dummy() { }
+
+// When we emit the D vtable, it should refer to the thunk for B.
+// { dg-final { scan-assembler "_ZTch0_v0_n16_N1D1fEv" { target ilp32 } } }
+// { dg-final { scan-assembler "_ZTch0_v0_n32_N1D1fEv" { target lp64 } } }
diff --git a/gcc/testsuite/g++.dg/abi/mangle44.C b/gcc/testsuite/g++.dg/abi/mangle44.C
new file mode 100644
index 00000000000..8454148421c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/mangle44.C
@@ -0,0 +1,19 @@
+// PR c++/45008
+
+template <typename T>
+struct A
+{
+ void fn1 () {
+ struct Nested {
+ static void fn2 () { }
+ };
+ Nested::fn2();
+ }
+};
+
+void fn3 () {
+ A<double> a;
+ a.fn1();
+}
+
+// { dg-final { scan-assembler-not "_ZZN1AIT_E3fn1EvEN6Nested3fn2Ev" } }
diff --git a/gcc/testsuite/g++.dg/abi/noreturn1.C b/gcc/testsuite/g++.dg/abi/noreturn1.C
new file mode 100644
index 00000000000..0532cf2f803
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/noreturn1.C
@@ -0,0 +1,14 @@
+// Test that attribute noreturn is not part of the mangled name.
+// { dg-options -fabi-version=0 }
+
+void baz (const char *fmt, ...);
+
+// { dg-final { scan-assembler "_Z3barPFvPKczE" } }
+void bar (void (*baz) (const char *fmt, ...)
+ __attribute__ ((noreturn, format (printf, 1, 2))));
+
+void
+foo ()
+{
+ bar (&baz);
+}
diff --git a/gcc/testsuite/g++.dg/abi/noreturn2.C b/gcc/testsuite/g++.dg/abi/noreturn2.C
new file mode 100644
index 00000000000..72accafe660
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/noreturn2.C
@@ -0,0 +1,14 @@
+// Test for buggy mangling of attribute noreturn in abi<=4
+// { dg-options -fabi-version=4 }
+
+void baz (const char *fmt, ...);
+
+// { dg-final { scan-assembler "_Z3barPVFvPKczE" } }
+void bar (void (*baz) (const char *fmt, ...)
+ __attribute__ ((noreturn, format (printf, 1, 2))));
+
+void
+foo ()
+{
+ bar (&baz);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype23.C b/gcc/testsuite/g++.dg/cpp0x/decltype23.C
new file mode 100644
index 00000000000..78eb89d8ee2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype23.C
@@ -0,0 +1,5 @@
+// { dg-options -std=c++0x }
+
+int x, &&y = static_cast<int &&>(x);
+typedef decltype((y)) myInt; // `y' is a parenthesized id-expression of type int that is an lvalue
+typedef int &myInt;
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
index 909ebc5e6e0..1f400f4fad0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted2.C
@@ -54,7 +54,7 @@ G::G() = default;
union U
{
- G g; // { dg-error "constructor" }
+ G g; // { dg-error "union member.*non-trivial" }
};
int main()
@@ -62,5 +62,7 @@ int main()
F f;
F f2(f); // { dg-error "use" }
B* b = new const B; // { dg-error "uninitialized const" }
+ U u; // { dg-error "deleted" }
}
+// { dg-prune-output "implicitly deleted because" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit6.C b/gcc/testsuite/g++.dg/cpp0x/implicit6.C
new file mode 100644
index 00000000000..c7902969dce
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit6.C
@@ -0,0 +1,23 @@
+// Circular implicit declarations were causing errors
+// { dg-options -std=c++0x }
+
+struct Ray;
+
+struct Vector
+{
+ virtual void f(); // make non-trivially-copyable
+ Vector(const Ray &) ;
+};
+
+struct array
+{
+ Vector v;
+};
+
+struct Ray
+{
+ array a;
+};
+
+extern Ray r1;
+Ray r2=r1;
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit7.C b/gcc/testsuite/g++.dg/cpp0x/implicit7.C
new file mode 100644
index 00000000000..f29e5009fbd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit7.C
@@ -0,0 +1,37 @@
+// PR c++/44909
+// { dg-options -std=c++0x }
+// Declaring A<D<E>>'s copy ctor means choosing a ctor to initialize D<E>,
+// which means choosing a ctor for C<B<E>>, which meant considering
+// C(const B<E>&) which means choosing a ctor for B<E>, which means choosing
+// a ctor for A<D<E>>. Cycle.
+
+template<typename T>
+struct A
+{
+ T t;
+};
+
+template <typename T>
+struct B
+{
+ typename T::U u;
+};
+
+template <typename T>
+struct C
+{
+ C(const T&);
+};
+
+template <typename T>
+struct D
+{
+ C<B<T> > v;
+};
+
+struct E {
+ typedef A<D<E> > U;
+};
+
+extern A<D<E> > a;
+A<D<E> > a2(a);
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit8.C b/gcc/testsuite/g++.dg/cpp0x/implicit8.C
new file mode 100644
index 00000000000..2f3febae8b2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit8.C
@@ -0,0 +1,34 @@
+// The hack for PR c++/44909 breaks this testcase. We need feedback
+// from the C++ committee to know how to proceed.
+// { dg-options -std=c++0x }
+// { dg-prune-output "implicitly deleted" }
+// { dg-prune-output "cannot bind" }
+// { dg-prune-output "initializing argument" }
+
+struct A
+{
+ A();
+ A(A&);
+};
+
+struct B;
+struct BP
+{
+ BP(const B&);
+};
+
+struct B
+{
+ B();
+ B(B&&);
+ B(const BP&);
+};
+
+// If B(B&&) suppresses the B copy constructor, then copying the B
+// subobject of C should use B(const BP&). But we ignore that constructor
+// in order to break the cycle in 44909. Perhaps the move ctor shouldn't
+// suppress the copy ctor?
+struct C: A, B { };
+
+C c;
+C c2(c); // { dg-bogus "deleted" "" { xfail *-*-* } }
diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist41.C b/gcc/testsuite/g++.dg/cpp0x/initlist41.C
new file mode 100644
index 00000000000..b5385480c89
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist41.C
@@ -0,0 +1,14 @@
+// PR c++/44703
+// { dg-options -std=c++0x }
+
+#include <initializer_list>
+
+typedef std::initializer_list<int> type ;
+void f(type) {}
+
+int main()
+{
+// error: could not convert '{1, 2, 3}' to 'type'
+ f({1,2,3}) ;
+}
+
diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
index 6e1d1256c57..be581bcb6e3 100644
--- a/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
+++ b/gcc/testsuite/g++.dg/cpp0x/nullptr04.C
@@ -3,17 +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 ssize_t n10 = reinterpret_cast<ssize_t>(mynull);
-const ssize_t n11 = (ssize_t)mynull;
+const intptr_t n10 = reinterpret_cast<intptr_t>(mynull);
+const intptr_t n11 = (intptr_t)mynull;
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae2.C b/gcc/testsuite/g++.dg/cpp0x/sfinae2.C
new file mode 100644
index 00000000000..b9ef70d99cf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae2.C
@@ -0,0 +1,39 @@
+// PR c++/44967
+// { dg-options -std=c++0x }
+
+template <typename T> T&& declval();
+
+template<typename T1, typename T2, typename... Args>
+struct has_construct
+{
+ typedef char one;
+ typedef struct {char _m[2]; } two;
+
+ template<typename U1, typename U2, typename... Args2>
+ static decltype(declval<U1>().construct(declval<U2*>(), declval<Args2>()...), one()) test(int);
+ template<typename, typename, typename...>
+ static two test(...);
+
+ static const bool value = sizeof(test<T1, T2, Args...>(0)) == 1;
+};
+
+
+struct A0
+{};
+
+struct A1
+{
+ void construct(int*, int);
+};
+
+template<typename _Tp>
+struct A2
+{
+ template<typename _Tp1, typename... _Args>
+ void construct(_Tp1*, _Args&&...) {}
+};
+
+#define SA(X) static_assert(X,#X)
+SA((!has_construct<A0, int, int>::value)); // ok
+SA((has_construct<A1, int, int>::value)); // bang
+SA((has_construct<A2<int>, int>::value)); // bang
diff --git a/gcc/testsuite/g++.dg/cpp0x/union1.C b/gcc/testsuite/g++.dg/cpp0x/union1.C
new file mode 100644
index 00000000000..291853d5aae
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/union1.C
@@ -0,0 +1,34 @@
+// Negative test for C++0x unrestricted unions
+// { dg-options -std=c++0x }
+// { dg-prune-output "implicitly deleted because" }
+
+struct A
+{
+ A();
+ A(const A&);
+ ~A();
+};
+
+union B
+{
+ A a; // { dg-error "union member" }
+};
+
+B b; // { dg-error "B::B\\(\\)" }
+B b2(b); // { dg-error "B::B\\(const B&\\)" }
+
+struct C
+{
+ union
+ {
+ A a; // { dg-error "union member" }
+ };
+};
+
+C c; // { dg-error "C::C\\(\\)" }
+C c2(c); // { dg-error "C::C\\(const C&\\)" }
+
+// { dg-error "B::~B" "" { target *-*-* } 17 }
+// { dg-error "B::~B" "" { target *-*-* } 18 }
+// { dg-error "C::~C" "" { target *-*-* } 28 }
+// { dg-error "C::~C" "" { target *-*-* } 29 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/union2.C b/gcc/testsuite/g++.dg/cpp0x/union2.C
new file mode 100644
index 00000000000..4f193e281c8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/union2.C
@@ -0,0 +1,34 @@
+// Positive test for C++0x unrestricted unions
+// { dg-options -std=c++0x }
+
+struct A
+{
+ A();
+ A(const A&);
+ ~A();
+};
+
+union B
+{
+ A a;
+ B();
+ B(const B&);
+ ~B();
+};
+
+B b;
+B b2(b);
+
+struct C
+{
+ union
+ {
+ A a;
+ };
+ C();
+ C(const C&);
+ ~C();
+};
+
+C c;
+C c2(c);
diff --git a/gcc/testsuite/g++.dg/cpp0x/union3.C b/gcc/testsuite/g++.dg/cpp0x/union3.C
new file mode 100644
index 00000000000..f1e8ddb6109
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/union3.C
@@ -0,0 +1,69 @@
+// Runtime test for C++0x unrestricted unions
+// { dg-options -std=c++0x }
+// { dg-do run }
+
+int c, d;
+struct A
+{
+ int i;
+ A(): i(1) { ++c; }
+ A(const A&): i(2) { ++c; }
+ ~A() { ++d; }
+};
+
+union B
+{
+ A a;
+ B() { }
+ B(const B& b) { }
+ ~B() { }
+};
+
+struct C
+{
+ union { A a; };
+ C() { }
+ C(const C&) { }
+ ~C() { }
+};
+
+union D
+{
+ A a;
+ D(): a() { }
+ D(const D& d): a(d.a) { }
+ ~D() { a.~A(); }
+};
+
+struct E
+{
+ union { A a; };
+ E(): a() { }
+ E(const E& e): a (e.a) { }
+ ~E() { a.~A(); }
+};
+
+int main()
+{
+ {
+ B b1;
+ B b2(b1);
+
+ C c1;
+ C c2(c1);
+ }
+
+ if (c != 0 || d != 0)
+ return c+d*10;
+
+ {
+ D d1;
+ D d2(d1);
+
+ E e1;
+ E e2(e1);
+ }
+
+ if (c != 4 || d != 4)
+ return c*100+d*1000;
+}
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C b/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
index 593e080ac69..81360c2439f 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/const2b.C
@@ -1,5 +1,6 @@
/* { dg-do compile { target i386*-*-* } } */
/* { dg-options "-O -gdwarf-2 -dA -msse" } */
+/* { dg-require-effective-target sse } */
/* { dg-final { scan-assembler "DW_AT_const_value" } } */
typedef float FloatVect __attribute__((__vector_size__(16)));
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C b/gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C
new file mode 100644
index 00000000000..e0ef7f71ca3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/lineno-simple1.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-g -O0 -dA" }
+
+struct C { // { dg-function-on-line {_ZN1CC[12]Ev} }
+ virtual void
+ foo() {} // { dg-function-on-line _ZN1C3fooEv }
+};
+static C dummy;
+
+int
+main (void)
+{ // { dg-function-on-line main }
+}
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C
new file mode 100644
index 00000000000..2386baaacb9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-2.C
@@ -0,0 +1,37 @@
+/*
+ Origin: PR debug/45024
+ { dg-options "-g -dA -fno-merge-debug-strings" }
+ { dg-do compile }
+*/
+
+struct S {
+ template<typename Z> struct T { };
+};
+
+S::T<int> tval;
+
+/*
+We want to express that the DIE of S::T<int> must be a child of the DIE of S, like in assembly this output:
+
+ .uleb128 0x2 # (DIE (0x9e) DW_TAG_structure_type)
+ .ascii "S\0" # DW_AT_name
+ .byte 0x1 # DW_AT_byte_size
+ .byte 0x1 # DW_AT_decl_file (../../prtests/test-PR45024.cc)
+ .byte 0x1 # DW_AT_decl_line
+ .long 0xbc # DW_AT_sibling
+ .uleb128 0x3 # (DIE (0xa8) DW_TAG_structure_type)
+ .ascii "T<int>\0" # DW_AT_name
+ .byte 0x1 # DW_AT_byte_size
+ .byte 0x1 # DW_AT_decl_file (../../prtests/test-PR45024.cc)
+ .byte 0x2 # DW_AT_decl_line
+ .uleb128 0x4 # (DIE (0xb3) DW_TAG_template_type_param)
+ .ascii "Z\0" # DW_AT_name
+ .long 0xbc # DW_AT_type
+ .byte 0 # end of children of DIE 0xa8
+ .byte 0 # end of children of DIE 0x9e
+
+Hence the slightly odd regexp:
+
+ { dg-final { scan-assembler "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"S\\\\0\"\[ \t\]+#\[ \t\]+DW_AT_name\[\n\r\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_structure_type\\)\[\n\r\]+\[^\n\r\]*\"T<int>\\\\0\"\[ \t\]+\(.*\)?\\(DIE\[^\n\r\]*DW_TAG_template_type_param\\)\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*\[\n\r\]+\[^\n\r\]*#\[ \t\]+end of children of DIE\[^\n\r\]*\[\n\r\]+\[^\n\r\]*end of children of DIE\[^\n\r\]*" } }
+
+ */
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C
new file mode 100644
index 00000000000..2df002f6b00
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr44641.C
@@ -0,0 +1,41 @@
+// Origin: PR 44641
+// { dg-do compile }
+// { dg-options "-g -O0 -dA" }
+
+template <class A> struct MisplacedDbg;
+template<class T> struct MisplacedDbg<T*>;
+struct Full;
+template<> struct MisplacedDbg<Full>;
+
+struct Arg;
+typedef MisplacedDbg<Arg> Typedef1;
+typedef MisplacedDbg<Arg*> Typedef2;
+typedef MisplacedDbg<Full> Typedef3;
+
+template<typename T> struct Base {
+ virtual ~Base() {
+ }
+};
+
+template <>
+struct MisplacedDbg<Full> // { dg-function-on-line {_ZN12MisplacedDbgI4FullEC[12]Ev} }
+ // { dg-function-on-line {_ZN12MisplacedDbgI4FullED0Ev} { target *-*-* } 21 }
+
+ : public Base<int> {
+};
+
+template <class T>
+struct MisplacedDbg<T*> // { dg-function-on-line {_ZN12MisplacedDbgIP3ArgEC[12]Ev} }
+ // { dg-function-on-line {_ZN12MisplacedDbgIP3ArgED0Ev} { target *-*-* } 28 }
+ : public Base<int> {
+};
+
+template <class A>
+struct MisplacedDbg // { dg-function-on-line {_ZN12MisplacedDbgI3ArgEC[12]Ev} }
+ // { dg-function-on-line {_ZN12MisplacedDbgI3ArgED0Ev} { target *-*-* } 34 }
+ : public Base<int> {
+};
+
+static MisplacedDbg<Arg> static_var1;
+static MisplacedDbg<Arg*> static_var2;
+static MisplacedDbg<Full> static_var3;
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
index 543439da323..18d1df0d952 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/pubnames-1.C
@@ -1,7 +1,7 @@
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin PR debug/39706
+// { dg-do compile { target *-*-darwin* } }
// { dg-options "-g -dA -fno-merge-debug-strings" }
-// { dg-do compile }
//
// There should be one debug_pubnames section generated.
// On Darwin though, there is also a label pointing at the begining of the
diff --git a/gcc/testsuite/g++.dg/dg.exp b/gcc/testsuite/g++.dg/dg.exp
index 5758218a267..5851dcc94f2 100644
--- a/gcc/testsuite/g++.dg/dg.exp
+++ b/gcc/testsuite/g++.dg/dg.exp
@@ -1,4 +1,4 @@
-# Copyright (C) 2000, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2007, 2009, 2010 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -47,6 +47,7 @@ set tests [prune $tests $srcdir/$subdir/gomp/*]
set tests [prune $tests $srcdir/$subdir/tree-prof/*]
set tests [prune $tests $srcdir/$subdir/torture/*]
set tests [prune $tests $srcdir/$subdir/graphite/*]
+set tests [prune $tests $srcdir/$subdir/guality/*]
# Main loop.
dg-runtest $tests "" $DEFAULT_CXXFLAGS
diff --git a/gcc/testsuite/g++.dg/ext/altivec-17.C b/gcc/testsuite/g++.dg/ext/altivec-17.C
index e83c46b7039..54eff8a24ed 100644
--- a/gcc/testsuite/g++.dg/ext/altivec-17.C
+++ b/gcc/testsuite/g++.dg/ext/altivec-17.C
@@ -12,5 +12,5 @@ typedef vector__ bool__ int bool_simd_type;
void Foo (bool_simd_type const &a)
{
- simd_type const &v = a; // { dg-error "'const __vector.4. unsigned int&' from expression of type 'const __vector.4. __bool int'" }
+ simd_type const &v = a; // { dg-error "'const simd_type&' from expression of type 'const bool_simd_type'" }
}
diff --git a/gcc/testsuite/g++.dg/ext/altivec-2.C b/gcc/testsuite/g++.dg/ext/altivec-2.C
index 1185a79e5ec..eb8a92942bc 100644
--- a/gcc/testsuite/g++.dg/ext/altivec-2.C
+++ b/gcc/testsuite/g++.dg/ext/altivec-2.C
@@ -1,6 +1,6 @@
/* { dg-do compile { target powerpc*-*-* } } */
/* { dg-require-effective-target powerpc_altivec_ok } */
-/* { dg-options "-maltivec -Wall" } */
+/* { dg-options "-maltivec -Wall -Wno-unused-but-set-variable" } */
/* This test checks if AltiVec builtins accept const-qualified
arguments. */
diff --git a/gcc/testsuite/g++.dg/ext/pretty3.C b/gcc/testsuite/g++.dg/ext/pretty3.C
new file mode 100644
index 00000000000..01b14579af2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/pretty3.C
@@ -0,0 +1,19 @@
+// PR c++/16630
+// { dg-do compile }
+// { dg-options "" }
+extern "C" int printf (const char*, ...);
+
+template <class T>
+struct B { typedef T X; };
+
+template <class U>
+struct D
+{
+ const char* foo (typename B<U>::X) { return __PRETTY_FUNCTION__; }
+};
+
+int main ()
+{
+ printf ("%s\n", D<int>().foo (0));
+}
+// { dg-final { scan-assembler "const char\\* D<U>::foo\\(typename B<U>::X\\)" } }
diff --git a/gcc/testsuite/g++.dg/ext/vector14.C b/gcc/testsuite/g++.dg/ext/vector14.C
index 78109c1a676..8e792108fb8 100644
--- a/gcc/testsuite/g++.dg/ext/vector14.C
+++ b/gcc/testsuite/g++.dg/ext/vector14.C
@@ -1,6 +1,7 @@
// PR c++/35758
// { dg-do compile }
-// { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+// { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
+// { dg-require-effective-target sse }
// Ignore warning on some powerpc-linux configurations.
// { dg-prune-output "non-standard ABI extension" }
// { dg-prune-output "mangled name" }
diff --git a/gcc/testsuite/g++.dg/gomp/sections-4.C b/gcc/testsuite/g++.dg/gomp/sections-4.C
index 44e7de98c20..62a2ecddf9a 100644
--- a/gcc/testsuite/g++.dg/gomp/sections-4.C
+++ b/gcc/testsuite/g++.dg/gomp/sections-4.C
@@ -1,5 +1,5 @@
/* PR c++/24613 */
-/* { dg-compile } */
+/* { dg-do compile } */
#pragma omp section /* { dg-error "may only be used in" } */
diff --git a/gcc/testsuite/g++.dg/guality/guality.exp b/gcc/testsuite/g++.dg/guality/guality.exp
new file mode 100644
index 00000000000..9a1785036ef
--- /dev/null
+++ b/gcc/testsuite/g++.dg/guality/guality.exp
@@ -0,0 +1,53 @@
+# This harness is for tests that should be run at all optimisation levels.
+
+load_lib g++-dg.exp
+load_lib gcc-gdb-test.exp
+
+# Disable on darwin until radr://7264615 is resolved.
+if { [istarget *-*-darwin*] } {
+ return
+}
+
+proc check_guality {args} {
+ set result [eval check_compile guality_check executable $args "-g -O0"]
+ set lines [lindex $result 0]
+ set output [lindex $result 1]
+ set ret 0
+ if {[string match "" $lines]} {
+ set execout [g++_load "./$output"]
+ set ret [string match "*1 PASS, 0 FAIL, 0 UNRESOLVED*" $execout]
+ }
+ remote_file build delete $output
+ return $ret
+}
+
+dg-init
+
+global GDB
+if ![info exists ::env(GUALITY_GDB_NAME)] {
+ if [info exists GDB] {
+ set guality_gdb_name "$GDB"
+ } else {
+ set guality_gdb_name "[transform gdb]"
+ }
+ setenv GUALITY_GDB_NAME "$guality_gdb_name"
+}
+
+if {[check_guality "
+ #include \"$srcdir/$subdir/guality.h\"
+ volatile long int varl = 6;
+ int main (int argc, char *argv\[\])
+ {
+ GUALCHKVAL (varl);
+ return 0;
+ }
+"]} {
+ gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.C]] ""
+ gcc-dg-runtest [lsort [glob $srcdir/c-c++-common/guality/*.c]] ""
+}
+
+if [info exists guality_gdb_name] {
+ unsetenv GUALITY_GDB_NAME
+}
+
+dg-finish
diff --git a/gcc/testsuite/g++.dg/guality/guality.h b/gcc/testsuite/g++.dg/guality/guality.h
new file mode 100644
index 00000000000..dd858d28b4b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/guality/guality.h
@@ -0,0 +1 @@
+#include "../../gcc.dg/guality/guality.h"
diff --git a/gcc/testsuite/g++.dg/guality/redeclaration1.C b/gcc/testsuite/g++.dg/guality/redeclaration1.C
new file mode 100644
index 00000000000..16f2f0ca481
--- /dev/null
+++ b/gcc/testsuite/g++.dg/guality/redeclaration1.C
@@ -0,0 +1,26 @@
+// { dg-do run }
+// { dg-options "-g" }
+
+volatile int l;
+
+namespace S
+{
+ int i = 24;
+ void __attribute__((noinline))
+ f()
+ {
+ int i = 42;
+ l = i; // { dg-final { gdb-test 13 "i" "42" } }
+ {
+ extern int i;
+ l = i; // { dg-final { gdb-test 16 "i" "24" } }
+ }
+ }
+}
+
+int
+main (void)
+{
+ S::f ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/inherit/covariant17.C b/gcc/testsuite/g++.dg/inherit/covariant17.C
new file mode 100644
index 00000000000..b2de15f7ed6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/covariant17.C
@@ -0,0 +1,43 @@
+// PR c++/43120
+// { dg-do run }
+
+extern "C" void abort ();
+
+struct A {
+ int a;
+
+ A(int a_) : a(a_) {}
+
+ A(const A &other) { }
+
+ virtual void dummy() {}
+};
+
+struct B {
+ virtual B *clone() const = 0;
+};
+
+struct C : public virtual B {
+ virtual C *clone() const = 0;
+};
+
+struct E* ep;
+struct E : public A, public C {
+ E(int a_) : A(a_) { ep = this; }
+
+ virtual E *clone() const {
+ if (this != ep)
+ abort();
+ return 0;
+ }
+};
+
+int main() {
+ E *a = new E(123);
+ C *c = a;
+ B *b = a;
+ c->clone();
+ b->clone();
+ delete a;
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/inherit/covariant7.C b/gcc/testsuite/g++.dg/inherit/covariant7.C
index cbd58bb24e1..4d519ed400b 100644
--- a/gcc/testsuite/g++.dg/inherit/covariant7.C
+++ b/gcc/testsuite/g++.dg/inherit/covariant7.C
@@ -1,4 +1,6 @@
// { dg-do compile }
+// { dg-prune-output "direct base" }
+// { dg-options "-fdump-class-hierarchy" }
// Copyright (C) 2002 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 27 Dec 2002 <nathan@codesourcery.com>
@@ -27,7 +29,23 @@ struct c4 : virtual c3, virtual c0, virtual c1
int m;
};
-struct c6 : c0, c3, c4 // { dg-warning "direct base" "" }
+struct c6 : c0, c3, c4
{
virtual c1 &f2() volatile;
};
+
+// f2 appears four times in the c6 vtables:
+// once in c1-in-c3-in-c6 - covariant, virtual base, uses c1 vcall offset and c0 vbase offset
+// { dg-final { scan-tree-dump "24 c6::_ZTcv0_n16_v0_n12_NV2c62f2Ev" "class" { target ilp32 } } }
+// { dg-final { scan-tree-dump "48 c6::_ZTcv0_n32_v0_n24_NV2c62f2Ev" "class" { target lp64 } } }
+// once in c3-in-c6 - non-covariant, non-virtual base, calls f2 directly
+// { dg-final { scan-tree-dump "28 c6::f2" "class" { target ilp32 } } }
+// { dg-final { scan-tree-dump "56 c6::f2" "class" { target lp64 } } }
+// once in c1-in-c3-in-c4-in-c6 - lost primary
+// { dg-final { scan-tree-dump "80 0u" "class" { target ilp32 } } }
+// { dg-final { scan-tree-dump "160 0u" "class" { target lp64 } } }
+// once in c3-in-c4-in-c6 - c3 vcall offset
+// { dg-final { scan-tree-dump "84 c6::_ZTv0_n16_NV2c62f2Ev" "class" { target ilp32 } } }
+// { dg-final { scan-tree-dump "168 c6::_ZTv0_n32_NV2c62f2Ev" "class" { target lp64 } } }
+
+// { dg-final { cleanup-tree-dump "class" } }
diff --git a/gcc/testsuite/g++.dg/lto/20100721-1_0.C b/gcc/testsuite/g++.dg/lto/20100721-1_0.C
new file mode 100644
index 00000000000..09132e5992b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/20100721-1_0.C
@@ -0,0 +1,9 @@
+/* { dg-lto-do assemble } */
+
+static inline int __gthread_active_p (void) { }
+template <int rank, int dim> class Tensor;
+template <int dimension> struct G;
+template <int dim> class T {
+ typedef void A;
+ typedef Tensor<1,dim> F[G<dim>::v];
+};
diff --git a/gcc/testsuite/g++.dg/lto/20100722-1_0.C b/gcc/testsuite/g++.dg/lto/20100722-1_0.C
new file mode 100644
index 00000000000..72393950d03
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/20100722-1_0.C
@@ -0,0 +1,5 @@
+/* { dg-lto-do assemble } */
+
+template <class T> void void_cast_register(T *) __attribute__ ((used));
+template <class T> void void_cast_register(T *) { }
+
diff --git a/gcc/testsuite/g++.dg/opt/nrv16.C b/gcc/testsuite/g++.dg/opt/nrv16.C
new file mode 100644
index 00000000000..7b24d4a4ee0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/nrv16.C
@@ -0,0 +1,16 @@
+// PR c++/44808
+// { dg-do compile }
+
+struct S
+{
+ void *a, *b;
+ int c;
+};
+
+S
+foo ()
+{
+ S x;
+ S y = x;
+ return x;
+}
diff --git a/gcc/testsuite/g++.dg/other/i386-1.C b/gcc/testsuite/g++.dg/other/i386-1.C
index 5a91e603660..ec572ec948d 100644
--- a/gcc/testsuite/g++.dg/other/i386-1.C
+++ b/gcc/testsuite/g++.dg/other/i386-1.C
@@ -1,11 +1,9 @@
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
#include <xmmintrin.h>
-#include "cpuid.h"
-
static void
sse2_test (void)
{
@@ -25,14 +23,6 @@ sse2_test (void)
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- sse2_test ();
-
+ sse2_test ();
return 0;
}
diff --git a/gcc/testsuite/g++.dg/other/i386-2.C b/gcc/testsuite/g++.dg/other/i386-2.C
index 952fa14c364..729706852e2 100644
--- a/gcc/testsuite/g++.dg/other/i386-2.C
+++ b/gcc/testsuite/g++.dg/other/i386-2.C
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, abmintrin.h,
lwpintrin.h, popcntintrin.h and mm3dnow.h are usable with
diff --git a/gcc/testsuite/g++.dg/other/i386-3.C b/gcc/testsuite/g++.dg/other/i386-3.C
index 88dd7693891..75515efb42b 100644
--- a/gcc/testsuite/g++.dg/other/i386-3.C
+++ b/gcc/testsuite/g++.dg/other/i386-3.C
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, abmintrin.h,
lwpintrin.h, popcntintrin.h and mm3dnow.h are usable with
diff --git a/gcc/testsuite/g++.dg/other/mmintrin.C b/gcc/testsuite/g++.dg/other/mmintrin.C
index 417a1acc6de..8315f93d355 100644
--- a/gcc/testsuite/g++.dg/other/mmintrin.C
+++ b/gcc/testsuite/g++.dg/other/mmintrin.C
@@ -1,4 +1,5 @@
// { dg-do compile { target i?86-*-* x86_64-*-* } }
// { dg-options "-msse" }
+// { dg-require-effective-target sse }
#include <xmmintrin.h>
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/pr40446.C b/gcc/testsuite/g++.dg/other/pr40446.C
index dd0aa482075..72cd1960649 100644
--- a/gcc/testsuite/g++.dg/other/pr40446.C
+++ b/gcc/testsuite/g++.dg/other/pr40446.C
@@ -1,10 +1,9 @@
// PR middle-end/40446
// { dg-do run { target i?86-*-* x86_64-*-* } }
// { dg-options "-O1 -msse2" }
-// { dg-require-effective-target sse2 }
+// { dg-require-effective-target sse2_runtime }
#include <emmintrin.h>
-#include "cpuid.h"
extern "C" void abort ();
@@ -34,14 +33,6 @@ sse2_test ()
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- sse2_test ();
-
+ sse2_test ();
return 0;
}
diff --git a/gcc/testsuite/g++.dg/parse/error28.C b/gcc/testsuite/g++.dg/parse/error28.C
index 7e235a13b21..a0b1e7f690f 100644
--- a/gcc/testsuite/g++.dg/parse/error28.C
+++ b/gcc/testsuite/g++.dg/parse/error28.C
@@ -3,7 +3,7 @@
struct virt { virt () {} virt (int i) {} };
struct der : public virtual virt { // { dg-message "8:der::der" }
- der (int i) : virt(i) {} // { dg-message "3:candidates are: der" }
+ der (int i) : virt(i) {} // { dg-message "3:der::der" }
};
struct top : public der {
top () {} // { dg-bogus "der\\(const" }
diff --git a/gcc/testsuite/g++.dg/parse/template25.C b/gcc/testsuite/g++.dg/parse/template25.C
new file mode 100644
index 00000000000..8ffcd121e18
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/template25.C
@@ -0,0 +1,14 @@
+// PR c++/22318. Improve diagnostic for local template declaration.
+// { dg-do compile }
+void f(void)
+{
+ template<typename T> class A /* { dg-error "a template declaration cannot appear at block scope" } */
+ {
+ };
+}
+
+void g(void)
+{
+ template f<int>(); /* { dg-error "expected primary-expression" } */
+ /* { dg-error "expected ';'" "" { target *-*-* } 12 } */
+}
diff --git a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c
index 6327095f7cd..e5b0566837d 100644
--- a/gcc/testsuite/g++.dg/plugin/attribute_plugin.c
+++ b/gcc/testsuite/g++.dg/plugin/attribute_plugin.c
@@ -10,6 +10,7 @@
#include "intl.h"
#include "toplev.h"
#include "plugin.h"
+#include "diagnostic.h"
int plugin_is_GPL_compatible;
@@ -43,7 +44,7 @@ handle_pre_generic (void *event_data, void *data)
{
tree fndecl = (tree) event_data;
tree arg;
- for (arg = DECL_ARGUMENTS(fndecl); arg; arg = TREE_CHAIN (arg)) {
+ for (arg = DECL_ARGUMENTS(fndecl); arg; arg = DECL_CHAIN (arg)) {
tree attr;
for (attr = DECL_ATTRIBUTES (arg); attr; attr = TREE_CHAIN (attr)) {
tree attrname = TREE_PURPOSE (attr);
diff --git a/gcc/testsuite/g++.dg/plugin/dumb_plugin.c b/gcc/testsuite/g++.dg/plugin/dumb_plugin.c
index f12a6a0d35b..5bbd5d790fe 100644
--- a/gcc/testsuite/g++.dg/plugin/dumb_plugin.c
+++ b/gcc/testsuite/g++.dg/plugin/dumb_plugin.c
@@ -10,6 +10,7 @@
#include "tree-pass.h"
#include "intl.h"
#include "toplev.h"
+#include "diagnostic.h"
int plugin_is_GPL_compatible;
diff --git a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
index 4a9ea47195d..940c302df7d 100644
--- a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
+++ b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
@@ -14,6 +14,7 @@
#include "tree-pass.h"
#include "intl.h"
#include "toplev.h"
+#include "diagnostic.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 df42abd27df..84d2801d202 100644
--- a/gcc/testsuite/g++.dg/plugin/selfassign.c
+++ b/gcc/testsuite/g++.dg/plugin/selfassign.c
@@ -14,6 +14,7 @@
#include "tree-pass.h"
#include "intl.h"
#include "plugin-version.h"
+#include "diagnostic.h"
int plugin_is_GPL_compatible;
@@ -52,9 +53,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 +65,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 +115,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 +153,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 +199,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)
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/crash101.C b/gcc/testsuite/g++.dg/template/crash101.C
new file mode 100644
index 00000000000..c59737a8938
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash101.C
@@ -0,0 +1,12 @@
+// PR c++/44039
+
+struct locale { };
+
+template<class charT>
+ void
+ foo()
+ { locale::locale(); } // { dg-error "cannot call|function-style" }
+
+void
+bar()
+{ foo<char>(); }
diff --git a/gcc/testsuite/g++.dg/template/dtor7.C b/gcc/testsuite/g++.dg/template/dtor7.C
index e96f56397eb..186b561e9c3 100644
--- a/gcc/testsuite/g++.dg/template/dtor7.C
+++ b/gcc/testsuite/g++.dg/template/dtor7.C
@@ -1,5 +1,5 @@
// PR c++/40373
-// { dg-compile }
+// { dg-do compile }
struct A;
namespace
diff --git a/gcc/testsuite/g++.dg/template/partial8.C b/gcc/testsuite/g++.dg/template/partial8.C
new file mode 100644
index 00000000000..4db7e18689e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/partial8.C
@@ -0,0 +1,4 @@
+// PR c++/32505
+template <class T> struct A { };
+A<int*> a;
+template <class T> struct A<T*> { }; // { dg-error "A<int\\*>" }
diff --git a/gcc/testsuite/g++.dg/template/ptrmem17.C b/gcc/testsuite/g++.dg/template/ptrmem17.C
index a79e3c882fa..5c5ee3fc30e 100644
--- a/gcc/testsuite/g++.dg/template/ptrmem17.C
+++ b/gcc/testsuite/g++.dg/template/ptrmem17.C
@@ -7,4 +7,4 @@ template<int> struct A
~A() { &A::i; } // { dg-error "reference" }
};
-A<0> a; // { dg-message "instantiated" }
+A<0> a;
diff --git a/gcc/testsuite/g++.dg/template/ptrmem22.C b/gcc/testsuite/g++.dg/template/ptrmem22.C
new file mode 100644
index 00000000000..762f377f5b7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/ptrmem22.C
@@ -0,0 +1,29 @@
+// PR c++/44778
+
+enum Healpix_Ordering_Scheme { RING, NEST };
+
+class Healpix_Base
+ {
+ protected:
+ Healpix_Ordering_Scheme scheme_;
+ int nest2ring (int pix) const;
+ int ring2nest (int pix) const;
+
+ typedef int (Healpix_Base::*swapfunc)(int pix) const;
+ };
+
+template<typename T> class Healpix_Map: public Healpix_Base
+ {
+ public:
+ void Import_nograde (const Healpix_Map<T> &orig)
+ {
+ swapfunc swapper = (scheme_ == NEST) ?
+ &Healpix_Map::ring2nest : &Healpix_Map::nest2ring;
+ }
+ };
+
+int main()
+ {
+ Healpix_Map<double> a,b;
+ a.Import_nograde(b);
+ }
diff --git a/gcc/testsuite/g++.dg/template/sfinae19.C b/gcc/testsuite/g++.dg/template/sfinae19.C
new file mode 100644
index 00000000000..59be183feb5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae19.C
@@ -0,0 +1,44 @@
+// PR c++/44907
+
+struct A { };
+
+struct B
+: public A { };
+
+struct C
+: public A { };
+
+struct D
+: public B, public C { };
+
+template<bool, typename T = void> struct enable_if { typedef T type; };
+template<typename T> struct enable_if<false, T> { };
+
+template<typename From, typename To>
+ class mini_is_convertible
+ {
+ typedef char one;
+ typedef struct { char arr[2]; } two;
+
+ template<typename To1>
+ static void test_aux(To1);
+
+ template<typename To1, typename From1>
+ static typename
+ enable_if<(sizeof(test_aux<To1>(From1()), 1) > 0), one>::type
+ test(int);
+
+ template<typename, typename>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<To, From>(0)) == 1;
+ };
+
+template<typename From, typename To>
+ const bool mini_is_convertible<From, To>::value;
+
+int Test1[mini_is_convertible<D*, A*>::value ? -1 : 1];
+int Test2[mini_is_convertible<A*, D*>::value ? -1 : 1];
+int Test3[mini_is_convertible<D, A>::value ? -1 : 1];
+int Test4[mini_is_convertible<A, D>::value ? -1 : 1];
diff --git a/gcc/testsuite/g++.dg/template/sfinae20.C b/gcc/testsuite/g++.dg/template/sfinae20.C
new file mode 100644
index 00000000000..9767bc02984
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae20.C
@@ -0,0 +1,45 @@
+// PR c++/44907
+// { dg-options "-std=c++0x" }
+
+#include <utility>
+
+struct A { };
+
+struct B
+: public A { };
+
+struct C
+: public A { };
+
+struct D
+: public B, public C { };
+
+template<typename From, typename To>
+ class mini_is_convertible
+ {
+ typedef char one;
+ typedef struct { char arr[2]; } two;
+
+ template<typename To1>
+ static void test_aux(To1);
+
+ template<typename To1, typename From1>
+ static decltype(test_aux<To1>(std::declval<From1>()), one())
+ test(int);
+
+ template<typename, typename>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<To, From>(0)) == 1;
+ };
+
+template<typename From, typename To>
+ const bool mini_is_convertible<From, To>::value;
+
+static_assert (!mini_is_convertible<D*, A*>::value, "");
+static_assert (!mini_is_convertible<A*, D*>::value, "");
+static_assert (!mini_is_convertible<D&, A&>::value, "");
+static_assert (!mini_is_convertible<A&, D&>::value, "");
+static_assert (!mini_is_convertible<D, A>::value, "");
+static_assert (!mini_is_convertible<A, D>::value, "");
diff --git a/gcc/testsuite/g++.dg/template/sfinae21.C b/gcc/testsuite/g++.dg/template/sfinae21.C
new file mode 100644
index 00000000000..6086f2f9e7d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae21.C
@@ -0,0 +1,40 @@
+// PR c++/44908
+
+struct A { };
+
+struct B
+: public virtual A { };
+
+template<bool, typename T = void> struct enable_if { typedef T type; };
+template<typename T> struct enable_if<false, T> { };
+
+template<typename From, typename To>
+ class mini_is_convertible
+ {
+ typedef char one;
+ typedef struct { char arr[2]; } two;
+
+ template<typename To1>
+ static void test_aux(To1);
+
+ template<typename To1, typename From1>
+ static typename
+ enable_if<(sizeof(test_aux<To1>(From1()), 1) > 0), one>::type
+ test(int);
+
+ template<typename, typename>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<To, From>(0)) == 1;
+ };
+
+template<typename From, typename To>
+ const bool mini_is_convertible<From, To>::value;
+
+int Test1[mini_is_convertible<int (B::*) (int),
+ int (A::*) (int)>::value ? -1 : 1];
+int Test2[mini_is_convertible<int (B::*), int (A::*)>::value ? -1 : 1];
+int Test3[mini_is_convertible<int (A::*) (int),
+ int (B::*) (int)>::value ? -1 : 1];
+int Test4[mini_is_convertible<int (A::*), int (B::*)>::value ? -1 : 1];
diff --git a/gcc/testsuite/g++.dg/template/sfinae22.C b/gcc/testsuite/g++.dg/template/sfinae22.C
new file mode 100644
index 00000000000..cdac99d91b7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae22.C
@@ -0,0 +1,39 @@
+// PR c++/44908
+// { dg-options "-std=c++0x" }
+
+#include <utility>
+
+struct A { };
+
+struct B
+: public virtual A { };
+
+template<typename From, typename To>
+ class mini_is_convertible
+ {
+ typedef char one;
+ typedef struct { char arr[2]; } two;
+
+ template<typename To1>
+ static void test_aux(To1);
+
+ template<typename To1, typename From1>
+ static decltype(test_aux<To1>(std::declval<From1>()), one())
+ test(int);
+
+ template<typename, typename>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<To, From>(0)) == 1;
+ };
+
+template<typename From, typename To>
+ const bool mini_is_convertible<From, To>::value;
+
+static_assert (!mini_is_convertible<int (B::*) (int),
+ int (A::*) (int)>::value, "");
+static_assert (!mini_is_convertible<int (B::*), int (A::*)>::value, "");
+static_assert (!mini_is_convertible<int (A::*) (int),
+ int (B::*) (int)>::value, "");
+static_assert (!mini_is_convertible<int (A::*), int (B::*)>::value, "");
diff --git a/gcc/testsuite/g++.dg/template/sfinae23.C b/gcc/testsuite/g++.dg/template/sfinae23.C
new file mode 100644
index 00000000000..9e0197a7050
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae23.C
@@ -0,0 +1,23 @@
+// PR c++/44969
+// { dg-options "-std=c++0x" }
+
+template<typename Tp, typename... Args>
+ class mini_is_constructible
+ {
+ typedef char one;
+ typedef struct { char arr[2]; } two;
+
+ template<typename Tp1, typename... Args1>
+ static decltype(Tp1(Args1()...), one())
+ test(int);
+
+ template<typename, typename...>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<Tp, Args...>(0)) == 1;
+ };
+
+class A { };
+
+int Test[mini_is_constructible<int, A, A>::value ? -1 : 1];
diff --git a/gcc/testsuite/g++.dg/template/sfinae24.C b/gcc/testsuite/g++.dg/template/sfinae24.C
new file mode 100644
index 00000000000..7138c96e66f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae24.C
@@ -0,0 +1,26 @@
+// PR c++/44969
+
+template<bool, typename T = void> struct enable_if { typedef T type; };
+template<typename T> struct enable_if<false, T> { };
+
+template<typename Tp, typename Arg1, typename Arg2>
+ class mini_is_constructible
+ {
+ typedef char one;
+ typedef struct { char arr[2]; } two;
+
+ template<typename Tp1, typename Arg1_, typename Arg2_>
+ static typename
+ enable_if<(sizeof(Tp1(Arg1_(), Arg2_()), 1) > 0), one>::type
+ test(int);
+
+ template<typename, typename, typename>
+ static two test(...);
+
+ public:
+ static const bool value = sizeof(test<Tp, Arg1, Arg2>(0)) == 1;
+ };
+
+class A { };
+
+int Test[mini_is_constructible<int, A, A>::value ? -1 : 1];
diff --git a/gcc/testsuite/g++.dg/template/warn1.C b/gcc/testsuite/g++.dg/template/warn1.C
index 0cdffcd3c51..2b804f7ca8f 100644
--- a/gcc/testsuite/g++.dg/template/warn1.C
+++ b/gcc/testsuite/g++.dg/template/warn1.C
@@ -9,8 +9,8 @@
template <class T> void Foo(T i)
{
i++, i++;
- i, i++; // { dg-warning "left-hand operand" "" }
- i++, i; // { dg-warning "right-hand operand" "" }
+ i, i++; // { dg-warning "left operand" "" }
+ i++, i; // { dg-warning "right operand" "" }
for (;; --i, ++i)
;
}
diff --git a/gcc/testsuite/g++.dg/tls/static-1.C b/gcc/testsuite/g++.dg/tls/static-1.C
index 027a9429766..506b0fcf7a0 100644
--- a/gcc/testsuite/g++.dg/tls/static-1.C
+++ b/gcc/testsuite/g++.dg/tls/static-1.C
@@ -1,6 +1,7 @@
// { dg-do run }
// { dg-options "-O2" }
// { dg-require-effective-target tls_runtime }
+// { dg-add-options tls }
// { dg-additional-sources "static-1a.cc" }
extern "C" void abort ();
diff --git a/gcc/testsuite/g++.dg/tls/static-1a.cc b/gcc/testsuite/g++.dg/tls/static-1a.cc
index 47a7a2717c0..1c6109f861e 100644
--- a/gcc/testsuite/g++.dg/tls/static-1a.cc
+++ b/gcc/testsuite/g++.dg/tls/static-1a.cc
@@ -1,6 +1,7 @@
// { dg-do run }
// { dg-options "-O2" }
// { dg-require-effective-target tls_runtime }
+// { dg-add-options tls }
// { dg-additional-sources "static-1a.cc" }
struct A
diff --git a/gcc/testsuite/g++.dg/torture/20100702-1.C b/gcc/testsuite/g++.dg/torture/20100702-1.C
new file mode 100644
index 00000000000..3d223fffb48
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/20100702-1.C
@@ -0,0 +1,37 @@
+// { dg-do compile }
+// { dg-options "-fprefetch-loop-arrays -w" }
+
+class ggPoint3 {
+public:
+ ggPoint3();
+ inline double &x() {
+ return e[0];
+ }
+ inline double &y() {
+ return e[1];
+ }
+ ggPoint3(const ggPoint3 &p);
+ double e[3];
+};
+class ggBox3 {
+public:
+ ggPoint3 min() const;
+};
+class ggHAffineMatrix3;
+ggPoint3 operator*(const ggHAffineMatrix3 &m, const ggPoint3 &v);
+void foo (ggPoint3 *);
+void SetMatrix(ggHAffineMatrix3& toworld, ggBox3& box)
+{
+ ggPoint3 p[2][2][2];
+ int i, j, k;
+ for (i = 0; i < 2; j++)
+ for (k = 0; k < 2; k++)
+ {
+ if (i == 0)
+ p[i][j][k].x() = box.min().x();
+ if (j == 0)
+ p[i][j][k].y() = box.min().y();
+ p[i][j][k] = toworld * p[i][j][k];
+ }
+ foo (&p[0][0][0]);
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr36745.C b/gcc/testsuite/g++.dg/torture/pr36745.C
index 86047f1f0d8..53845aaa78e 100644
--- a/gcc/testsuite/g++.dg/torture/pr36745.C
+++ b/gcc/testsuite/g++.dg/torture/pr36745.C
@@ -52,6 +52,7 @@ public: inline QMap ():d (&QMapData::shared_null)
};
struct QVectorData
{
+ QBasicAtomicInt ref;
static QVectorData shared_null;
};
template < typename T > struct QVectorTypedData
diff --git a/gcc/testsuite/g++.dg/torture/pr36960.C b/gcc/testsuite/g++.dg/torture/pr36960.C
new file mode 100644
index 00000000000..280a6755d95
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr36960.C
@@ -0,0 +1,22 @@
+// { dg-do run }
+
+struct Lower {
+ const int& ref;
+ Lower(const int& ref) : ref(ref) { }
+};
+struct Middle : public virtual Lower {
+ Middle(const int& ref) : Lower(ref) { }
+};
+struct Upper : public Middle {
+ Upper(const int& ref) : Lower(ref), Middle(ref) { }
+ int get() { return ref; }
+};
+extern "C" void abort (void);
+int main()
+{
+ int i = 0;
+ Upper upper(i);
+ if (upper.get() != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr44809.C b/gcc/testsuite/g++.dg/torture/pr44809.C
new file mode 100644
index 00000000000..b6615f23f1c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr44809.C
@@ -0,0 +1,6 @@
+// { dg-do compile }
+unsigned int mEvictionRank[(1 << 5)];
+void Unswap(int i)
+{
+ mEvictionRank[i] = ({ unsigned int __v = i; __v; });
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr44813.C b/gcc/testsuite/g++.dg/torture/pr44813.C
new file mode 100644
index 00000000000..1dc01b06a17
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr44813.C
@@ -0,0 +1,60 @@
+typedef unsigned int PRUint32;
+typedef int PRInt32;
+typedef unsigned long PRUint64;
+typedef int PRIntn;
+typedef PRIntn PRBool;
+struct nsRect {
+ nsRect(const nsRect& aRect) { }
+};
+enum nsCompatibility { eCompatibility_NavQuirks = 3 };
+class gfxContext;
+typedef PRUint64 nsFrameState;
+class nsPresContext {
+public:
+ nsCompatibility CompatibilityMode() const { }
+};
+class nsStyleContext {
+public:
+ PRBool HasTextDecorations() const;
+};
+class nsIFrame {
+public:
+ nsPresContext* PresContext() const;
+ nsStyleContext* GetStyleContext() const;
+ nsFrameState GetStateBits() const;
+ nsRect GetOverflowRect() const;
+};
+class nsFrame : public nsIFrame { };
+class nsLineList_iterator { };
+class nsLineList {
+public:
+ typedef nsLineList_iterator iterator;
+};
+class gfxSkipCharsIterator { };
+class gfxTextRun {
+public:
+ class PropertyProvider { };
+};
+class nsTextFrame : public nsFrame
+{
+ virtual nsRect ComputeTightBounds(gfxContext* aContext) const;
+ gfxSkipCharsIterator EnsureTextRun(gfxContext* aReferenceContext = 0L,
+ nsIFrame* aLineContainer = 0L,
+ const nsLineList::iterator* aLine = 0L,
+ PRUint32* aFlowEndInTextRun = 0L);
+};
+class PropertyProvider : public gfxTextRun::PropertyProvider
+{
+public:
+ PropertyProvider(nsTextFrame* aFrame, const gfxSkipCharsIterator& aStart);
+ PRInt32 mLength[64];
+};
+nsRect nsTextFrame::ComputeTightBounds(gfxContext* aContext) const
+{
+ if ((GetStyleContext()->HasTextDecorations()
+ && eCompatibility_NavQuirks == PresContext()->CompatibilityMode())
+ || (GetStateBits() & (nsFrameState(1) << (23))))
+ return GetOverflowRect();
+ gfxSkipCharsIterator iter = const_cast<nsTextFrame*>(this)->EnsureTextRun();
+ PropertyProvider provider(const_cast<nsTextFrame*>(this), iter);
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr44826.C b/gcc/testsuite/g++.dg/torture/pr44826.C
new file mode 100644
index 00000000000..aece1407070
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr44826.C
@@ -0,0 +1,44 @@
+typedef unsigned short PRUint16;
+typedef PRUint16 PRUnichar;
+template <class CharT> struct nsCharTraits {
+};
+class nsAString_internal {
+public:
+ typedef PRUnichar char_type;
+};
+class nsString : public nsAString_internal {
+public:
+ typedef nsString self_type;
+ nsString( const self_type& str );
+};
+class nsDependentString : public nsString {
+public:
+ explicit nsDependentString( const char_type* data );
+};
+typedef struct sqlite3_stmt sqlite3_stmt;
+const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
+class nsIVariant { };
+template <typename DataType> struct variant_storage_traits {
+ typedef DataType ConstructorType;
+ typedef DataType StorageType;
+ static inline StorageType storage_conversion(ConstructorType aData) {
+ return aData;
+ }
+};
+template <typename DataType> class Variant : public nsIVariant {
+public:
+ Variant(typename variant_storage_traits<DataType>::ConstructorType aData)
+ : mData(variant_storage_traits<DataType>::storage_conversion(aData)) {}
+ typename variant_storage_traits<DataType>::StorageType mData;
+};
+typedef Variant<nsString> TextVariant;
+class Row {
+ void initialize(sqlite3_stmt *aStatement);
+};
+void Row::initialize(sqlite3_stmt *aStatement)
+{
+ nsDependentString str(static_cast<const PRUnichar
+*>(::sqlite3_column_text16(aStatement, 0)));
+ new TextVariant(str);
+}
+
diff --git a/gcc/testsuite/g++.dg/torture/pr44900.C b/gcc/testsuite/g++.dg/torture/pr44900.C
new file mode 100644
index 00000000000..5c0efcb4b4e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr44900.C
@@ -0,0 +1,76 @@
+/* { dg-do run { target i?86-*-* x86_64-*-* } } */
+/* { dg-options "-msse" } */
+/* { dg-require-effective-target sse } */
+
+typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
+typedef float __v4sf __attribute__ ((__vector_size__ (16)));
+
+extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__,
+__artificial__))
+_mm_set_ps (const float __Z, const float __Y, const float __X, const float __W)
+{
+ return __extension__ (__m128)(__v4sf){ __W, __X, __Y, __Z };
+}
+
+struct vec
+{
+ union {
+ __m128 v;
+ float e[4];
+ };
+
+ static const vec & zero()
+ {
+ static const vec v = _mm_set_ps(0, 0, 0, 0);
+ return v;
+ }
+
+ vec() {}
+ vec(const __m128 & a) : v(a) {}
+
+ operator const __m128&() const { return v; }
+};
+
+struct vec2
+{
+ vec _v1;
+ vec _v2;
+
+ vec2() {}
+ vec2(const vec & a, const vec & b) : _v1(a), _v2(b) {}
+
+ static vec2 load(const float * a)
+ {
+ return vec2(
+ __builtin_ia32_loadups(&a[0]),
+ __builtin_ia32_loadups(&a[4]));
+ }
+
+ const vec & v1() const { return _v1; }
+ const vec & v2() const { return _v2; }
+};
+
+extern "C" void abort(void);
+
+
+inline bool operator==(const vec & a, const vec & b)
+{ return 0xf == __builtin_ia32_movmskps(__builtin_ia32_cmpeqps(a, b)); }
+
+int main( int argc, char * argv[] )
+{
+ __attribute__((aligned(16))) float data[] =
+ { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5 };
+
+ float * p = &data[2];
+ vec2 a;
+
+ a = vec2::load(p);
+
+ vec v1 = a.v1();
+ vec v2 = a.v2();
+
+ if (v2.e[3] != 7.0)
+ abort();
+
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr44915.C b/gcc/testsuite/g++.dg/torture/pr44915.C
new file mode 100644
index 00000000000..ba7e9660622
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr44915.C
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-findirect-inlining" } */
+
+struct A;
+
+typedef void (A::*f_ptr) ();
+
+void dummy (f_ptr) { }
+
+void call_dummy (f_ptr cb)
+{
+ dummy (cb);
+}
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/pr19952.C b/gcc/testsuite/g++.dg/tree-ssa/pr19952.C
index 92d669c1415..54589a294cc 100644
--- a/gcc/testsuite/g++.dg/tree-ssa/pr19952.C
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr19952.C
@@ -1,5 +1,5 @@
/* PR 19952 */
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-options "-ftree-vectorize -O2" } */
int i;
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/tree-ssa/pr44706.C b/gcc/testsuite/g++.dg/tree-ssa/pr44706.C
new file mode 100644
index 00000000000..39904d8b9e0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr44706.C
@@ -0,0 +1,46 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-fnsplit" } */
+class MemoryManager;
+class XMLExcepts {
+public :
+ enum Codes {
+ AttrList_BadIndex
+ };
+};
+class XMLException {
+public:
+ XMLException(const char* const srcFile, const unsigned int srcLine,
+MemoryManager* const memoryManager = 0);
+};
+class ArrayIndexOutOfBoundsException : public XMLException {
+public:
+ ArrayIndexOutOfBoundsException(const char* const srcFile , const unsigned
+int srcLine , const XMLExcepts::Codes toThrow , MemoryManager* memoryManager =
+0) : XMLException(srcFile, srcLine, memoryManager) {
+ }
+};
+class XMLAttDef {
+ bool fExternalAttribute;
+};
+class XMLAttDefList {
+public:
+ MemoryManager* getMemoryManager() const;
+};
+class DTDAttDef : public XMLAttDef {
+};
+class DTDAttDefList : public XMLAttDefList {
+ virtual const XMLAttDef &getAttDef(unsigned int index) const ;
+ DTDAttDef** fArray;
+ unsigned int fCount;
+};
+const XMLAttDef &DTDAttDefList::getAttDef(unsigned int index) const {
+ if(index >= fCount)
+ throw ArrayIndexOutOfBoundsException("foo.cpp", 0,
+XMLExcepts::AttrList_BadIndex, getMemoryManager());
+ return *(fArray[index]);
+}
+
+/* Mistake in branch prediction caused us to split away real body of the function keeping
+ only throw () invokation. This is bad idea. */
+/* { dg-final { scan-tree-dump-not "Splitting function" "fnsplit"} } */
+/* { dg-final { cleanup-tree-dump "fnsplit" } } */
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr44914.C b/gcc/testsuite/g++.dg/tree-ssa/pr44914.C
new file mode 100644
index 00000000000..57ca7e83f17
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr44914.C
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fipa-sra -fnon-call-exceptions" } */
+
+struct A
+{
+ ~A () { }
+};
+
+struct B
+{
+ A a;
+ int i;
+ void f (int) { }
+ B ()
+ {
+ f (i);
+ }
+};
+
+B b;
diff --git a/gcc/testsuite/g++.dg/vect/pr44861.cc b/gcc/testsuite/g++.dg/vect/pr44861.cc
new file mode 100644
index 00000000000..07c59a1382d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/vect/pr44861.cc
@@ -0,0 +1,34 @@
+// { dg-do compile }
+
+bool f();
+
+struct counted_base {
+ virtual void destroy() { }
+ void release() { if (f()) destroy(); }
+};
+
+struct shared_count {
+ shared_count() { }
+ ~shared_count() { if (pi) pi->release(); }
+ shared_count(shared_count& r) : pi(r.pi) { if (pi) pi->release(); }
+ counted_base* pi;
+};
+
+struct Foo;
+
+struct shared_ptr {
+ Foo& operator*() { return *ptr; }
+ Foo* ptr;
+ shared_count refcount;
+};
+
+struct Bar {
+ Bar(Foo&, shared_ptr);
+};
+
+void g() {
+ shared_ptr foo;
+ new Bar(*foo, foo);
+}
+
+// { dg-final { cleanup-tree-dump "vect" } }
diff --git a/gcc/testsuite/g++.dg/vect/vect.exp b/gcc/testsuite/g++.dg/vect/vect.exp
index aa450661107..fe173429a76 100644
--- a/gcc/testsuite/g++.dg/vect/vect.exp
+++ b/gcc/testsuite/g++.dg/vect/vect.exp
@@ -75,11 +75,8 @@ if [istarget "powerpc-*paired*"] {
} elseif { [istarget "spu-*-*"] } {
set dg-do-what-default run
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
- if { ![check_effective_target_sse2] } then {
- return
- }
lappend DEFAULT_VECTCFLAGS "-msse2"
- if [check_sse2_hw_available] {
+ if { [check_effective_target_sse2_runtime] } {
set dg-do-what-default run
} else {
set dg-do-what-default compile
diff --git a/gcc/testsuite/g++.dg/warn/Wshadow-7.C b/gcc/testsuite/g++.dg/warn/Wshadow-7.C
new file mode 100644
index 00000000000..5de952ee790
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wshadow-7.C
@@ -0,0 +1,37 @@
+// PR c++/44128
+// { dg-options "-Wshadow" }
+
+typedef long My_ssize_t; // { dg-warning "shadowed declaration" }
+typedef int Foo; // { dg-warning "shadowed declaration" }
+struct Bar1 { // { dg-bogus "shadowed declaration" }
+ int a;
+};
+struct Bar2 { // { dg-warning "shadowed declaration" }
+ int a;
+};
+
+void func() {
+ typedef int My_ssize_t; // { dg-warning "shadows a global" }
+ typedef char My_Num; // { dg-warning "shadowed declaration" }
+ {
+ typedef short My_Num; // { dg-warning "shadows a previous local" }
+ }
+ int Foo; // { dg-warning "shadows a global" }
+ float Bar1; // { dg-bogus "shadows a global" }
+ struct Bar2 { // { dg-warning "shadows a global" }
+ int a;
+ };
+ struct Bar3 { // { dg-warning "shadowed declaration" }
+ int a;
+ };
+ struct Bar4 { // { dg-bogus "shadowed declaration" }
+ int a;
+ };
+ {
+ struct Bar3 { // { dg-warning "shadows a previous local" }
+ int a;
+ };
+ char Bar4; // { dg-bogus "shadows a previous local" }
+ int My_Num; // { dg-warning "shadows a previous local" }
+ }
+}
diff --git a/gcc/testsuite/g++.dg/warn/noeffect2.C b/gcc/testsuite/g++.dg/warn/noeffect2.C
index 01323659597..451e0382a86 100644
--- a/gcc/testsuite/g++.dg/warn/noeffect2.C
+++ b/gcc/testsuite/g++.dg/warn/noeffect2.C
@@ -10,11 +10,11 @@
extern "C" void FormatDisk();
template <class T>
struct C {
- C(){ FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" }
+ C(){ FormatDisk(), 0; } // { dg-warning "right operand of comma" "" }
};
template struct C<int>; // { dg-message "instantiated" }
template <class T>
- void f() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" }
+ void f() { FormatDisk(), 0; } // { dg-warning "right operand of comma" "" }
template void f<int> (); // { dg-message "instantiated" }
-void g() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" }
+void g() { FormatDisk(), 0; } // { dg-warning "right operand of comma" "" }
diff --git a/gcc/testsuite/g++.dg/warn/volatile1.C b/gcc/testsuite/g++.dg/warn/volatile1.C
index 5b1050f9a1c..ac9dd4df354 100644
--- a/gcc/testsuite/g++.dg/warn/volatile1.C
+++ b/gcc/testsuite/g++.dg/warn/volatile1.C
@@ -8,5 +8,5 @@ struct A
};
void A::baz() volatile
{
- *this; // { dg-warning "will not be accessed" }
+ *this; // { dg-warning "indirection will not access" }
}
diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C
index cb313667ebd..1a96e8e3b06 100644
--- a/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C
+++ b/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C
@@ -1,4 +1,6 @@
// { dg-do assemble }
+// { dg-prune-output "note" }
+
// g++ 1.36.1 bug 900121_02
// Assignment of structs is defined as memberwise assignment,
diff --git a/gcc/testsuite/g++.old-deja/g++.ext/anon2.C b/gcc/testsuite/g++.old-deja/g++.ext/anon2.C
index 6cf16bf2412..5bde08db952 100644
--- a/gcc/testsuite/g++.old-deja/g++.ext/anon2.C
+++ b/gcc/testsuite/g++.old-deja/g++.ext/anon2.C
@@ -1,5 +1,6 @@
// { dg-do assemble }
// { dg-options "" }
+// { dg-prune-output "note" }
struct S
{
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc6.C b/gcc/testsuite/g++.old-deja/g++.mike/misc6.C
index 5fbca65b952..1a07c12b34a 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/misc6.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/misc6.C
@@ -1,4 +1,6 @@
// { dg-do assemble }
+// { dg-prune-output "note" }
+
// GROUPS uncaught
// Cfront bug A.4 (See Language System Release Notes for the
// SPARCompiler C++ version 3.0)
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/pr44707.c b/gcc/testsuite/gcc.c-torture/compile/pr44707.c
new file mode 100644
index 00000000000..9031f0042c9
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44707.c
@@ -0,0 +1,14 @@
+extern struct { int a, b, c, d; } v;
+extern int w;
+
+void
+foo (void)
+{
+ int e1 = v.a;
+ int e2 = w;
+ int e3 = v.b;
+ int e4 = v.c;
+ int e5 = v.d;
+ __asm__ volatile ("/* %0 %1 %2 %3 %4 */" : : "nro" (e1), "nro" (e2), "nro" (e3), "nro" (e4), "nro" (e5));
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44784.c b/gcc/testsuite/gcc.c-torture/compile/pr44784.c
new file mode 100644
index 00000000000..54d531a3dff
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44784.c
@@ -0,0 +1,47 @@
+typedef struct rtx_def *rtx;
+enum rtx_code { SUBREG };
+typedef union rtunion_def {
+ long rtint;
+ unsigned long rtuint;
+ rtx rtx;
+} rtunion;
+struct rtx_def {
+ enum rtx_code code: 8;
+ rtunion fld[1];
+};
+typedef struct simple_bitmap_def {
+ unsigned long long elms[1];
+} *sbitmap;
+struct df_link {
+ struct df_link *next;
+ rtx reg;
+};
+typedef enum { UNDEFINED, CONSTANT, VARYING } latticevalue;
+typedef struct {
+ latticevalue lattice_val;
+} value;
+static value *values;
+static sbitmap ssa_edges;
+void defs_to_varying (struct df_link *start)
+{
+ struct df_link *currdef;
+ for (currdef = start;
+ currdef;
+ currdef = currdef->next)
+ {
+ rtx reg = currdef->reg;
+ if (values[(reg->code == SUBREG
+ ? reg->fld[0].rtx
+ : reg)->fld[0].rtuint].lattice_val != VARYING)
+ ssa_edges->elms [(reg->code == SUBREG
+ ? reg->fld[0].rtx
+ : reg)->fld[0].rtuint / 64]
+ |= ((unsigned long long) 1
+ << (reg->code == SUBREG
+ ? reg->fld[0].rtx
+ : reg)->fld[0].rtuint % 64);
+ values[(reg->code == SUBREG
+ ? reg->fld[0].rtx
+ : reg)->fld[0].rtuint].lattice_val = VARYING;
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44788.c b/gcc/testsuite/gcc.c-torture/compile/pr44788.c
new file mode 100644
index 00000000000..99dc7982394
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44788.c
@@ -0,0 +1,8 @@
+void joint_decode(float* mlt_buffer1, int t) {
+ int i;
+ float decode_buffer[1060];
+ foo(decode_buffer);
+ for (i=0; i<10 ; i++) {
+ mlt_buffer1[i] = i * decode_buffer[t];
+ }
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44831.c b/gcc/testsuite/gcc.c-torture/compile/pr44831.c
new file mode 100644
index 00000000000..5539583deb0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44831.c
@@ -0,0 +1,15 @@
+typedef unsigned char UCHAR, *PUCHAR;
+typedef void *HANDLE;
+typedef struct _NCB {
+ UCHAR ncb_reserve[10];
+} NCB, *PNCB;
+struct NBCmdQueue {
+ PNCB head;
+};
+PNCB *NBCmdQueueFindNBC(struct NBCmdQueue *queue, PNCB ncb)
+{
+ PNCB *ret = &queue->head;
+ while (ret && *ret != ncb)
+ ret = (PNCB *)((*ret)->ncb_reserve + sizeof(HANDLE));
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44891.c b/gcc/testsuite/gcc.c-torture/compile/pr44891.c
new file mode 100644
index 00000000000..145b1446903
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44891.c
@@ -0,0 +1,26 @@
+struct S
+{
+ float f;
+ long l;
+};
+
+extern int gi;
+extern float gf;
+
+long foo (long p)
+{
+ struct S s;
+ float *pf;
+
+ s.l = p;
+
+ pf = &s.f;
+
+ pf++;
+ pf--;
+
+ gf = *pf + 3.3;
+ gi = *((int *)pf) + 2;
+
+ return s.l + 6;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44941.c b/gcc/testsuite/gcc.c-torture/compile/pr44941.c
new file mode 100644
index 00000000000..7d9cc8372fc
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44941.c
@@ -0,0 +1,8 @@
+struct S { };
+
+extern void bar(struct S);
+
+void foo (int i)
+{
+ bar (*(struct S *)&i);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44946.c b/gcc/testsuite/gcc.c-torture/compile/pr44946.c
new file mode 100644
index 00000000000..7b230124585
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44946.c
@@ -0,0 +1,27 @@
+struct A
+{
+ int i;
+ long l;
+};
+
+struct B
+{
+ int i;
+};
+
+struct C
+{
+ int i;
+ struct B b;
+};
+
+struct B foo (struct A a)
+{
+ struct C *c = (struct C *) &a;
+ return c->b;
+}
+void bar (struct A a, struct B b)
+{
+ struct C *c = (struct C *) &a;
+ c->b = b;
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr44988.c b/gcc/testsuite/gcc.c-torture/compile/pr44988.c
new file mode 100644
index 00000000000..317eafdf7c8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr44988.c
@@ -0,0 +1,13 @@
+struct S
+{
+ int i;
+};
+
+extern void bar (struct S);
+
+void
+foo (void)
+{
+ int i = 0;
+ bar (*(struct S *) &i);
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr45047.c b/gcc/testsuite/gcc.c-torture/compile/pr45047.c
new file mode 100644
index 00000000000..f37955a0372
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr45047.c
@@ -0,0 +1,9 @@
+/* PR tree-optimization/45047 */
+
+void
+foo (const unsigned short *w, char *x, int y, int z)
+{
+ int i;
+ for (i = 0; i < y; i++)
+ x[i] = w[i] == z;
+}
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/20100416-1.c b/gcc/testsuite/gcc.c-torture/execute/20100416-1.c
new file mode 100644
index 00000000000..8b5a6f45e87
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20100416-1.c
@@ -0,0 +1,40 @@
+void abort(void);
+
+int
+movegt(int x, int y, long long a)
+{
+ int i;
+ int ret = 0;
+ for (i = 0; i < y; i++)
+ {
+ if (a >= (long long) 0xf000000000000000LL)
+ ret = x;
+ else
+ ret = y;
+ }
+ return ret;
+}
+
+struct test
+{
+ long long val;
+ int ret;
+} tests[] = {
+ { 0xf000000000000000LL, -1 },
+ { 0xefffffffffffffffLL, 1 },
+ { 0xf000000000000001LL, -1 },
+ { 0x0000000000000000LL, -1 },
+ { 0x8000000000000000LL, 1 },
+};
+
+int
+main()
+{
+ int i;
+ for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+ {
+ if (movegt (-1, 1, tests[i].val) != tests[i].ret)
+ abort ();
+ }
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/20100708-1.c b/gcc/testsuite/gcc.c-torture/execute/20100708-1.c
new file mode 100644
index 00000000000..590a94a70b7
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20100708-1.c
@@ -0,0 +1,29 @@
+/* PR middle-end/44843 */
+/* Verify that we don't use the alignment of struct S for inner accesses. */
+
+struct S
+{
+ double for_alignment;
+ struct { int x, y, z; } a[16];
+};
+
+void f(struct S *s) __attribute__((noinline));
+
+void f(struct S *s)
+{
+ unsigned int i;
+
+ for (i = 0; i < 16; ++i)
+ {
+ s->a[i].x = 0;
+ s->a[i].y = 0;
+ s->a[i].z = 0;
+ }
+}
+
+int main (void)
+{
+ struct S s;
+ f (&s);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr40657.c b/gcc/testsuite/gcc.c-torture/execute/pr40657.c
new file mode 100644
index 00000000000..e6d8dda9f99
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr40657.c
@@ -0,0 +1,23 @@
+/* Verify that that Thumb-1 epilogue size optimization does not clobber the
+ return value. */
+
+long long v = 0x123456789abc;
+
+__attribute__((noinline)) void bar (int *x)
+{
+ asm volatile ("" : "=m" (x) ::);
+}
+
+__attribute__((noinline)) long long foo()
+{
+ int x;
+ bar(&x);
+ return v;
+}
+
+int main ()
+{
+ if (foo () != v)
+ abort ();
+ exit (0);
+}
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/pr44683.x b/gcc/testsuite/gcc.c-torture/execute/pr44683.x
new file mode 100644
index 00000000000..20413409a20
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr44683.x
@@ -0,0 +1,6 @@
+if { [istarget "sh*-*-*"] } {
+ # SH require -mieee for this test.
+ set additional_flags "-mieee"
+}
+
+return 0
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44828.c b/gcc/testsuite/gcc.c-torture/execute/pr44828.c
new file mode 100644
index 00000000000..93837344b2d
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr44828.c
@@ -0,0 +1,19 @@
+extern void abort (void);
+
+static signed char
+foo (signed char si1, signed char si2)
+{
+ return si1 * si2;
+}
+
+int a = 0x105F61CA;
+
+int
+main (void)
+{
+ int b = 0x0332F5C8;
+ if (foo (b, a) > 0)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44852.c b/gcc/testsuite/gcc.c-torture/execute/pr44852.c
new file mode 100644
index 00000000000..440653e5f17
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr44852.c
@@ -0,0 +1,22 @@
+__attribute__ ((__noinline__))
+char *sf(char *s, char *s0)
+{
+ asm ("");
+ while (*--s == '9')
+ if (s == s0)
+ {
+ *s = '0';
+ break;
+ }
+ ++*s++;
+ return s;
+}
+
+int main()
+{
+ char s[] = "999999";
+ char *x = sf (s+2, s);
+ if (x != s+1 || __builtin_strcmp (s, "199999") != 0)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr44942.c b/gcc/testsuite/gcc.c-torture/execute/pr44942.c
new file mode 100644
index 00000000000..3ef0830220d
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr44942.c
@@ -0,0 +1,70 @@
+/* PR target/44942 */
+
+#include <stdarg.h>
+
+void
+test1 (int a, int b, int c, int d, int e, int f, int g, long double h, ...)
+{
+ int i;
+ va_list ap;
+
+ va_start (ap, h);
+ i = va_arg (ap, int);
+ if (i != 1234)
+ __builtin_abort ();
+ va_end (ap);
+}
+
+void
+test2 (int a, int b, int c, int d, int e, int f, int g, long double h, int i,
+ long double j, int k, long double l, int m, long double n, ...)
+{
+ int o;
+ va_list ap;
+
+ va_start (ap, n);
+ o = va_arg (ap, int);
+ if (o != 1234)
+ __builtin_abort ();
+ va_end (ap);
+}
+
+void
+test3 (double a, double b, double c, double d, double e, double f,
+ double g, long double h, ...)
+{
+ double i;
+ va_list ap;
+
+ va_start (ap, h);
+ i = va_arg (ap, double);
+ if (i != 1234.0)
+ __builtin_abort ();
+ va_end (ap);
+}
+
+void
+test4 (double a, double b, double c, double d, double e, double f, double g,
+ long double h, double i, long double j, double k, long double l,
+ double m, long double n, ...)
+{
+ double o;
+ va_list ap;
+
+ va_start (ap, n);
+ o = va_arg (ap, double);
+ if (o != 1234.0)
+ __builtin_abort ();
+ va_end (ap);
+}
+
+int
+main ()
+{
+ test1 (0, 0, 0, 0, 0, 0, 0, 0.0L, 1234);
+ test2 (0, 0, 0, 0, 0, 0, 0, 0.0L, 0, 0.0L, 0, 0.0L, 0, 0.0L, 1234);
+ test3 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0L, 1234.0);
+ test4 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0L, 0.0, 0.0L,
+ 0.0, 0.0L, 0.0, 0.0L, 1234.0);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr45017.c b/gcc/testsuite/gcc.c-torture/execute/pr45017.c
new file mode 100644
index 00000000000..37ff286cc72
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr45017.c
@@ -0,0 +1,22 @@
+int tester(char *bytes)
+{
+ union {
+ struct {
+ unsigned int r1:4;
+ unsigned int r2:4;
+ } fmt;
+ char value[1];
+ } ovl;
+
+ ovl.value[0] = bytes[0];
+ return ovl.fmt.r1;
+}
+extern void abort (void);
+int main()
+{
+ char buff = 0x2f;
+ if (tester(&buff) != 0x0f)
+ abort ();
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.dg/Wtrampolines.c b/gcc/testsuite/gcc.dg/Wtrampolines.c
new file mode 100644
index 00000000000..dcb36814774
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wtrampolines.c
@@ -0,0 +1,57 @@
+/* Origin: trampoline-1.c Waldek Hebisch <hebisch@math.uni.wroc.pl> */
+/* Ported to test -Wtrampolines Magnus Granberg <zorry@gentoo.org> */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target trampolines } */
+/* { dg-options "-O2 -Wtrampolines" } */
+
+#ifndef NO_TRAMPOLINES
+
+/* This used to fail on various versions of Solaris 2 because the
+ trampoline couldn't be made executable. */
+
+extern void abort(void);
+extern double fabs(double);
+
+void foo (void)
+{
+ const int correct[1100] = {1, 0, -2, 0, 1, 0, 1, -1, -10, -30, -67};
+ int i;
+
+ double x1 (void) {return 1; }
+ double x2 (void) {return -1;}
+ double x3 (void) {return -1;}
+ double x4 (void) {return 1; }
+ double x5 (void) {return 0; }
+
+ typedef double pfun(void);
+
+ double a (int k, pfun x1, pfun x2, pfun x3, pfun x4, pfun x5)
+ {
+ double b (void) /* { dg-warning "trampoline generated for nested function 'b'" } */
+ {
+ k = k - 1;
+ return a (k, b, x1, x2, x3, x4 );
+ }
+
+ if (k <= 0)
+ return x4 () + x5 ();
+ else
+ return b ();
+ }
+
+ for (i=0; i<=10; i++)
+ {
+ if (fabs(a( i, x1, x2, x3, x4, x5 ) - correct [i]) > 0.1)
+ abort();
+ }
+}
+#endif
+
+int main (void)
+{
+#ifndef NO_TRAMPOLINES
+ foo ();
+#endif
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/attr-weak-hidden-1.c b/gcc/testsuite/gcc.dg/attr-weak-hidden-1.c
new file mode 100644
index 00000000000..968bab7ad34
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/attr-weak-hidden-1.c
@@ -0,0 +1,6 @@
+/* { dg-do run } */
+/* { dg-require-weak "" } */
+/* { dg-require-visibility "" } */
+/* { dg-options "-O2" } */
+/* { dg-additional-sources "attr-weak-hidden-1a.c" } */
+int __attribute__((weak, visibility("hidden"))) foo (void) { return 0; }
diff --git a/gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c b/gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c
new file mode 100644
index 00000000000..b04d8d251ed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/attr-weak-hidden-1a.c
@@ -0,0 +1,9 @@
+void abort (void);
+int __attribute__((weak, visibility("hidden"))) foo (void) { return 1; }
+int
+main (void)
+{
+ if (foo ())
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/compat/pr38736_main.c b/gcc/testsuite/gcc.dg/compat/pr38736_main.c
index 88c3586db4b..8f221083c90 100644
--- a/gcc/testsuite/gcc.dg/compat/pr38736_main.c
+++ b/gcc/testsuite/gcc.dg/compat/pr38736_main.c
@@ -1,6 +1,6 @@
/* PR target/38736 */
/* { dg-skip-if "attribute ((aligned))" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
/* Test compatibility of attribute ((aligned)) with and without -mavx. */
diff --git a/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c b/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c
index cfd081db896..59e68d96c7a 100644
--- a/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c
+++ b/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c
@@ -1,8 +1,6 @@
/* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */
/* { dg-options "-O" } */
-/* { dg-require-effective-target sse2 } */
-
-#include "cpuid.h"
+/* { dg-require-effective-target sse2_runtime } */
/* Test function argument passing. PR target/15301. */
@@ -12,14 +10,6 @@ extern void exit (int);
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE vector test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- union_m128_1_x ();
-
+ union_m128_1_x ();
exit (0);
}
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1a_main.c b/gcc/testsuite/gcc.dg/compat/vector-1a_main.c
index c5acc35f4d8..608f5dd9b85 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1a_main.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1a_main.c
@@ -1,12 +1,10 @@
/* { dg-skip-if "test SSE2 vector" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
/* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses
vectors of integer values. */
-#include "cpuid.h"
-
extern void vector_1_x (void);
extern void exit (int);
int fails;
@@ -14,14 +12,6 @@ int fails;
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE vector test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- vector_1_x ();
-
+ vector_1_x ();
exit (0);
}
diff --git a/gcc/testsuite/gcc.dg/compat/vector-1b_main.c b/gcc/testsuite/gcc.dg/compat/vector-1b_main.c
index fb5a5a93d79..427e8caf38b 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-1b_main.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-1b_main.c
@@ -1,12 +1,10 @@
/* { dg-skip-if "test AVX vector" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
/* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses
vectors of integer values. */
-#include "cpuid.h"
-
extern void vector_1_x (void);
extern void exit (int);
int fails;
@@ -14,14 +12,6 @@ int fails;
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX vector test only if host has AVX support. */
- if (ecx & bit_AVX)
- vector_1_x ();
-
+ vector_1_x ();
exit (0);
}
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2a_main.c b/gcc/testsuite/gcc.dg/compat/vector-2a_main.c
index 164c4b25e2e..e957faf90d2 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2a_main.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2a_main.c
@@ -1,12 +1,10 @@
/* { dg-skip-if "test SSE2 support" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
/* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses
vectors of floating points values. */
-#include "cpuid.h"
-
extern void vector_2_x (void);
extern void exit (int);
int fails;
@@ -14,14 +12,6 @@ int fails;
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE vector test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- vector_2_x ();
-
+ vector_2_x ();
exit (0);
}
diff --git a/gcc/testsuite/gcc.dg/compat/vector-2b_main.c b/gcc/testsuite/gcc.dg/compat/vector-2b_main.c
index c5a9300c8ac..2c195764249 100644
--- a/gcc/testsuite/gcc.dg/compat/vector-2b_main.c
+++ b/gcc/testsuite/gcc.dg/compat/vector-2b_main.c
@@ -1,12 +1,10 @@
/* { dg-skip-if "test AVX support" { ! { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
/* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses
vectors of floating points values. */
-#include "cpuid.h"
-
extern void vector_2_x (void);
extern void exit (int);
int fails;
@@ -14,14 +12,6 @@ int fails;
int
main ()
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX vector test only if host has AVX support. */
- if (ecx & bit_AVX)
- vector_2_x ();
-
+ vector_2_x ();
exit (0);
}
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
index 9d577ea7771..6cbdc85b3d5 100644
--- a/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/const-2b.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target i386*-*-* } } */
/* { dg-options "-O -gdwarf-2 -dA -msse" } */
+/* { dg-require-effective-target sse } */
/* { dg-final { scan-assembler "DW_AT_const_value" } } */
typedef float FloatVect __attribute__((__vector_size__(16)));
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c
new file mode 100644
index 00000000000..ce26ec639c3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-gdwarf-2 -dA --param ggc-min-expand=0 --param ggc-min-heapsize=0" } */
+/* { dg-final { scan-assembler-times "DIE.*DW_TAG_array_type" 1 } } */
+/* { dg-final { scan-assembler-times "DIE.*DW_TAG_subrange_type" 1 } } */
+
+void f1 (void)
+{
+ char buffer1[100];
+}
+
+int f2 (void)
+{
+ return 0;
+}
+
+void f3 (void)
+{
+ char buffer2[100];
+}
diff --git a/gcc/testsuite/gcc.dg/float-range-3.c b/gcc/testsuite/gcc.dg/float-range-3.c
index e018a1ebc16..32bef98df9d 100644
--- a/gcc/testsuite/gcc.dg/float-range-3.c
+++ b/gcc/testsuite/gcc.dg/float-range-3.c
@@ -1,5 +1,5 @@
/* PR 23572 : warnings for out of range floating-point constants. */
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-options "-std=c99" } */
/* { dg-skip-if "No Inf support" { spu-*-* } } */
#include <math.h>
diff --git a/gcc/testsuite/gcc.dg/float-range-4.c b/gcc/testsuite/gcc.dg/float-range-4.c
index fbb820f9b21..a50a47d18c2 100644
--- a/gcc/testsuite/gcc.dg/float-range-4.c
+++ b/gcc/testsuite/gcc.dg/float-range-4.c
@@ -1,5 +1,5 @@
/* PR 23572 : warnings for out of range floating-point constants. */
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-options "-Wno-overflow -std=c99" } */
/* { dg-skip-if "No Inf support" { spu-*-* } } */
#include <math.h>
diff --git a/gcc/testsuite/gcc.dg/float-range-5.c b/gcc/testsuite/gcc.dg/float-range-5.c
index 89f00796aec..034f3605898 100644
--- a/gcc/testsuite/gcc.dg/float-range-5.c
+++ b/gcc/testsuite/gcc.dg/float-range-5.c
@@ -1,6 +1,6 @@
/* PR 23572 : warnings for out of range floating-point constants
Test that they are NOT pedantic warnings. */
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-options "-pedantic-errors -std=c99" } */
/* { dg-skip-if "No Inf support" { spu-*-* } } */
#include <math.h>
diff --git a/gcc/testsuite/gcc.dg/fold-overflow-1.c b/gcc/testsuite/gcc.dg/fold-overflow-1.c
index bd4d25a73ed..8fddc9fc0ee 100644
--- a/gcc/testsuite/gcc.dg/fold-overflow-1.c
+++ b/gcc/testsuite/gcc.dg/fold-overflow-1.c
@@ -1,4 +1,4 @@
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-skip-if "consts are shorts, not longs" { "m32c-*-*" "avr-*-*" } { "*" } { "" } } */
/* { dg-skip-if "No Inf support" { spu-*-* } } */
/* { dg-options "-O -ftrapping-math" } */
diff --git a/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c b/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c
index aa4f6cb5f3d..4b837e50675 100644
--- a/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c
+++ b/gcc/testsuite/gcc.dg/format/ms_unnamed-1.c
@@ -3,6 +3,7 @@
/* { dg-do compile { target { *-*-mingw* } } } */
/* { dg-options "-Wformat" } */
/* { dg-options "-Wformat -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#define USE_SYSTEM_FORMATS
#include "format.h"
diff --git a/gcc/testsuite/gcc.dg/format/unnamed-1.c b/gcc/testsuite/gcc.dg/format/unnamed-1.c
index 2d4f77cc315..b3efdcbf68f 100644
--- a/gcc/testsuite/gcc.dg/format/unnamed-1.c
+++ b/gcc/testsuite/gcc.dg/format/unnamed-1.c
@@ -3,6 +3,7 @@
/* { dg-do compile } */
/* { dg-options "-Wformat" } */
/* { dg-options "-Wformat -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#include "format.h"
@@ -20,5 +21,5 @@ f (TItype x)
{
printf("%d", x); /* { dg-warning "expects type" } */
printf("%d", 141592653589793238462643383279502884197169399375105820974944); /* { dg-warning "expects type" } */
- /* { dg-warning "unsigned only|too large" "constant" { target *-*-* } 22 } */
+ /* { dg-warning "unsigned only|too large" "constant" { target *-*-* } 23 } */
}
diff --git a/gcc/testsuite/gcc.dg/gomp/sections-4.c b/gcc/testsuite/gcc.dg/gomp/sections-4.c
index 44e7de98c20..62a2ecddf9a 100644
--- a/gcc/testsuite/gcc.dg/gomp/sections-4.c
+++ b/gcc/testsuite/gcc.dg/gomp/sections-4.c
@@ -1,5 +1,5 @@
/* PR c++/24613 */
-/* { dg-compile } */
+/* { dg-do compile } */
#pragma omp section /* { dg-error "may only be used in" } */
diff --git a/gcc/testsuite/gcc.dg/graphite/pr40281.c b/gcc/testsuite/gcc.dg/graphite/pr40281.c
index a09147a9fb0..437f3434e4b 100644
--- a/gcc/testsuite/gcc.dg/graphite/pr40281.c
+++ b/gcc/testsuite/gcc.dg/graphite/pr40281.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O -fprefetch-loop-arrays -w" } */
/* { dg-options "-O -fprefetch-loop-arrays -march=i686 -msse -w" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
void foo(int);
void bar(int n)
diff --git a/gcc/testsuite/gcc.dg/guality/asm-1.c b/gcc/testsuite/gcc.dg/guality/asm-1.c
new file mode 100644
index 00000000000..5279722c094
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/asm-1.c
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-g" } */
+
+struct A { int x; unsigned short y; char z[64]; };
+
+void __attribute__((noinline))
+foo (struct A *p, char *q)
+{
+ int f = &p->z[p->y] - q;
+ asm volatile ("nop");
+ asm volatile ("nop" : : "g" (f)); /* { dg-final { gdb-test 12 "f" "14" } } */
+ asm volatile ("" : : "g" (p), "g" (q));
+}
+
+int
+main ()
+{
+ struct A a;
+ __builtin_memset (&a, 0, sizeof a);
+ a.y = 26;
+ a.x = 12;
+ asm volatile ("" : : "r" (&a) : "memory");
+ foo (&a, &a.z[a.x]);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/guality.exp b/gcc/testsuite/gcc.dg/guality/guality.exp
index d4ee6864ba4..49e2ac5a550 100644
--- a/gcc/testsuite/gcc.dg/guality/guality.exp
+++ b/gcc/testsuite/gcc.dg/guality/guality.exp
@@ -43,6 +43,7 @@ if {[check_guality "
}
"]} {
gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] ""
+ gcc-dg-runtest [lsort [glob $srcdir/c-c++-common/guality/*.c]] "-Wc++-compat"
}
if [info exists guality_gdb_name] {
diff --git a/gcc/testsuite/gcc.dg/guality/guality.h b/gcc/testsuite/gcc.dg/guality/guality.h
index e744d0d72ee..f6c662ce8f6 100644
--- a/gcc/testsuite/gcc.dg/guality/guality.h
+++ b/gcc/testsuite/gcc.dg/guality/guality.h
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
+#include <unistd.h>
/* This is a first cut at checking that debug information matches
run-time. The idea is to annotate programs with GUALCHK* macros
@@ -61,6 +62,7 @@ typedef intmax_t gualchk_t;
/* Convert a pointer or integral type to the widest integral type,
as expected by guality_check. */
+#ifndef __cplusplus
#define GUALCVT(val) \
((gualchk_t)__builtin_choose_expr \
(__builtin_types_compatible_p (__typeof (val), gualchk_t), \
@@ -69,6 +71,30 @@ typedef intmax_t gualchk_t;
(__builtin_classify_type (val) \
== __builtin_classify_type (&guality_skip), \
(uintptr_t)(val),(intptr_t)(val))))
+#else
+template <typename T>
+inline __attribute__((always_inline)) gualchk_t
+gualcvt (T *val)
+{
+ return (uintptr_t) val;
+}
+
+template <typename T>
+inline __attribute__((always_inline)) gualchk_t
+gualcvt (T val)
+{
+ return (intptr_t) val;
+}
+
+template <>
+inline __attribute__((always_inline)) gualchk_t
+gualcvt<gualchk_t> (gualchk_t val)
+{
+ return val;
+}
+
+#define GUALCVT(val) gualcvt (val)
+#endif
/* Attach a debugger to the current process and verify that the string
EXPR, evaluated by the debugger, yields the gualchk_t number VAL.
@@ -195,7 +221,7 @@ main (int argc, char *argv[])
else
{
int len = strlen (guality_gdb_command) + sizeof (GUALITY_GDB_ARGS);
- char *buf = __builtin_alloca (len);
+ char *buf = (char *) __builtin_alloca (len);
strcpy (buf, guality_gdb_command);
strcat (buf, GUALITY_GDB_ARGS);
guality_gdb_command = buf;
diff --git a/gcc/testsuite/gcc.dg/guality/nrv-1.c b/gcc/testsuite/gcc.dg/guality/nrv-1.c
new file mode 100644
index 00000000000..6e70050ec4d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/nrv-1.c
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-g -fno-tree-sra" } */
+
+void abort (void);
+
+struct A
+{
+ int i[100];
+};
+
+struct A a1, a3;
+
+__attribute__((noinline)) struct A
+f ()
+{
+ struct A a2;
+ a2.i[0] = 42;
+ if (a3.i[0] != 0)
+ abort ();
+ a2.i[4] = 7; /* { dg-final { gdb-test 20 "a2.i\[0\]" "42" } } */
+ return a2;
+}
+
+int
+main ()
+{
+ a1 = f ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr45003-1.c b/gcc/testsuite/gcc.dg/guality/pr45003-1.c
new file mode 100644
index 00000000000..7cef8f6284c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr45003-1.c
@@ -0,0 +1,31 @@
+/* PR debug/45003 */
+/* { dg-do run { target { x86_64-*-* && lp64 } } } */
+/* { dg-options "-g" } */
+
+int __attribute__((noinline))
+foo (unsigned short *p)
+{
+ int a = *p;
+ asm volatile ("nop");
+ asm volatile ("nop" : : "D" (a)); /* { dg-final { gdb-test 10 "a" "0x8078" } } */
+ return 0;
+}
+
+int __attribute__((noinline))
+bar (short *p)
+{
+ unsigned int a = *p;
+ asm volatile ("nop");
+ asm volatile ("nop" : : "D" (a)); /* { dg-final { gdb-test 19 "a" "0xffff8078" } } */
+ return 0;
+}
+
+int
+main ()
+{
+ unsigned short us = 0x8078;
+ foo (&us);
+ short s = -32648;
+ bar (&s);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr45003-2.c b/gcc/testsuite/gcc.dg/guality/pr45003-2.c
new file mode 100644
index 00000000000..dcdba237ff4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr45003-2.c
@@ -0,0 +1,31 @@
+/* PR debug/45003 */
+/* { dg-do run { target { x86_64-*-* && lp64 } } } */
+/* { dg-options "-g" } */
+
+int __attribute__((noinline))
+foo (unsigned short *p)
+{
+ int a = *p;
+ asm volatile ("nop" : : "D" ((int) *p));
+ asm volatile ("nop" : : "D" ((int) *p)); /* { dg-final { gdb-test 10 "a" "0x8078" } } */
+ return 0;
+}
+
+int __attribute__((noinline))
+bar (short *p)
+{
+ unsigned int a = *p;
+ asm volatile ("nop" : : "D" ((unsigned int) *p));
+ asm volatile ("nop" : : "D" ((unsigned int) *p)); /* { dg-final { gdb-test 19 "a" "0xffff8078" } } */
+ return 0;
+}
+
+int
+main ()
+{
+ unsigned short us = 0x8078;
+ foo (&us);
+ short s = -32648;
+ bar (&s);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr45003-3.c b/gcc/testsuite/gcc.dg/guality/pr45003-3.c
new file mode 100644
index 00000000000..3adc4f2383e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr45003-3.c
@@ -0,0 +1,31 @@
+/* PR debug/45003 */
+/* { dg-do run { target { x86_64-*-* && lp64 } } } */
+/* { dg-options "-g" } */
+
+int __attribute__((noinline))
+foo (unsigned short *p)
+{
+ int a = (short) *p;
+ asm volatile ("nop" : : "D" ((int) *p));
+ asm volatile ("nop" : : "D" ((int) *p)); /* { dg-final { gdb-test 10 "a" "-32648" } } */
+ return 0;
+}
+
+int __attribute__((noinline))
+bar (short *p)
+{
+ unsigned int a = (unsigned short) *p;
+ asm volatile ("nop" : : "D" ((unsigned int) *p));
+ asm volatile ("nop" : : "D" ((unsigned int) *p)); /* { dg-final { gdb-test 19 "a" "0x8078" } } */
+ return 0;
+}
+
+int
+main ()
+{
+ unsigned short us = 0x8078;
+ foo (&us);
+ short s = -32648;
+ bar (&s);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c b/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c
index c9a766d9e8f..60382949175 100644
--- a/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c
+++ b/gcc/testsuite/gcc.dg/ipa/ipa-sra-6.c
@@ -30,3 +30,4 @@ int main (int argc, char *argv[])
}
/* { dg-final { scan-tree-dump-times "foo " 1 "eipa_sra" } } */
+/* { dg-final { cleanup-tree-dump "eipa_sra" } } */
diff --git a/gcc/testsuite/gcc.dg/ipa/pure-const-2.c b/gcc/testsuite/gcc.dg/ipa/pure-const-2.c
index 51d779776bc..2dcca18c09f 100644
--- a/gcc/testsuite/gcc.dg/ipa/pure-const-2.c
+++ b/gcc/testsuite/gcc.dg/ipa/pure-const-2.c
@@ -26,3 +26,5 @@ main(void)
}
/* { 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"} } */
+/* { dg-final { cleanup-tree-dump "local-pure-const1" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/lto/20090210_0.c b/gcc/testsuite/gcc.dg/lto/20090210_0.c
index c588e8a2778..2c858a67d32 100644
--- a/gcc/testsuite/gcc.dg/lto/20090210_0.c
+++ b/gcc/testsuite/gcc.dg/lto/20090210_0.c
@@ -1,5 +1,7 @@
/* { dg-lto-do run } */
/* { dg-suppress-ld-options {-fPIC} } */
+/* { dg-require-effective-target tls } */
+/* { dg-extra-ld-options "-pthread" { target *-*-solaris2.[89] } } */
int foo (int x)
{
return x;
diff --git a/gcc/testsuite/gcc.dg/lto/20090313_0.c b/gcc/testsuite/gcc.dg/lto/20090313_0.c
index 523ae2de7c5..226e647135a 100644
--- a/gcc/testsuite/gcc.dg/lto/20090313_0.c
+++ b/gcc/testsuite/gcc.dg/lto/20090313_0.c
@@ -1,4 +1,5 @@
/* { dg-lto-options "-mcpu=v9" { target sparc*-*-* } } */
+/* { dg-require-effective-target sync_char_short } */
void
_cairo_clip_path_reference () {
int a;
diff --git a/gcc/testsuite/gcc.dg/lto/20100518_0.c b/gcc/testsuite/gcc.dg/lto/20100518_0.c
index 02290b5feb2..c0e9c8be2f7 100644
--- a/gcc/testsuite/gcc.dg/lto/20100518_0.c
+++ b/gcc/testsuite/gcc.dg/lto/20100518_0.c
@@ -1,4 +1,5 @@
/* { dg-lto-do link } */
+/* { dg-skip-if "" { ! { i?86-*-* x86_64-*-* } } { "*" } { "" } } */
/* Forgot to steam in/out the number of labels for asm goto. PR44184. */
extern int printf (__const char *__restrict __format, ...);
diff --git a/gcc/testsuite/gcc.dg/lto/20100709-1_0.c b/gcc/testsuite/gcc.dg/lto/20100709-1_0.c
new file mode 100644
index 00000000000..33f38f6c204
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100709-1_0.c
@@ -0,0 +1,7 @@
+/* { dg-lto-do link } */
+
+struct X;
+struct Y {
+ struct X (*fnptr)(struct X);
+};
+struct Y foo;
diff --git a/gcc/testsuite/gcc.dg/lto/20100709-1_1.c b/gcc/testsuite/gcc.dg/lto/20100709-1_1.c
new file mode 100644
index 00000000000..b970795c61d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100709-1_1.c
@@ -0,0 +1,11 @@
+struct X { int i; };
+struct Y {
+ struct X (*fnptr)(struct X);
+};
+extern struct Y foo;
+int main()
+{
+ struct X x;
+ foo.fnptr(x);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-1_0.c b/gcc/testsuite/gcc.dg/lto/20100720-1_0.c
new file mode 100644
index 00000000000..ca9366f6247
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-1_0.c
@@ -0,0 +1,22 @@
+/* { dg-lto-do run } */
+
+struct X {
+ int a;
+};
+
+typedef struct list_node *list;
+
+struct list_node {
+ list next;
+ struct X *value;
+};
+
+list f(void)
+{
+ return 0;
+}
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-1_1.c b/gcc/testsuite/gcc.dg/lto/20100720-1_1.c
new file mode 100644
index 00000000000..789e88e7d06
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-1_1.c
@@ -0,0 +1,15 @@
+struct X {
+ int b;
+};
+
+typedef struct list_node *list;
+
+struct list_node {
+ list next;
+ struct X *value;
+};
+
+list g(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-2_0.c b/gcc/testsuite/gcc.dg/lto/20100720-2_0.c
new file mode 100644
index 00000000000..87b13b0de92
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-2_0.c
@@ -0,0 +1,23 @@
+/* { dg-lto-do run } */
+
+struct X {
+ int a;
+};
+
+typedef struct list_node *list;
+
+struct list_node {
+ list next;
+ list *ptr;
+ struct X *value;
+};
+
+list f(list lst)
+{
+ return lst->next;
+}
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-2_1.c b/gcc/testsuite/gcc.dg/lto/20100720-2_1.c
new file mode 100644
index 00000000000..b3a2cd06e66
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-2_1.c
@@ -0,0 +1,16 @@
+struct X {
+ int b;
+};
+
+typedef struct list_node *list;
+
+struct list_node {
+ list next;
+ list *ptr;
+ struct X *value;
+};
+
+list *g(list *ptr)
+{
+ return ptr;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-3_0.c b/gcc/testsuite/gcc.dg/lto/20100720-3_0.c
new file mode 100644
index 00000000000..99c89ebd7fd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-3_0.c
@@ -0,0 +1,24 @@
+/* { dg-lto-do run } */
+
+struct X {
+ int a;
+};
+
+struct link {
+ struct list_node *next;
+};
+
+struct list_node {
+ struct link lnk;
+ struct X *value;
+};
+
+void f(struct list_node *lst)
+{
+ lst->lnk.next = 0;
+}
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-3_1.c b/gcc/testsuite/gcc.dg/lto/20100720-3_1.c
new file mode 100644
index 00000000000..3d323813edd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-3_1.c
@@ -0,0 +1,17 @@
+struct X {
+ int b;
+};
+
+struct link {
+ struct list_node *next;
+};
+
+struct list_node {
+ struct link lnk;
+ struct X *value;
+};
+
+void g(struct list_node *lst)
+{
+ lst->lnk.next = 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100720-4_0.c b/gcc/testsuite/gcc.dg/lto/20100720-4_0.c
new file mode 100644
index 00000000000..e7669552fa9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100720-4_0.c
@@ -0,0 +1,15 @@
+/* { dg-lto-do link } */
+/* { dg-lto-options {{-flto -fsigned-char} {-flto -funsigned-char}} } */
+
+char *a;
+int f;
+
+void
+foo (void)
+{
+ f = (*a != '-');
+}
+int main()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20100722-1_0.c b/gcc/testsuite/gcc.dg/lto/20100722-1_0.c
new file mode 100644
index 00000000000..275a03c25a0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20100722-1_0.c
@@ -0,0 +1,6 @@
+/* { dg-lto-do run } */
+/* { dg-require-linker-plugin "" } */
+/* { dg-extra-ld-options "-fuse-linker-plugin" } */
+
+int main() { return 0; }
+
diff --git a/gcc/testsuite/gcc.dg/plugin/ggcplug.c b/gcc/testsuite/gcc.dg/plugin/ggcplug.c
index 03bd563b5ad..3094b2ebb63 100644
--- a/gcc/testsuite/gcc.dg/plugin/ggcplug.c
+++ b/gcc/testsuite/gcc.dg/plugin/ggcplug.c
@@ -13,6 +13,7 @@
#include "intl.h"
#include "gcc-plugin.h"
#include "plugin-version.h"
+#include "diagnostic.h"
int plugin_is_GPL_compatible;
diff --git a/gcc/testsuite/gcc.dg/plugin/selfassign.c b/gcc/testsuite/gcc.dg/plugin/selfassign.c
index df42abd27df..84d2801d202 100644
--- a/gcc/testsuite/gcc.dg/plugin/selfassign.c
+++ b/gcc/testsuite/gcc.dg/plugin/selfassign.c
@@ -14,6 +14,7 @@
#include "tree-pass.h"
#include "intl.h"
#include "plugin-version.h"
+#include "diagnostic.h"
int plugin_is_GPL_compatible;
@@ -52,9 +53,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 +65,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 +115,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 +153,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 +199,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)
diff --git a/gcc/testsuite/gcc.dg/pr32370.c b/gcc/testsuite/gcc.dg/pr32370.c
index f039bdf98e7..fc3d724e6c4 100644
--- a/gcc/testsuite/gcc.dg/pr32370.c
+++ b/gcc/testsuite/gcc.dg/pr32370.c
@@ -19,7 +19,7 @@ unsigned int
foo (TYPE port)
{
unsigned int v;
- __asm__ __volatile__ ("" : C (v) : "Nd" (port)); /* { dg-error "while reloading\|has impossible" } */
+ __asm__ __volatile__ ("" : C (v) : "Nd" (port)); /* { dg-error "while reloading\|has impossible\|inconsistent operand constraints" } */
return v;
}
diff --git a/gcc/testsuite/gcc.dg/pr34856.c b/gcc/testsuite/gcc.dg/pr34856.c
index 76499f7b8f5..6bfc704774f 100644
--- a/gcc/testsuite/gcc.dg/pr34856.c
+++ b/gcc/testsuite/gcc.dg/pr34856.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -msse2" { target { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
/* { dg-options "-O2 -maltivec" { target { powerpc*-*-linux* && powerpc_altivec_ok } } } */
typedef unsigned __attribute__ ((__mode__ (__pointer__))) uintptr_t;
diff --git a/gcc/testsuite/gcc.dg/pr36584.c b/gcc/testsuite/gcc.dg/pr36584.c
index a39eb572e1d..c0b005db7d7 100644
--- a/gcc/testsuite/gcc.dg/pr36584.c
+++ b/gcc/testsuite/gcc.dg/pr36584.c
@@ -1,11 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -lm" } */
/* { dg-options "-O2 -msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-/* { dg-require-effective-target sse2 { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-
-#ifdef __i386__
-#include "cpuid.h"
-#endif
+/* { dg-require-effective-target sse2_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
extern double fabs (double);
extern void abort (void);
@@ -263,16 +259,6 @@ main ()
double roots[7];
int nroots;
-#ifdef __i386__
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (!(edx & bit_SSE2))
- return 0;
-#endif
-
nroots = sbisect (6, sseq, 0.0, 10000000.0, 5, 1, roots);
if (nroots != 4)
abort ();
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/pr36997.c b/gcc/testsuite/gcc.dg/pr36997.c
index 51b06a7791c..13461b8a134 100644
--- a/gcc/testsuite/gcc.dg/pr36997.c
+++ b/gcc/testsuite/gcc.dg/pr36997.c
@@ -1,10 +1,9 @@
/* { dg-do compile { target x86_64-*-* i?86-*-* } } */
/* { dg-options "-std=c99 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
__m64 _mm_add_si64 (__m64 __m1, __m64 __m2)
{
return (__m64) __builtin_ia32_paddq ((long long)__m1, (long long)__m2); /* { dg-error "incompatible type" } */
- /* { dg-message "note: expected '__vector.1. long long int' but argument is of type 'long long int'" "" { target *-*-* } 8 } */
+ /* { dg-message "note: expected '__vector.1. long long int' but argument is of type 'long long int'" "" { target *-*-* } 7 } */
}
diff --git a/gcc/testsuite/gcc.dg/pr37544.c b/gcc/testsuite/gcc.dg/pr37544.c
index efca1db6d4a..99979cef7ad 100644
--- a/gcc/testsuite/gcc.dg/pr37544.c
+++ b/gcc/testsuite/gcc.dg/pr37544.c
@@ -1,11 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-options "-O2 -msse2 -mtune=core2 -mfpmath=387" { target { i?86-*-* x86_64-*-* } } } */
-/* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */
-
-#ifdef __i386__
-#include "cpuid.h"
-#endif
+/* { dg-require-effective-target sse2_runtime { target { i?86-*-* x86_64-*-* } } } */
extern void abort (void);
@@ -16,17 +12,6 @@ int main(void)
int i;
-#ifdef __i386__
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (!(edx & bit_SSE2))
- return 0;
-#endif
-
for (i = 0; i < 1000; i++)
arr[i] = 4294967296.0 + (double)i;
diff --git a/gcc/testsuite/gcc.dg/pr40550.c b/gcc/testsuite/gcc.dg/pr40550.c
index 27935ab005a..08951137dd3 100644
--- a/gcc/testsuite/gcc.dg/pr40550.c
+++ b/gcc/testsuite/gcc.dg/pr40550.c
@@ -1,9 +1,6 @@
/* { dg-do run } */
/* { dg-options "-msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
-
-#ifdef __i386__
-#include "cpuid.h"
-#endif
+/* { dg-require-effective-target sse_runtime { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
typedef float v2sf __attribute__ ((vector_size (2 * sizeof(float))));
@@ -17,18 +14,6 @@ static void test (void)
int main ()
{
-
-#ifdef __i386__
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (!(edx & bit_SSE))
- return 0;
-#endif
-
test ();
-
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/pr42427.c b/gcc/testsuite/gcc.dg/pr42427.c
index 1961313bc5f..cb43dd2affb 100644
--- a/gcc/testsuite/gcc.dg/pr42427.c
+++ b/gcc/testsuite/gcc.dg/pr42427.c
@@ -1,5 +1,6 @@
-/* { dg-do assemble } */
+/* { dg-do assemble { target c99_runtime } } */
/* { dg-options "-O2 -fexceptions -fnon-call-exceptions -fpeel-loops" } */
+/* { dg-add-options c99_runtime } */
/* { dg-require-effective-target ilp32 } */
#include <complex.h>
diff --git a/gcc/testsuite/gcc.dg/pr43058.c b/gcc/testsuite/gcc.dg/pr43058.c
index 50d8a63bb8f..bba6f814a71 100644
--- a/gcc/testsuite/gcc.dg/pr43058.c
+++ b/gcc/testsuite/gcc.dg/pr43058.c
@@ -1,6 +1,7 @@
/* PR debug/43058 */
/* { dg-do compile } */
/* { dg-options "-g -O2" } */
+/* { dg-timeout-factor 4 } */
extern void *f1 (void *, void *, void *);
extern void *f2 (const char *, int, int, int, void *(*) ());
diff --git a/gcc/testsuite/gcc.dg/pr44290-1.c b/gcc/testsuite/gcc.dg/pr44290-1.c
new file mode 100644
index 00000000000..071a2710425
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr44290-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target arm*-*-* avr-*-* mcore-*-* rx-*-* spu-*-* } } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+static void __attribute__((naked))
+foo(void *from, void *to)
+{
+ asm volatile("dummy"::"r"(from), "r"(to));
+}
+
+unsigned int fie[2];
+
+void fum(void *to)
+{
+ foo(fie, to);
+}
+
+/* { dg-final { scan-tree-dump "foo \\\(void \\\* from, void \\\* to\\\)" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr44290-2.c b/gcc/testsuite/gcc.dg/pr44290-2.c
new file mode 100644
index 00000000000..1951a519dfc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr44290-2.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target arm*-*-* avr-*-* mcore-*-* rx-*-* spu-*-* } } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+static unsigned long __attribute__((naked))
+foo (unsigned long base)
+{
+ asm volatile ("dummy");
+}
+unsigned long
+bar (void)
+{
+ static int start, set;
+
+ if (!set)
+ {
+ set = 1;
+ start = foo (0);
+ }
+
+ return foo (start);
+}
+
+/* { dg-final { scan-tree-dump "foo \\\(long unsigned int base\\\)" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr44838.c b/gcc/testsuite/gcc.dg/pr44838.c
new file mode 100644
index 00000000000..61608ed0b71
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr44838.c
@@ -0,0 +1,33 @@
+/* PR rtl-optimization/44838 */
+/* { dg-do run } */
+/* { dg-options "-O2 -funroll-loops" } */
+
+extern void abort ();
+
+void
+foo (int *a, int n)
+{
+ int *lasta = a + n;
+ for (; a != lasta; a++)
+ {
+ *a *= 2;
+ a[1] = a[-1] + a[-2];
+ }
+}
+
+int a[16];
+int ref[16] = { 0, 1, 4, 2, 10, 12, 24, 44,
+ 72, 136, 232, 416, 736, 1296, 2304, 2032 };
+
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 16; i++)
+ a[i] = i;
+ foo (a + 2, 16 - 3);
+ for (i = 0; i < 16; i++)
+ if (ref[i] != a[i])
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr44971.c b/gcc/testsuite/gcc.dg/pr44971.c
new file mode 100644
index 00000000000..a1faef51be1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr44971.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fcompare-debug -w" } */
+
+typedef struct
+{
+ int default_screen;
+} *_XPrivint;
+typedef int FcBool;
+typedef struct
+{
+ struct _XftintInfo *next;
+} XftintInfo;
+int _XftintInfo;
+
+void _XftintInfoGet (int * dpy, FcBool createIfNecessary)
+{
+ int event_base;
+ &event_base
+ && dpy[createIfNecessary] != 0;
+}
+
+void _XftCloseint (int dpy, XftintInfo * info,XftintInfo * *prev)
+{
+ _XftintInfoGet (dpy, 0);
+ for (prev = &_XftintInfo; info = *prev; prev = &(*prev)->next)
+ ;
+}
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/tls/emutls-1.c b/gcc/testsuite/gcc.dg/tls/emutls-1.c
index a0dea509434..3b3577c895e 100644
--- a/gcc/testsuite/gcc.dg/tls/emutls-1.c
+++ b/gcc/testsuite/gcc.dg/tls/emutls-1.c
@@ -1,5 +1,6 @@
/* { dg-do run { target *-wrs-vxworks } } */
/* { dg-require-effective-target tls } */
+/* { dg-add-options tls } */
/* vxworks' TLS model requires no extra padding on the tls proxy
objects. */
diff --git a/gcc/testsuite/gcc.dg/tls/opt-11.c b/gcc/testsuite/gcc.dg/tls/opt-11.c
index 3739645257a..0069c484a2c 100644
--- a/gcc/testsuite/gcc.dg/tls/opt-11.c
+++ b/gcc/testsuite/gcc.dg/tls/opt-11.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target tls_runtime } */
+/* { dg-add-options tls } */
extern void abort (void);
extern void *memset (void *, int, __SIZE_TYPE__);
diff --git a/gcc/testsuite/gcc.dg/tls/opt-12.c b/gcc/testsuite/gcc.dg/tls/opt-12.c
index 7c6e73430a1..7b9e498a5a8 100644
--- a/gcc/testsuite/gcc.dg/tls/opt-12.c
+++ b/gcc/testsuite/gcc.dg/tls/opt-12.c
@@ -2,6 +2,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -fpic" } */
/* { dg-require-effective-target tls_runtime } */
+/* { dg-add-options tls } */
/* { dg-require-effective-target fpic } */
extern void abort (void);
diff --git a/gcc/testsuite/gcc.dg/tls/pr24428-2.c b/gcc/testsuite/gcc.dg/tls/pr24428-2.c
index a0ceecc0624..b147f60d6a9 100644
--- a/gcc/testsuite/gcc.dg/tls/pr24428-2.c
+++ b/gcc/testsuite/gcc.dg/tls/pr24428-2.c
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-require-effective-target tls_runtime } */
+/* { dg-add-options tls } */
__thread double thrtest[81];
int main ()
diff --git a/gcc/testsuite/gcc.dg/tls/pr24428.c b/gcc/testsuite/gcc.dg/tls/pr24428.c
index ecb747ede6d..6439698775a 100644
--- a/gcc/testsuite/gcc.dg/tls/pr24428.c
+++ b/gcc/testsuite/gcc.dg/tls/pr24428.c
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2" } */
/* { dg-require-effective-target tls_runtime } */
+/* { dg-add-options tls } */
__thread double thrtest[81];
int main ()
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-cproj-1.c b/gcc/testsuite/gcc.dg/torture/builtin-cproj-1.c
index 31cd5874ffb..031a2fca0a9 100644
--- a/gcc/testsuite/gcc.dg/torture/builtin-cproj-1.c
+++ b/gcc/testsuite/gcc.dg/torture/builtin-cproj-1.c
@@ -6,6 +6,7 @@
Origin: Kaveh R. Ghazi, April 9, 2010. */
/* { dg-do link } */
+/* { dg-add-options ieee } */
/* All references to link_error should go away at compile-time. The
argument is the __LINE__ number. It appears in the tree dump file
diff --git a/gcc/testsuite/gcc.dg/torture/pr16104-1.c b/gcc/testsuite/gcc.dg/torture/pr16104-1.c
index 3eb405906a2..ad5eda65fca 100644
--- a/gcc/testsuite/gcc.dg/torture/pr16104-1.c
+++ b/gcc/testsuite/gcc.dg/torture/pr16104-1.c
@@ -1,9 +1,7 @@
/* PR rtl-optimization/16104 */
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
-
-#include "cpuid.h"
+/* { dg-require-effective-target sse2_runtime } */
extern void abort (void);
@@ -76,14 +74,6 @@ do_test (void)
int
main (void)
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- do_test ();
-
+ do_test ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/torture/pr35771-1.c b/gcc/testsuite/gcc.dg/torture/pr35771-1.c
index 8def464aa6d..b3fd554da22 100644
--- a/gcc/testsuite/gcc.dg/torture/pr35771-1.c
+++ b/gcc/testsuite/gcc.dg/torture/pr35771-1.c
@@ -1,6 +1,6 @@
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
diff --git a/gcc/testsuite/gcc.dg/torture/pr35771-2.c b/gcc/testsuite/gcc.dg/torture/pr35771-2.c
index 3d6add10de9..a033caefd5c 100644
--- a/gcc/testsuite/gcc.dg/torture/pr35771-2.c
+++ b/gcc/testsuite/gcc.dg/torture/pr35771-2.c
@@ -1,6 +1,6 @@
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
typedef double __m128d __attribute__ ((__vector_size__ (16), __may_alias__));
diff --git a/gcc/testsuite/gcc.dg/torture/pr35771-3.c b/gcc/testsuite/gcc.dg/torture/pr35771-3.c
index 9a69b21a511..fcbe86cb1ba 100644
--- a/gcc/testsuite/gcc.dg/torture/pr35771-3.c
+++ b/gcc/testsuite/gcc.dg/torture/pr35771-3.c
@@ -1,6 +1,6 @@
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
diff --git a/gcc/testsuite/gcc.dg/torture/pr35771.h b/gcc/testsuite/gcc.dg/torture/pr35771.h
index 01c248751c1..7b921c41ba9 100644
--- a/gcc/testsuite/gcc.dg/torture/pr35771.h
+++ b/gcc/testsuite/gcc.dg/torture/pr35771.h
@@ -1,7 +1,5 @@
typedef TYPE __attribute__((aligned(1))) unaligned;
-#include "cpuid.h"
-
extern void abort (void);
@@ -27,14 +25,6 @@ do_test (void)
int
main (void)
{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- do_test ();
-
+ do_test ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/torture/pr36891.c b/gcc/testsuite/gcc.dg/torture/pr36891.c
index 31f7e173142..53e6163de14 100644
--- a/gcc/testsuite/gcc.dg/torture/pr36891.c
+++ b/gcc/testsuite/gcc.dg/torture/pr36891.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-ffast-math" } */
/* { dg-options "-ffast-math -msse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-require-effective-target sse { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
#define __vector __attribute__((vector_size(16) ))
__vector float f(void);
diff --git a/gcc/testsuite/gcc.dg/torture/pr44695.c b/gcc/testsuite/gcc.dg/torture/pr44695.c
new file mode 100644
index 00000000000..85bb4c7b927
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr44695.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+
+typedef unsigned char uint8_t;
+
+static uint8_t
+safe_div_func_uint8_t_u_u (uint8_t ui1, uint8_t ui2)
+{
+ return ui2 ? ui2 : (ui1 / ui2);
+}
+
+int
+int81 (int x)
+{
+ return safe_div_func_uint8_t_u_u (1, 8 & x);
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr44806.c b/gcc/testsuite/gcc.dg/torture/pr44806.c
new file mode 100644
index 00000000000..d0002d308d0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr44806.c
@@ -0,0 +1,90 @@
+/* { dg-do run } */
+
+#include <stdint.h>
+
+extern void abort (void);
+
+#define N_DEV_BITS_4 5
+#define N_INO_BITS_4 (32 - N_DEV_BITS_4 - 2 - 1)
+
+#define N_DEV_BITS_8 8
+#define N_INO_BITS_8 (64 - N_DEV_BITS_8 - 2 - 1)
+
+struct dev_ino_4
+{
+ uint32_t mode:2;
+ uint32_t short_ino:N_INO_BITS_4;
+ uint32_t mapped_dev:N_DEV_BITS_4;
+ uint32_t always_set:1;
+};
+
+struct dev_ino_8
+{
+ uint32_t mode:2;
+ uint64_t short_ino:N_INO_BITS_8;
+ uint32_t mapped_dev:N_DEV_BITS_8;
+ uint32_t always_set:1;
+};
+
+struct dev_ino_full
+{
+ uint32_t mode:2;
+ uint32_t dev;
+ uint32_t ino;
+};
+
+enum di_mode
+{
+ DI_MODE_4 = 1,
+ DI_MODE_8 = 2,
+ DI_MODE_FULL = 3
+};
+
+struct di_ent
+{
+ union
+ {
+ struct dev_ino_4 di4;
+ struct dev_ino_8 di8;
+ struct dev_ino_full full;
+ uint32_t u32;
+ uint64_t u64;
+ void *ptr;
+ } u;
+};
+
+static struct di_ent
+decode_ptr (struct di_ent const *v)
+{
+ struct di_ent di;
+ di.u.ptr = (void *) v;
+ return di;
+}
+
+static int
+di_ent_equal (void const *x, void const *y)
+{
+ struct di_ent a = decode_ptr (x);
+ struct di_ent b = decode_ptr (y);
+ if (a.u.di4.mode != b.u.di4.mode)
+ return 0;
+
+ if (a.u.di4.mode == DI_MODE_4)
+ return (a.u.di4.short_ino == b.u.di4.short_ino
+ && a.u.di4.mapped_dev == b.u.di4.mapped_dev);
+
+ if (a.u.di8.mode == DI_MODE_8)
+ return (a.u.di8.short_ino == b.u.di8.short_ino
+ && a.u.di8.mapped_dev == b.u.di8.mapped_dev);
+
+ return (a.u.full.ino == b.u.full.ino
+ && a.u.full.dev == b.u.full.dev);
+}
+
+int
+main ()
+{
+ if (di_ent_equal ((void *) 0x80143c4d, (void *) 0x80173851) != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr44977.c b/gcc/testsuite/gcc.dg/torture/pr44977.c
new file mode 100644
index 00000000000..66fd7d1bfae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr44977.c
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+
+static unsigned short
+foo (unsigned short ui1, unsigned short ui2)
+{
+ return ui1 - ui2;
+}
+
+static unsigned short
+bar (unsigned ui1, unsigned short ui2)
+{
+ return ui1 + ui2;
+}
+
+struct S1
+{
+ const short f3;
+};
+int g_31;
+short g_67;
+struct S1 g_68[2][5][9][1][1] = {
+};
+
+int func_90 (int);
+
+int int329 (int * const *const int32p_81, short ** p_82)
+{
+ short l_169[8];
+ for (g_31 = 0; g_31 <= 0; g_31 = foo (g_31, 1))
+ {
+ short l_85;
+lbl_89:g_67 ^= l_85;
+ for (l_85 = 0; l_85 >= 0; l_85 = bar)
+ if (g_31)
+ goto lbl_89;
+ func_90 (1), g_68[0][2][2][0][0].f3, 0;
+ }
+ return l_169[6];
+}
+
diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
index cbbb9d03a4c..139b74ed9c6 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-2.c
@@ -1,10 +1,9 @@
/* PR middle-end/37009 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
#include <emmintrin.h>
-#include "cpuid.h"
#include "check.h"
#ifndef ALIGNMENT
@@ -44,14 +43,7 @@ int
main (void)
{
__m128 x = { 1.0 };
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- foo (x, x, x, 5);
+ foo (x, x, x, 5);
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
index ffe52f2a3e0..31cb0c472b5 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/alloca-3.c
@@ -1,10 +1,9 @@
/* PR middle-end/37009 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
#include <emmintrin.h>
-#include "cpuid.h"
#include "check.h"
#ifndef ALIGNMENT
@@ -44,14 +43,7 @@ int
main (void)
{
__m128 x = { 1.0 };
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- foo (x, x, x, x, 5);
+ foo (x, x, x, x, 5);
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c b/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c
index c020d731293..dd5dffc1581 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/push-1.c
@@ -1,10 +1,9 @@
/* PR middle-end/37010 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2 -mpreferred-stack-boundary=2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
#include <emmintrin.h>
-#include "cpuid.h"
typedef __PTRDIFF_TYPE__ ptrdiff_t;
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
@@ -42,19 +41,11 @@ int
main (void)
{
__m128 x = { 1.0 };
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- {
- foo (x, x, x, x, 5);
+ foo (x, x, x, x, 5);
- if (__builtin_memcmp (&r, &x, sizeof (r)))
- abort ();
- }
+ if (__builtin_memcmp (&r, &x, sizeof (r)))
+ abort ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c b/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c
index 3e34cf148b7..5b49685fa82 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/vararg-3.c
@@ -1,11 +1,10 @@
/* PR middle-end/37009 */
/* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-msse2" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
#include <stdarg.h>
#include <emmintrin.h>
-#include "cpuid.h"
#include "check.h"
#ifndef ALIGNMENT
@@ -72,14 +71,8 @@ int
main (void)
{
__m128 x = { 1.0 };
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
- foo ("foo", 5, 5.0, x);
+
+ foo ("foo", 5, 5.0, x);
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/transparent-union-1.c b/gcc/testsuite/gcc.dg/transparent-union-1.c
index 2360912e3c5..3f0c260c906 100644
--- a/gcc/testsuite/gcc.dg/transparent-union-1.c
+++ b/gcc/testsuite/gcc.dg/transparent-union-1.c
@@ -1,5 +1,5 @@
/* PR c/20043 */
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-options "-std=gnu99" } */
extern void f0 (int *);
diff --git a/gcc/testsuite/gcc.dg/transparent-union-2.c b/gcc/testsuite/gcc.dg/transparent-union-2.c
index 09fbb4d9722..adc20761796 100644
--- a/gcc/testsuite/gcc.dg/transparent-union-2.c
+++ b/gcc/testsuite/gcc.dg/transparent-union-2.c
@@ -1,5 +1,5 @@
/* PR c/20043 */
-/* { dg-compile } */
+/* { dg-do compile } */
/* { dg-options "-std=gnu99" } */
typedef union { int *i; long *l; } U
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/ifc-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ifc-6.c
new file mode 100644
index 00000000000..a9c5db3873f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ifc-6.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-c -O2 -ftree-vectorize" { target *-*-* } } */
+
+static int x;
+foo (int n, int *A)
+{
+ int i;
+ for (i = 0; i < n; i++)
+ {
+ if (A[i])
+ x = 2;
+ if (A[i + 1])
+ x = 1;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ifc-pr44710.c b/gcc/testsuite/gcc.dg/tree-ssa/ifc-pr44710.c
new file mode 100644
index 00000000000..d4a1be8f03e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ifc-pr44710.c
@@ -0,0 +1,44 @@
+/* { dg-do compile } */
+/* { dg-options "-c -O2 -ftree-vectorize" { target *-*-* } } */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define N 64
+float arr[N];
+
+__attribute__ ((noinline))
+int foo (unsigned int n, float *min)
+{
+ unsigned int pos = 1;
+ unsigned int i;
+ float limit = N+N;
+
+ for (i = 0; i < N; i++)
+ if (arr[i] < limit)
+ {
+ pos = i + 1;
+ limit = arr[i];
+ }
+
+ *min = limit;
+ return pos;
+}
+
+int main (void)
+{
+ int i, pos;
+ float min;
+
+ for (i = 0; i < N; i++)
+ arr[i] = (float)(i);
+
+ arr[2] = -5.8;
+
+ pos = foo (N, &min);
+ if (pos != 3 || min != arr[2])
+ abort ();
+
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c
new file mode 100644
index 00000000000..bf0714902a6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-fnsplit -fdump-tree-optimized" } */
+
+struct a {int a,b;};
+struct a make_me_big (int a);
+struct a split_me (int a)
+{
+ struct a retval;
+ if (__builtin_expect (a!=0,1))
+ {
+ retval.a = 0;
+ retval.b = 0;
+ return retval;
+ }
+ else
+ {
+ struct a retval = make_me_big (a);
+ retval = make_me_big (a);
+ retval = make_me_big (a);
+ retval = make_me_big (a);
+ retval = make_me_big (a);
+ retval = make_me_big (a);
+ return retval;
+ }
+}
+int val;
+test()
+{
+ split_me (val);
+ split_me (val);
+ split_me (val);
+ split_me (val);
+}
+/* { dg-final { scan-tree-dump-times "Splitting function" 1 "fnsplit"} } */
+/* { dg-final { cleanup-tree-dump "fnsplit" } } */
+/* { dg-final { scan-tree-dump "part" "optimized"} } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
index 9733d8f99d8..e6130bbe7bd 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-not "= unexpanded_var_list;" "fre" } } */
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
/* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre" } } */
+/* { dg-final { cleanup-tree-dump "fre" } } */
/* { dg-final { cleanup-tree-dump "pre" } } */
-
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/pr21463.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21463.c
index f490bf61e5a..3f63cdd8e8c 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr21463.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21463.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O -fdump-tree-phiprop" } */
+/* { dg-options "-O -fdump-tree-phiprop-details" } */
struct f
{
@@ -16,5 +16,5 @@ int g(int i, int c, struct f *ff, int g)
return *t;
}
-/* { dg-final { scan-tree-dump-not "\\*t" "phiprop" } } */
+/* { dg-final { scan-tree-dump-times "Inserting PHI for result of load" 1 "phiprop" } } */
/* { dg-final { cleanup-tree-dump "phiprop" } } */
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-ccp-29.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c
new file mode 100644
index 00000000000..44d2945a311
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-29.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-ccp2" } */
+
+static double num;
+int foo (void)
+{
+ return *(unsigned *)&num;
+}
+
+/* { dg-final { scan-tree-dump "return 0;" "ccp2" } } */
+/* { dg-final { cleanup-tree-dump "ccp2" } } */
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 fe41966a6d4..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: 7" 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/vrp50.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp50.c
new file mode 100644
index 00000000000..bf21672c61a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp50.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+int
+foo (unsigned int i, unsigned int j)
+{
+ i &= 15;
+ j &= 15;
+ i += 1024;
+ j += 2048;
+ i &= j;
+ return i < 16;
+}
+
+int
+bar (int i)
+{
+ int c = 2;
+ c &= i > 6;
+ return c == 0;
+}
+
+int baz (int x, int y)
+{
+ x &= 15;
+ y &= 15;
+ x += 4;
+ y += 16;
+ x &= y;
+ return x < 20;
+}
+
+/* { dg-final { scan-tree-dump "Folding predicate i_\[^\n\r\]* to 1" "vrp1" } } */
+/* { dg-final { scan-tree-dump "Folding predicate c_\[^\n\r\]* to 1" "vrp1" } } */
+/* { dg-final { scan-tree-dump "Folding predicate x_\[^\n\r\]* to 1" "vrp1" } } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp51.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp51.c
new file mode 100644
index 00000000000..66aa5ed6d6b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp51.c
@@ -0,0 +1,58 @@
+/* PR tree-optimization/28632 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vrp" } */
+
+void
+v4 (unsigned a, unsigned b)
+{
+ if (a < 0x1000) return;
+ if (a > 0x1000) return;
+ if (b < 0x0110) return;
+ /* constant true. */
+ if (!__builtin_constant_p ((a|b) >= 0x01000))
+ __asm__("bug.always.true");
+ /* VRP must not think that this is constant. */
+ if (__builtin_constant_p ((a|b) >= 0x10000))
+ __asm__("bug.not.always.true");
+}
+
+void
+u4 (unsigned n)
+{
+ if (n > 0x10111) return;
+ if (n < 0x10101) return;
+ /* always true. */
+ if (!__builtin_constant_p (n & 0x00100))
+ __asm__("bug.always.true");
+ /* VRP must not think that this is constant true. */
+ if (__builtin_constant_p (n & 0x00001))
+ __asm__("bug.not.always.true");
+ /* Out of range, always evaluates to constant false. */
+ if (!__builtin_constant_p (n & 0x01000))
+ __asm__("bug.always.false");
+}
+
+void
+u5 (unsigned n)
+{
+ struct s {unsigned exp:8;} x;
+ x.exp = n;
+ if (__builtin_constant_p(((n + 1) & 255) > 1))
+ __asm__("bug.not.always.true");
+}
+
+void
+v5 (int a, int b)
+{
+ if (a < 0x1000) return;
+ if (a > 0x1000) return;
+ if (b < 0x0110) return;
+ /* constant true. */
+ if (!__builtin_constant_p ((a|b) >= 0x01000))
+ __asm__("bug.always.true");
+ /* VRP must not think that this is always true. */
+ if (__builtin_constant_p ((a|b) >= 0x10000))
+ __asm__("bug.not.always.true");
+}
+
+/* { dg-final { scan-assembler-not "bug\." } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp52.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp52.c
new file mode 100644
index 00000000000..7d530e24688
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp52.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+int
+foo (unsigned int i, unsigned int j)
+{
+ i &= 15;
+ j &= 15;
+ i += 1024;
+ j += 2048;
+ i |= j;
+ return i >= 1024 + 2048;
+}
+
+/* { dg-final { scan-tree-dump "Folding predicate i_\[^\n\r\]* to 1" "vrp1" } } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp53.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp53.c
new file mode 100644
index 00000000000..66bbfb67b90
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp53.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-vrp1" } */
+
+int
+f1 (int x)
+{
+ x &= 0xff;
+ x += 0x400;
+ x &= 0x7ff;
+ return x;
+}
+
+int
+f2 (int x)
+{
+ x &= 0xff;
+ x += 0x5400;
+ x |= 0x4400;
+ return x;
+}
+
+/* { dg-final { scan-tree-dump-not "\& (2047|0x7ff)" "vrp1" } } */
+/* { dg-final { scan-tree-dump-not "\\| (17408|0x4400)" "vrp1" } } */
+/* { dg-final { cleanup-tree-dump "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c b/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c
index 5627c265523..d5c0a1a1331 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c
@@ -13,7 +13,7 @@ interp_pitch(float *exc, float *interp, int pitch, int len)
for (i=0;i<len;i++)
{
float tmp = 0;
- for (k=0;k<7;k++)
+ for (k=0;k<12;k++)
{
tmp += exc[i-pitch+k+maxj-6];
}
@@ -23,7 +23,7 @@ interp_pitch(float *exc, float *interp, int pitch, int len)
int main()
{
- float *exc = calloc(126,sizeof(float));
+ float *exc = calloc(136,sizeof(float));
float *interp = calloc(80,sizeof(float));
int pitch = -35;
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31d.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31d.c
deleted file mode 100644
index d9ea5d12638..00000000000
--- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-31d.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* { dg-require-effective-target vect_int } */
-
-#include <stdarg.h>
-#include "../../tree-vect.h"
-
-#define N 5
-
-struct t{
- int k[N];
- int l;
-};
-
-struct s{
- char a; /* aligned */
- char b[N-1]; /* unaligned (offset 1B) */
- char c[N]; /* aligned (offset NB) */
- struct t d; /* aligned (offset 2NB) */
- struct t e; /* unaligned (offset 2N+4N+4 B) */
-};
-
-int main1 ()
-{
- int i;
- struct s tmp;
-
- /* unaligned */
- for (i = 0; i < N; i++)
- {
- tmp.e.k[i] = 8;
- }
-
- /* check results: */
- for (i = 0; i < N; i++)
- {
- if (tmp.e.k[i] != 8)
- abort ();
- }
-
- return 0;
-}
-
-int main (void)
-{
- check_vect ();
-
- return main1 ();
-}
-
-/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
-/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-68d.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-68d.c
deleted file mode 100644
index 7fc25946587..00000000000
--- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-68d.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* { dg-require-effective-target vect_int } */
-
-#include <stdarg.h>
-#include "../../tree-vect.h"
-
-#define N 11
-
-struct s{
- int m;
- int n[N][N][N];
-};
-
-struct test1{
- struct s a; /* array a.n is unaligned */
- int b;
- int c;
- struct s e; /* array e.n is aligned */
-};
-
-int main1 ()
-{
- int i,j;
- struct test1 tmp1;
-
- /* 4. unaligned */
- for (i = 3; i < N-3; i++)
- {
- tmp1.e.n[1][2][i] = 8;
- }
-
- /* check results: */
- for (i = 3; i <N-3; i++)
- {
- if (tmp1.e.n[1][2][i] != 8)
- abort ();
- }
-
- return 0;
-}
-
-int main (void)
-{
- check_vect ();
-
- return main1 ();
-}
-
-/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } } */
-/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c
index 41fe3aebf90..d11a9a2d781 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76a.c
@@ -3,7 +3,7 @@
#include <stdarg.h>
#include "../../tree-vect.h"
-#define N 8
+#define N 16
#define OFF 4
/* Check handling of accesses for which the "initial condition" -
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
index 8723d266f9d..d716b613946 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-vect-76b.c
@@ -3,7 +3,7 @@
#include <stdarg.h>
#include "../../tree-vect.h"
-#define N 8
+#define N 16
#define OFF 4
/* Check handling of accesses for which the "initial condition" -
diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c
index 5627c265523..d5c0a1a1331 100644
--- a/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c
+++ b/gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-fast-math-vect-pr29925.c
@@ -13,7 +13,7 @@ interp_pitch(float *exc, float *interp, int pitch, int len)
for (i=0;i<len;i++)
{
float tmp = 0;
- for (k=0;k<7;k++)
+ for (k=0;k<12;k++)
{
tmp += exc[i-pitch+k+maxj-6];
}
@@ -23,7 +23,7 @@ interp_pitch(float *exc, float *interp, int pitch, int len)
int main()
{
- float *exc = calloc(126,sizeof(float));
+ float *exc = calloc(136,sizeof(float));
float *interp = calloc(80,sizeof(float));
int pitch = -35;
diff --git a/gcc/testsuite/gcc.dg/vect/pr35821-altivec.c b/gcc/testsuite/gcc.dg/vect/pr35821-altivec.c
deleted file mode 100644
index 79fa926ec67..00000000000
--- a/gcc/testsuite/gcc.dg/vect/pr35821-altivec.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* { dg-do compile { target { powerpc_altivec_ok } } } */
-
-#include "altivec.h"
-
-void
-foo (float f_gain1, int n_tail, float * __restrict__ f_in_hptr,
- float * __restrict__ f_out_hptr)
-{
- int i;
- vector float *v_f_in_hptr, *v_f_out_hptr;
-
- f_in_hptr = ( float* )v_f_in_hptr;
- f_out_hptr = ( float* )v_f_out_hptr;
-
- for( i = 0 ; i < n_tail ; i++ ) {
- f_out_hptr[0] = f_in_hptr[0] * f_gain1;
- f_in_hptr++;
- f_out_hptr++;
- }
-}
-
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { cleanup-tree-dump "vect" } } */
-
diff --git a/gcc/testsuite/gcc.dg/vect/pr35821-spu.c b/gcc/testsuite/gcc.dg/vect/pr35821-spu.c
deleted file mode 100644
index 4cc255f07ee..00000000000
--- a/gcc/testsuite/gcc.dg/vect/pr35821-spu.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* { dg-do compile { target { spu-*-* } } } */
-
-void
-foo (float f_gain1, int n_tail, float * __restrict__ f_in_hptr,
- float * __restrict__ f_out_hptr)
-{
- int i;
- __attribute__((__spu_vector__)) float *v_f_in_hptr, *v_f_out_hptr;
-
- f_in_hptr = ( float* )v_f_in_hptr;
- f_out_hptr = ( float* )v_f_out_hptr;
-
- for( i = 0 ; i < n_tail ; i++ ) {
- f_out_hptr[0] = f_in_hptr[0] * f_gain1;
- f_in_hptr++;
- f_out_hptr++;
- }
-}
-
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/* { dg-final { cleanup-tree-dump "vect" } } */
-
diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-1.c b/gcc/testsuite/gcc.dg/vect/slp-perm-1.c
index afd66b63461..fcaef1e3966 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-perm-1.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-perm-1.c
@@ -42,16 +42,18 @@ int main (int argc, const char* argv[])
for (i = 0; i < N; i++)
{
input[i] = i%256;
- if (input[i] > 200)
- abort();
output[i] = 0;
+ __asm__ volatile ("");
}
foo (input, output);
for (i = 0; i < N; i++)
- if (output[i] != check_results[i])
- abort ();
+ {
+ if (output[i] != check_results[i])
+ abort ();
+ __asm__ volatile ("");
+ }
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-2.c b/gcc/testsuite/gcc.dg/vect/slp-perm-2.c
index a033498d5b6..e6851911413 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-perm-2.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-perm-2.c
@@ -37,16 +37,18 @@ int main (int argc, const char* argv[])
for (i = 0; i < N; i++)
{
input[i] = i%256;
- if (input[i] > 200)
- abort();
output[i] = 0;
+ __asm__ volatile ("");
}
foo (input, output);
for (i = 0; i < N; i++)
- if (output[i] != check_results[i])
- abort ();
+ {
+ if (output[i] != check_results[i])
+ abort ();
+ __asm__ volatile ("");
+ }
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-3.c b/gcc/testsuite/gcc.dg/vect/slp-perm-3.c
index 33c09a6d449..e83124f34cb 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-perm-3.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-perm-3.c
@@ -51,16 +51,18 @@ int main (int argc, const char* argv[])
for (i = 0; i < N; i++)
{
input[i] = i%256;
- if (input[i] > 200)
- abort();
output[i] = 0;
+ __asm__ volatile ("");
}
foo (input, output);
- for (i = 0; i < N - N; i++)
- if (output[i] != check_results[i])
- abort ();
+ for (i = 0; i < N; i++)
+ {
+ if (output[i] != check_results[i])
+ abort ();
+ __asm__ volatile ("");
+ }
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/vect/slp-perm-4.c b/gcc/testsuite/gcc.dg/vect/slp-perm-4.c
index 867dfd4aa90..91a423249f8 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-perm-4.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-perm-4.c
@@ -69,11 +69,12 @@ int main (int argc, const char* argv[])
if (input[i] > 200)
abort();
output[i] = 0;
+ __asm__ volatile ("");
}
foo (input, output);
- for (i = 0; i < N - N; i++)
+ for (i = 0; i < N; i++)
if (output[i] != check_results[i])
abort ();
diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h
index 2f21c2b1673..ed59d7976b9 100644
--- a/gcc/testsuite/gcc.dg/vect/tree-vect.h
+++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h
@@ -41,6 +41,11 @@ check_vect (void)
want_level = 1, want_c = bit_SSSE3, want_d = 0;
# else
want_level = 1, want_c = 0, want_d = bit_SSE2;
+# if defined(__sun__) && defined(__svr4__)
+ /* Before Solaris 9 4/04, trying to execute an SSE2 instruction gives
+ SIGILL even if the CPU can handle them. */
+ asm volatile ("unpcklpd %xmm0,%xmm2");
+# endif
# endif
if (!__get_cpuid (want_level, &a, &b, &c, &d)
diff --git a/gcc/testsuite/gcc.dg/vect/vect-109.c b/gcc/testsuite/gcc.dg/vect/vect-109.c
index 393909312bd..ddba2635bff 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-109.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-109.c
@@ -72,8 +72,8 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" { xfail vect_hw_misalign } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 10 "vect" { target vect_hw_misalign } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-42.c b/gcc/testsuite/gcc.dg/vect/vect-42.c
index 3ba1c6f7fde..fa832008698 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-42.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-42.c
@@ -65,6 +65,7 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { { ! vector_alignment_reachable } && { ! vect_hw_misalign } } } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || { ! vector_alignment_reachable } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || { { ! vector_alignment_reachable } || vect_hw_misalign } } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || { { ! vector_alignment_reachable } || vect_hw_misalign } } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-56.c b/gcc/testsuite/gcc.dg/vect/vect-56.c
index 7b7da123591..1555d41df6f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-56.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-56.c
@@ -68,6 +68,8 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_hw_misalign } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-60.c b/gcc/testsuite/gcc.dg/vect/vect-60.c
index cbdf63db123..ba8ffe65400 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-60.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-60.c
@@ -69,6 +69,8 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_align } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { xfail { vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { vect_hw_misalign } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c
index 85666d9e699..dfb98cfd541 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-93.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-93.c
@@ -72,7 +72,7 @@ int main (void)
/* main && main1 together: */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { { vect_no_align } || {! vector_alignment_reachable} } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { { vect_no_align } || { { ! vector_alignment_reachable} || vect_hw_misalign } } } } } */
/* in main1: */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-96.c b/gcc/testsuite/gcc.dg/vect/vect-96.c
index f392169f770..c7dea6123a8 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-96.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-96.c
@@ -44,6 +44,6 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_no_align} && vector_alignment_reachable } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || {! vector_alignment_reachable} } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align } || { { ! vector_alignment_reachable} || vect_hw_misalign } } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
index e8fe027f5f3..7981c4a475f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
@@ -27,13 +27,13 @@ __attribute__ ((noinline)) int main1 (int n)
for (i = 0; i < n; i++)
{
sa[i+7] = sb[i];
- ia[i+3] = ib[i];
+ ia[i+3] = ib[i+1];
}
/* check results: */
for (i = 0; i < n; i++)
{
- if (sa[i+7] != sb[i] || ia[i+3] != ib[i])
+ if (sa[i+7] != sb[i] || ia[i+3] != ib[i+1])
abort ();
}
@@ -44,7 +44,9 @@ __attribute__ ((noinline)) int main1 (int n)
access for peeling, and therefore will examine the option of
using a peeling factor = (V-3)%V = 1 for V=2,4.
This will not align the access 'sa[i+3]' (for which we need to
- peel 5 iterations), so the loop can not be vectorized. */
+ peel 5 iterations). However, 'ia[i+3]' also gets aligned if we peel 5
+ iterations, so the loop is vectorizable on all targets that support
+ unaligned loads. */
__attribute__ ((noinline)) int main2 (int n)
{
@@ -55,13 +57,13 @@ __attribute__ ((noinline)) int main2 (int n)
for (i = 0; i < n; i++)
{
ia[i+3] = ib[i];
- sa[i+3] = sb[i];
+ sa[i+3] = sb[i+1];
}
/* check results: */
for (i = 0; i < n; i++)
{
- if (sa[i+3] != sb[i] || ia[i+3] != ib[i])
+ if (sa[i+3] != sb[i+1] || ia[i+3] != ib[i])
abort ();
}
@@ -78,11 +80,8 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail {! vect_hw_misalign} } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vect_hw_misalign} } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c b/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
index 274fb025319..3a83491065f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
@@ -20,7 +20,9 @@ unsigned int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,
access for peeling, and therefore will examine the option of
using a peeling factor = VF-7%VF. This will result in a peeling factor 1,
which will also align the access to 'ia[i+3]', and the loop could be
- vectorized on all targets that support unaligned loads. */
+ vectorized on all targets that support unaligned loads.
+ Without cost model on targets that support misaligned stores, no peeling
+ will be applied since we want to keep the four loads aligned. */
__attribute__ ((noinline))
int main1 (int n)
@@ -50,7 +52,11 @@ int main1 (int n)
using a peeling factor = VF-3%VF. This will result in a peeling factor
1 if VF=4,2. This will not align the access to 'sa[i+3]', for which we
need to peel 5,1 iterations for VF=4,2 respectively, so the loop can not
- be vectorized. */
+ be vectorized. However, 'ia[i+3]' also gets aligned if we peel 5
+ iterations, so the loop is vectorizable on all targets that support
+ unaligned loads.
+ Without cost model on targets that support misaligned stores, no peeling
+ will be applied since we want to keep the four loads aligned. */
__attribute__ ((noinline))
int main2 (int n)
@@ -85,11 +91,10 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail {! vect_hw_misalign} } } } */
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vect_hw_misalign} } } } */
-/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail { vect_no_align } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" { target { vect_hw_misalign} } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { target { vect_hw_misalign } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-peel-1.c b/gcc/testsuite/gcc.dg/vect/vect-peel-1.c
new file mode 100644
index 00000000000..ae7746389d3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-peel-1.c
@@ -0,0 +1,51 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 128
+
+int ib[N+5];
+
+__attribute__ ((noinline))
+int main1 ()
+{
+ int i;
+ int ia[N+1];
+
+ /* All the accesses are misaligned. With cost model disabled, we count the
+ the number of aligned accesses for each peeling option, and in this case
+ we align the two loads if possible (i.e., if misaligned stores are
+ supported). */
+ for (i = 1; i <= N; i++)
+ {
+ ia[i] = ib[i+2] + ib[i+6];
+ }
+
+ /* check results: */
+ for (i = 1; i <= N; i++)
+ {
+ if (ia[i] != ib[i+2] + ib[i+6])
+ abort ();
+ }
+
+ return 0;
+}
+
+int main (void)
+{
+ int i;
+
+ check_vect ();
+
+ for (i = 0; i < N+5; i++)
+ ib[i] = i;
+
+ return main1 ();
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_hw_misalign } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_no_align } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-peel-2.c b/gcc/testsuite/gcc.dg/vect/vect-peel-2.c
new file mode 100644
index 00000000000..ee7b8dbe62e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-peel-2.c
@@ -0,0 +1,52 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 128
+
+/* unaligned store. */
+
+int ib[N+5];
+
+__attribute__ ((noinline))
+int main1 ()
+{
+ int i;
+ int ia[N+1];
+
+ /* The store is aligned and the loads are misaligned with the same
+ misalignment. Cost model is disabled. If misaligned stores are supported,
+ we peel according to the loads to align them. */
+ for (i = 0; i <= N; i++)
+ {
+ ia[i] = ib[i+2] + ib[i+6];
+ }
+
+ /* check results: */
+ for (i = 1; i <= N; i++)
+ {
+ if (ia[i] != ib[i+2] + ib[i+6])
+ abort ();
+ }
+
+ return 0;
+}
+
+int main (void)
+{
+ int i;
+
+ check_vect ();
+
+ for (i = 0; i < N+5; i++)
+ ib[i] = i;
+
+ return main1 ();
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_hw_misalign } } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target vect_hw_misalign } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-peel-3.c b/gcc/testsuite/gcc.dg/vect/vect-peel-3.c
new file mode 100644
index 00000000000..80f03c8d8af
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-peel-3.c
@@ -0,0 +1,55 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include "tree-vect.h"
+
+#define N 128
+#define RES 21888
+
+/* unaligned store. */
+
+int ib[N+10];
+int ia[N+10];
+int ic[N+10];
+
+__attribute__ ((noinline))
+int main1 ()
+{
+ int i, suma = 0, sumb = 0, sumc = 0;
+
+ /* ib and ic have same misalignment, we peel to align them. */
+ for (i = 1; i <= N; i++)
+ {
+ suma += ia[i];
+ sumb += ib[i+6];
+ sumc += ic[i+2];
+ }
+
+ /* check results: */
+ if (suma + sumb + sumc != RES)
+ abort ();
+
+ return 0;
+}
+
+int main (void)
+{
+ int i;
+
+ check_vect ();
+
+ for (i = 0; i < N+10; i++)
+ {
+ ib[i] = i;
+ ic[i] = i+2;
+ ia[i] = i/2;
+ }
+
+ return main1 ();
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-peel-4.c b/gcc/testsuite/gcc.dg/vect/vect-peel-4.c
new file mode 100644
index 00000000000..971d02334ac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-peel-4.c
@@ -0,0 +1,47 @@
+/* { dg-require-effective-target vect_int } */
+
+#include <stdarg.h>
+#include "tree-vect.h"
+
+#define N 128
+
+int ib[N+5];
+
+__attribute__ ((noinline))
+int main1 ()
+{
+ int i;
+ int ia[N+1];
+
+ /* Don't peel keeping one load and the store aligned. */
+ for (i = 0; i <= N; i++)
+ {
+ ia[i] = ib[i] + ib[i+6];
+ }
+
+ /* check results: */
+ for (i = 1; i <= N; i++)
+ {
+ if (ia[i] != ib[i] + ib[i+6])
+ abort ();
+ }
+
+ return 0;
+}
+
+int main (void)
+{
+ int i;
+
+ check_vect ();
+
+ for (i = 0; i < N+5; i++)
+ ib[i] = i;
+
+ return main1 ();
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-6.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-6.c
index 4b27be8c694..3f8e2ec69a0 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-reduc-6.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-6.c
@@ -49,5 +49,6 @@ int main (void)
}
/* need -ffast-math to vectorizer these loops. */
-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
+/* ARM NEON passes -ffast-math to these tests, so expect this to fail. */
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail arm_neon_ok } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp
index 24717c844cc..a68d8c65f6e 100644
--- a/gcc/testsuite/gcc.dg/vect/vect.exp
+++ b/gcc/testsuite/gcc.dg/vect/vect.exp
@@ -67,11 +67,8 @@ if [istarget "powerpc-*paired*"] {
} elseif { [istarget "spu-*-*"] } {
set dg-do-what-default run
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
- if { ![check_effective_target_sse2] } then {
- return
- }
lappend DEFAULT_VECTCFLAGS "-msse2"
- if [check_sse2_hw_available] {
+ if { [check_effective_target_sse2_runtime] } {
set dg-do-what-default run
} else {
set dg-do-what-default compile
@@ -105,6 +102,10 @@ if [istarget "powerpc-*paired*"] {
set dg-do-what-default run
} elseif [is-effective-target arm_neon_ok] {
eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
+ # NEON does not support denormals, so is not used for vectorization by
+ # default to avoid loss of precision. We must pass -ffast-math to test
+ # vectorization of float operations.
+ lappend DEFAULT_VECTCFLAGS "-ffast-math"
if [is-effective-target arm_neon_hw] {
set dg-do-what-default run
} else {
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/interrupt-1.c b/gcc/testsuite/gcc.target/arm/interrupt-1.c
new file mode 100644
index 00000000000..18379de33d0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/interrupt-1.c
@@ -0,0 +1,23 @@
+/* Verify that prologue and epilogue are correct for functions with
+ __attribute__ ((interrupt)). */
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+
+/* This test is not valid when -mthumb. We just cheat. */
+#ifndef __thumb__
+extern void bar (int);
+extern void foo (void) __attribute__ ((interrupt("IRQ")));
+
+void foo ()
+{
+ bar (0);
+}
+#else
+void foo ()
+{
+ asm ("stmfd\tsp!, {r0, r1, r2, r3, r4, fp, ip, lr}");
+ asm ("ldmfd\tsp!, {r0, r1, r2, r3, r4, fp, ip, pc}^");
+}
+#endif
+/* { dg-final { scan-assembler "stmfd\tsp!, {r0, r1, r2, r3, r4, fp, ip, lr}" } } */
+/* { dg-final { scan-assembler "ldmfd\tsp!, {r0, r1, r2, r3, r4, fp, ip, pc}\\^" } } */
diff --git a/gcc/testsuite/gcc.target/arm/interrupt-2.c b/gcc/testsuite/gcc.target/arm/interrupt-2.c
new file mode 100644
index 00000000000..b979bf17e8a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/interrupt-2.c
@@ -0,0 +1,26 @@
+/* Verify that prologue and epilogue are correct for functions with
+ __attribute__ ((interrupt)). */
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+/* This test is not valid when -mthum. We just cheat. */
+#ifndef __thumb__
+extern void bar (int);
+extern void test (void) __attribute__((__interrupt__));
+
+int foo;
+void test()
+{
+ funcptrs(foo);
+ foo = 0;
+}
+#else
+void test ()
+{
+ asm ("stmfd\tsp!, {r0, r1, r2, r3, r4, r5, ip, lr}");
+ asm ("ldmfd\tsp!, {r0, r1, r2, r3, r4, r5, ip, pc}^");
+}
+#endif
+
+/* { dg-final { scan-assembler "stmfd\tsp!, {r0, r1, r2, r3, r4, r5, ip, lr}" } } */
+/* { dg-final { scan-assembler "ldmfd\tsp!, {r0, r1, r2, r3, r4, r5, ip, pc}\\^" } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-vadds64.c b/gcc/testsuite/gcc.target/arm/neon-vadds64.c
new file mode 100644
index 00000000000..284a1d8adc9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vadds64.c
@@ -0,0 +1,21 @@
+/* Test the `vadd_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)0x00000000deadbeefLL;
+
+ out_int64x1_t = vadd_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0xdeadbeefdeadbeefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vaddu64.c b/gcc/testsuite/gcc.target/arm/neon-vaddu64.c
new file mode 100644
index 00000000000..05bda8b046e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vaddu64.c
@@ -0,0 +1,21 @@
+/* Test the `vadd_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)0x00000000deadbeefLL;
+
+ out_uint64x1_t = vadd_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0xdeadbeefdeadbeefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vands64.c b/gcc/testsuite/gcc.target/arm/neon-vands64.c
new file mode 100644
index 00000000000..8b6975db6e0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vands64.c
@@ -0,0 +1,21 @@
+/* Test the `vand_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)0xdead00000000beefLL;
+
+ out_int64x1_t = vand_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0xdead000000000000LL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vandu64.c b/gcc/testsuite/gcc.target/arm/neon-vandu64.c
new file mode 100644
index 00000000000..a8ec3a28b4d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vandu64.c
@@ -0,0 +1,21 @@
+/* Test the `vand_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)0xdead00000000beefLL;
+
+ out_uint64x1_t = vand_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0xdead000000000000LL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vbics64.c b/gcc/testsuite/gcc.target/arm/neon-vbics64.c
new file mode 100644
index 00000000000..ec3438baef8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vbics64.c
@@ -0,0 +1,21 @@
+/* Test the `vbic_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)(~0xdead00000000beefLL);
+
+ out_int64x1_t = vbic_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0xdead000000000000LL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vbicu64.c b/gcc/testsuite/gcc.target/arm/neon-vbicu64.c
new file mode 100644
index 00000000000..a0c1b85b405
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vbicu64.c
@@ -0,0 +1,21 @@
+/* Test the `vbic_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)(~0xdead00000000beefLL);
+
+ out_uint64x1_t = vbic_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0xdead000000000000LL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c b/gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c
new file mode 100644
index 00000000000..da24eaca69f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vdupQ_lanes64.c
@@ -0,0 +1,22 @@
+/* Test the `vdupq_lanes64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x2_t out_int64x2_t = {0, 0};
+ int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
+
+ out_int64x2_t = vdupq_lane_s64 ((int64x1_t)arg0_int64_t, 0);
+ if (vgetq_lane_s64 (out_int64x2_t, 0) != arg0_int64_t)
+ abort();
+ if (vgetq_lane_s64 (out_int64x2_t, 1) != arg0_int64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c b/gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c
new file mode 100644
index 00000000000..cc19ea51252
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vdupQ_laneu64.c
@@ -0,0 +1,22 @@
+/* Test the `vdupq_laneu64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x2_t out_uint64x2_t = {0, 0};
+ uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
+
+ out_uint64x2_t = vdupq_lane_u64 ((uint64x1_t)arg0_uint64_t, 0);
+ if (vgetq_lane_u64 (out_uint64x2_t, 0) != arg0_uint64_t)
+ abort();
+ if (vgetq_lane_u64 (out_uint64x2_t, 1) != arg0_uint64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c b/gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c
new file mode 100644
index 00000000000..79b4d4eb60d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vdupQ_ns64.c
@@ -0,0 +1,22 @@
+/* Test the `vdupq_ns64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x2_t out_int64x2_t = {0, 0};
+ int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
+
+ out_int64x2_t = vdupq_n_s64 (arg0_int64_t);
+ if (vgetq_lane_s64 (out_int64x2_t, 0) != arg0_int64_t)
+ abort();
+ if (vgetq_lane_s64 (out_int64x2_t, 1) != arg0_int64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c b/gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c
new file mode 100644
index 00000000000..ef6f47fd3aa
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vdupQ_nu64.c
@@ -0,0 +1,22 @@
+/* Test the `vdupq_nu64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x2_t out_uint64x2_t = {0, 0};
+ uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
+
+ out_uint64x2_t = vdupq_n_u64 (arg0_uint64_t);
+ if (vgetq_lane_u64 (out_uint64x2_t, 0) != arg0_uint64_t)
+ abort();
+ if (vgetq_lane_u64 (out_uint64x2_t, 1) != arg0_uint64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c b/gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c
new file mode 100644
index 00000000000..589ea22930d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vdup_ns64.c
@@ -0,0 +1,20 @@
+/* Test the `vdup_ns64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
+
+ out_int64x1_t = vdup_n_s64 (arg0_int64_t);
+ if ((int64_t)out_int64x1_t != arg0_int64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c b/gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c
new file mode 100644
index 00000000000..8bed5a0c7d7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vdup_nu64.c
@@ -0,0 +1,20 @@
+/* Test the `vdup_nu64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
+
+ out_uint64x1_t = vdup_n_u64 (arg0_uint64_t);
+ if ((uint64_t)out_uint64x1_t != arg0_uint64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-veors64.c b/gcc/testsuite/gcc.target/arm/neon-veors64.c
new file mode 100644
index 00000000000..59d5baa3579
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-veors64.c
@@ -0,0 +1,21 @@
+/* Test the `veor_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)0xdead00000000beefLL;
+
+ out_int64x1_t = veor_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0x0000beef0000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-veoru64.c b/gcc/testsuite/gcc.target/arm/neon-veoru64.c
new file mode 100644
index 00000000000..b7ff77af0d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-veoru64.c
@@ -0,0 +1,21 @@
+/* Test the `veor_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)0xdead00000000beefLL;
+
+ out_uint64x1_t = veor_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0x0000beef0000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c b/gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c
new file mode 100644
index 00000000000..5891e66193a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vget_lanes64.c
@@ -0,0 +1,20 @@
+/* Test the `vget_lane_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64_t out_int64_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t) 0xdeadbeefbadf00dLL;
+
+ out_int64_t = vget_lane_s64 (arg0_int64x1_t, 0);
+ if (out_int64_t != (int64_t)arg0_int64x1_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c b/gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c
new file mode 100644
index 00000000000..b0ce070d3b9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vget_laneu64.c
@@ -0,0 +1,20 @@
+/* Test the `vget_lane_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64_t out_uint64_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t) 0xdeadbeefbadf00dLL;
+
+ out_uint64_t = vget_lane_u64 (arg0_uint64x1_t, 0);
+ if (out_uint64_t != (uint64_t)arg0_uint64x1_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vmla-1.c b/gcc/testsuite/gcc.target/arm/neon-vmla-1.c
index 336a53bb481..9d239ed47d0 100644
--- a/gcc/testsuite/gcc.target/arm/neon-vmla-1.c
+++ b/gcc/testsuite/gcc.target/arm/neon-vmla-1.c
@@ -1,5 +1,5 @@
/* { dg-require-effective-target arm_neon_hw } */
-/* { dg-options "-O2 -ftree-vectorize" } */
+/* { dg-options "-O2 -ftree-vectorize -ffast-math" } */
/* { dg-add-options arm_neon } */
/* { dg-final { scan-assembler "vmla\\.f32" } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-vmls-1.c b/gcc/testsuite/gcc.target/arm/neon-vmls-1.c
index 5e5e0c757ac..2beaebe17cf 100644
--- a/gcc/testsuite/gcc.target/arm/neon-vmls-1.c
+++ b/gcc/testsuite/gcc.target/arm/neon-vmls-1.c
@@ -1,5 +1,5 @@
/* { dg-require-effective-target arm_neon_hw } */
-/* { dg-options "-O2 -ftree-vectorize" } */
+/* { dg-options "-O2 -ftree-vectorize -ffast-math" } */
/* { dg-add-options arm_neon } */
/* { dg-final { scan-assembler "vmls\\.f32" } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c b/gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c
new file mode 100644
index 00000000000..5a8abdce038
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vmovQ_ns64.c
@@ -0,0 +1,22 @@
+/* Test the `vmovq_ns64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x2_t out_int64x2_t = {0, 0};
+ int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
+
+ out_int64x2_t = vmovq_n_s64 (arg0_int64_t);
+ if (vgetq_lane_s64 (out_int64x2_t, 0) != arg0_int64_t)
+ abort();
+ if (vgetq_lane_s64 (out_int64x2_t, 1) != arg0_int64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c b/gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c
new file mode 100644
index 00000000000..8012fc1753d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vmovQ_nu64.c
@@ -0,0 +1,23 @@
+/* Test the `vmovq_nu64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x2_t out_uint64x2_t = {0, 0};
+ uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
+
+ out_uint64x2_t = vmovq_n_u64 (arg0_uint64_t);
+ if (vgetq_lane_u64 (out_uint64x2_t, 0) != arg0_uint64_t)
+ abort();
+ if (vgetq_lane_u64 (out_uint64x2_t, 1) != arg0_uint64_t)
+ abort();
+ return 0;
+}
+
diff --git a/gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c b/gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c
new file mode 100644
index 00000000000..c125f4a247d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vmov_ns64.c
@@ -0,0 +1,20 @@
+/* Test the `vmov_ns64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64_t arg0_int64_t = (int64_t) 0xdeadbeef;
+
+ out_int64x1_t = vmov_n_s64 (arg0_int64_t);
+ if ((int64_t)out_int64x1_t != arg0_int64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c b/gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c
new file mode 100644
index 00000000000..71ecaed134e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vmov_nu64.c
@@ -0,0 +1,20 @@
+/* Test the `vmov_nu64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64_t arg0_uint64_t = (uint64_t) 0xdeadbeef;
+
+ out_uint64x1_t = vmov_n_u64 (arg0_uint64_t);
+ if ((uint64_t)out_uint64x1_t != arg0_uint64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vorns64.c b/gcc/testsuite/gcc.target/arm/neon-vorns64.c
new file mode 100644
index 00000000000..364dbd1904c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vorns64.c
@@ -0,0 +1,21 @@
+/* Test the `vorn_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)(~0xdead00000000beefLL);
+
+ out_int64x1_t = vorn_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0xdeadbeef0000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vornu64.c b/gcc/testsuite/gcc.target/arm/neon-vornu64.c
new file mode 100644
index 00000000000..b352868469f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vornu64.c
@@ -0,0 +1,21 @@
+/* Test the `vorn_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)(~0xdead00000000beefLL);
+
+ out_uint64x1_t = vorn_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0xdeadbeef0000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vorrs64.c b/gcc/testsuite/gcc.target/arm/neon-vorrs64.c
new file mode 100644
index 00000000000..90ced9e9c86
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vorrs64.c
@@ -0,0 +1,21 @@
+/* Test the `vorr_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeef00000000LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)0xdead00000000beefLL;
+
+ out_int64x1_t = vorr_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0xdeadbeef0000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vorru64.c b/gcc/testsuite/gcc.target/arm/neon-vorru64.c
new file mode 100644
index 00000000000..5b44afb07ab
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vorru64.c
@@ -0,0 +1,21 @@
+/* Test the `vorr_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeef00000000LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)0xdead00000000beefLL;
+
+ out_uint64x1_t = vorr_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0xdeadbeef0000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c b/gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c
new file mode 100644
index 00000000000..10113932711
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vset_lanes64.c
@@ -0,0 +1,21 @@
+/* Test the `vset_lane_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64_t arg0_int64_t = 0xf00f00f00LL;
+ int64x1_t arg1_int64x1_t = (int64x1_t) 0xdeadbeefbadf00dLL;
+
+ out_int64x1_t = vset_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
+ if ((int64_t)out_int64x1_t != arg0_int64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c b/gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c
new file mode 100644
index 00000000000..cafc2607687
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vset_laneu64.c
@@ -0,0 +1,21 @@
+/* Test the `vset_lane_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64_t arg0_uint64_t = 0xf00f00f00LL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t) 0xdeadbeefbadf00dLL;
+
+ out_uint64x1_t = vset_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
+ if ((uint64_t)out_uint64x1_t != arg0_uint64_t)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vsubs64.c b/gcc/testsuite/gcc.target/arm/neon-vsubs64.c
new file mode 100644
index 00000000000..23947004127
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vsubs64.c
@@ -0,0 +1,21 @@
+/* Test the `vsub_s64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ int64x1_t out_int64x1_t = 0;
+ int64x1_t arg0_int64x1_t = (int64x1_t)0xdeadbeefdeadbeefLL;
+ int64x1_t arg1_int64x1_t = (int64x1_t)0x0000beefdead0000LL;
+
+ out_int64x1_t = vsub_s64 (arg0_int64x1_t, arg1_int64x1_t);
+ if (out_int64x1_t != (int64x1_t)0xdead00000000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon-vsubu64.c b/gcc/testsuite/gcc.target/arm/neon-vsubu64.c
new file mode 100644
index 00000000000..0162e206ef6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vsubu64.c
@@ -0,0 +1,21 @@
+/* Test the `vsub_u64' ARM Neon intrinsic. */
+
+/* { dg-do run } */
+/* { dg-require-effective-target arm_neon_hw } */
+/* { dg-options "-O0" } */
+/* { dg-add-options arm_neon } */
+
+#include "arm_neon.h"
+#include <stdlib.h>
+
+int main (void)
+{
+ uint64x1_t out_uint64x1_t = 0;
+ uint64x1_t arg0_uint64x1_t = (uint64x1_t)0xdeadbeefdeadbeefLL;
+ uint64x1_t arg1_uint64x1_t = (uint64x1_t)0x0000beefdead0000LL;
+
+ out_uint64x1_t = vsub_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
+ if (out_uint64x1_t != (uint64x1_t)0xdead00000000beefLL)
+ abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/neon/vadds64.c b/gcc/testsuite/gcc.target/arm/neon/vadds64.c
index d3923775237..fb17e0ea3b6 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vadds64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vadds64.c
@@ -17,5 +17,4 @@ void test_vadds64 (void)
out_int64x1_t = vadd_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "vadd\.i64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vaddu64.c b/gcc/testsuite/gcc.target/arm/neon/vaddu64.c
index 1114725b44d..18fc500b9f2 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vaddu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vaddu64.c
@@ -17,5 +17,4 @@ void test_vaddu64 (void)
out_uint64x1_t = vadd_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "vadd\.i64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vands64.c b/gcc/testsuite/gcc.target/arm/neon/vands64.c
index b34abab6651..13e18fb0cbf 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vands64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vands64.c
@@ -17,5 +17,4 @@ void test_vands64 (void)
out_int64x1_t = vand_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vandu64.c b/gcc/testsuite/gcc.target/arm/neon/vandu64.c
index 4660272cc20..d9ddf847af3 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vandu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vandu64.c
@@ -17,5 +17,4 @@ void test_vandu64 (void)
out_uint64x1_t = vand_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "vand\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vbics64.c b/gcc/testsuite/gcc.target/arm/neon/vbics64.c
index 41db18e2744..379db45f4db 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vbics64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vbics64.c
@@ -17,5 +17,4 @@ void test_vbics64 (void)
out_int64x1_t = vbic_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vbicu64.c b/gcc/testsuite/gcc.target/arm/neon/vbicu64.c
index 9f0a047fc92..c276d65ebe3 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vbicu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vbicu64.c
@@ -17,5 +17,4 @@ void test_vbicu64 (void)
out_uint64x1_t = vbic_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "vbic\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
index 987a4d3f63f..ab749a7bbad 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_ns64.c
@@ -16,6 +16,4 @@ void test_vdupQ_ns64 (void)
out_int64x2_t = vdupq_n_s64 (arg0_int64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
index c2e5d481a3d..0ddb72decc8 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vdupQ_nu64.c
@@ -16,6 +16,4 @@ void test_vdupQ_nu64 (void)
out_uint64x2_t = vdupq_n_u64 (arg0_uint64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c b/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
index 720cc0452d2..033f1b4744c 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vdup_ns64.c
@@ -16,5 +16,4 @@ void test_vdup_ns64 (void)
out_int64x1_t = vdup_n_s64 (arg0_int64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c b/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
index 4033e4757dc..6888125c638 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vdup_nu64.c
@@ -16,5 +16,4 @@ void test_vdup_nu64 (void)
out_uint64x1_t = vdup_n_u64 (arg0_uint64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/veors64.c b/gcc/testsuite/gcc.target/arm/neon/veors64.c
index 0543b22e2e1..2781be1b2cc 100644
--- a/gcc/testsuite/gcc.target/arm/neon/veors64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/veors64.c
@@ -17,5 +17,4 @@ void test_veors64 (void)
out_int64x1_t = veor_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/veoru64.c b/gcc/testsuite/gcc.target/arm/neon/veoru64.c
index 1098285dc6f..19d081489ed 100644
--- a/gcc/testsuite/gcc.target/arm/neon/veoru64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/veoru64.c
@@ -17,5 +17,4 @@ void test_veoru64 (void)
out_uint64x1_t = veor_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "veor\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c b/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
index 136242900a7..5dc99424fa5 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_lanes64.c
@@ -16,5 +16,4 @@ void test_vget_lanes64 (void)
out_int64_t = vget_lane_s64 (arg0_int64x1_t, 0);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[rR\]\[0-9\]+, \[rR\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c b/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
index 4b44a1e8c37..496a057fc73 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vget_laneu64.c
@@ -16,5 +16,4 @@ void test_vget_laneu64 (void)
out_uint64_t = vget_lane_u64 (arg0_uint64x1_t, 0);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[rR\]\[0-9\]+, \[rR\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
index 89fe2c150fd..35936cbd43a 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_ns64.c
@@ -16,6 +16,4 @@ void test_vmovQ_ns64 (void)
out_int64x2_t = vmovq_n_s64 (arg0_int64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
index d7d3e365ecd..e373a121865 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vmovQ_nu64.c
@@ -16,6 +16,4 @@ void test_vmovQ_nu64 (void)
out_uint64x2_t = vmovq_n_u64 (arg0_uint64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c b/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
index 6d2d61678b9..7b011282832 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vmov_ns64.c
@@ -16,5 +16,4 @@ void test_vmov_ns64 (void)
out_int64x1_t = vmov_n_s64 (arg0_int64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c b/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
index 9434377d2ff..b9613e06ff1 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vmov_nu64.c
@@ -16,5 +16,4 @@ void test_vmov_nu64 (void)
out_uint64x1_t = vmov_n_u64 (arg0_uint64_t);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vorns64.c b/gcc/testsuite/gcc.target/arm/neon/vorns64.c
index eb3253743a2..d7b8e60d208 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vorns64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vorns64.c
@@ -17,5 +17,4 @@ void test_vorns64 (void)
out_int64x1_t = vorn_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vornu64.c b/gcc/testsuite/gcc.target/arm/neon/vornu64.c
index a92a7d7124c..6fb3a9502a6 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vornu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vornu64.c
@@ -17,5 +17,4 @@ void test_vornu64 (void)
out_uint64x1_t = vorn_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "vorn\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vorrs64.c b/gcc/testsuite/gcc.target/arm/neon/vorrs64.c
index eaa107cb649..a1c7e5ee222 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vorrs64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vorrs64.c
@@ -17,5 +17,4 @@ void test_vorrs64 (void)
out_int64x1_t = vorr_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vorru64.c b/gcc/testsuite/gcc.target/arm/neon/vorru64.c
index 2dc4898a779..1991b02152f 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vorru64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vorru64.c
@@ -17,5 +17,4 @@ void test_vorru64 (void)
out_uint64x1_t = vorr_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "vorr\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c b/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
index 2c4bede7796..5c5454f9807 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vset_lanes64.c
@@ -17,5 +17,4 @@ void test_vset_lanes64 (void)
out_int64x1_t = vset_lane_s64 (arg0_int64_t, arg1_int64x1_t, 0);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c b/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c
index 22ba53c20a9..3bff5d232c7 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vset_laneu64.c
@@ -17,5 +17,4 @@ void test_vset_laneu64 (void)
out_uint64x1_t = vset_lane_u64 (arg0_uint64_t, arg1_uint64x1_t, 0);
}
-/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[rR\]\[0-9\]+, \[rR\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vsubs64.c b/gcc/testsuite/gcc.target/arm/neon/vsubs64.c
index 656039989a0..57bcd33d42c 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vsubs64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vsubs64.c
@@ -17,5 +17,4 @@ void test_vsubs64 (void)
out_int64x1_t = vsub_s64 (arg0_int64x1_t, arg1_int64x1_t);
}
-/* { dg-final { scan-assembler "vsub\.i64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/neon/vsubu64.c b/gcc/testsuite/gcc.target/arm/neon/vsubu64.c
index 5e4a2a871e9..3a8ae462e81 100644
--- a/gcc/testsuite/gcc.target/arm/neon/vsubu64.c
+++ b/gcc/testsuite/gcc.target/arm/neon/vsubu64.c
@@ -17,5 +17,4 @@ void test_vsubu64 (void)
out_uint64x1_t = vsub_u64 (arg0_uint64x1_t, arg1_uint64x1_t);
}
-/* { dg-final { scan-assembler "vsub\.i64\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */
diff --git a/gcc/testsuite/gcc.target/arm/pr39839.c b/gcc/testsuite/gcc.target/arm/pr39839.c
new file mode 100644
index 00000000000..31e865af2f5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr39839.c
@@ -0,0 +1,24 @@
+/* { dg-options "-mthumb -Os -march=armv5te -mthumb-interwork -fpic" } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-final { scan-assembler-not "str\[\\t \]*r.,\[\\t \]*.sp," } } */
+
+struct S
+{
+ int count;
+ char *addr;
+};
+
+void func(const char*, const char*, int, const char*);
+
+/* This function should not need to spill to the stack. */
+void test(struct S *p)
+{
+ int off = p->count;
+ while (p->count >= 0)
+ {
+ const char *s = "xyz";
+ if (*p->addr) s = "pqr";
+ func("abcde", p->addr + off, off, s);
+ p->count--;
+ }
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr40657-1.c b/gcc/testsuite/gcc.target/arm/pr40657-1.c
new file mode 100644
index 00000000000..a6ac6c78a1c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr40657-1.c
@@ -0,0 +1,13 @@
+/* { dg-options "-Os -march=armv5te -mthumb" } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-final { scan-assembler "pop.*r1.*pc" } } */
+/* { dg-final { scan-assembler-not "sub\[\\t \]*sp,\[\\t \]*sp" } } */
+/* { dg-final { scan-assembler-not "add\[\\t \]*sp,\[\\t \]*sp" } } */
+
+extern void bar(int*);
+int foo()
+{
+ int x;
+ bar(&x);
+ return x;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr40657-2.c b/gcc/testsuite/gcc.target/arm/pr40657-2.c
new file mode 100644
index 00000000000..31d48376730
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr40657-2.c
@@ -0,0 +1,20 @@
+/* { dg-options "-Os -march=armv4t -mthumb" } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-final { scan-assembler-not "sub\[\\t \]*sp,\[\\t \]*sp" } } */
+/* { dg-final { scan-assembler-not "add\[\\t \]*sp,\[\\t \]*sp" } } */
+
+/* Here, we test that if there's a pop of r[4567] in the epilogue,
+ add sp,sp,#12 is removed and replaced by three additional pops
+ of lower-numbered regs. */
+
+extern void bar(int*);
+
+int t1, t2, t3, t4, t5;
+int foo()
+{
+ int i,j,k,x = 0;
+ for (i = 0; i < t1; i++)
+ for (j = 0; j < t2; j++)
+ bar(&x);
+ return x;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr42172-1.c b/gcc/testsuite/gcc.target/arm/pr42172-1.c
new file mode 100644
index 00000000000..207f6001fb7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr42172-1.c
@@ -0,0 +1,19 @@
+/* { dg-options "-O2" } */
+
+struct A {
+ unsigned int f1 : 3;
+ unsigned int f2 : 3;
+ unsigned int f3 : 1;
+ unsigned int f4 : 1;
+
+};
+
+void init_A (struct A *this)
+{
+ this->f1 = 0;
+ this->f2 = 1;
+ this->f3 = 0;
+ this->f4 = 0;
+}
+
+/* { dg-final { scan-assembler-times "ldr" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/pr42235.c b/gcc/testsuite/gcc.target/arm/pr42235.c
new file mode 100644
index 00000000000..478abcc0765
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr42235.c
@@ -0,0 +1,11 @@
+/* { dg-options "-mthumb -O2 -march=armv5te" } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-final { scan-assembler-not "add\[\\t \]*r.,\[\\t \]*r.,\[\\t \]*\#1" } } */
+/* { dg-final { scan-assembler-not "add\[\\t \]*r.,\[\\t \]*\#1" } } */
+
+#include <string.h>
+
+int foo (char *x)
+{
+ memset (x, 0, 6);
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr42505.c b/gcc/testsuite/gcc.target/arm/pr42505.c
new file mode 100644
index 00000000000..60902c35d27
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr42505.c
@@ -0,0 +1,23 @@
+/* { dg-options "-mthumb -Os -march=armv5te" } */
+/* { dg-require-effective-target arm_thumb1_ok } */
+/* { dg-final { scan-assembler-not "str\[\\t \]*r.,\[\\t \]*.sp," } } */
+
+struct A {
+ int f1;
+ int f2;
+};
+
+int func(int c);
+
+/* This function should not need to spill anything to the stack. */
+int test(struct A* src, struct A* dst, int count)
+{
+ while (count--) {
+ if (!func(src->f2)) {
+ return 0;
+ }
+ *dst++ = *src++;
+ }
+
+ return 1;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr42835.c b/gcc/testsuite/gcc.target/arm/pr42835.c
new file mode 100644
index 00000000000..71c51ebe31c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr42835.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-mthumb -Os" } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+
+int foo(int *p, int i)
+{
+ return( (i < 0 && *p == 1)
+ || (i > 0 && *p == 2) );
+}
+
+/* { dg-final { scan-assembler-times "movne\[\\t \]*r.,\[\\t \]*#" 1 } } */
+/* { dg-final { scan-assembler-times "moveq\[\\t \]*r.,\[\\t \]*#" 1 } } */
diff --git a/gcc/testsuite/gcc.target/arm/pr43698.c b/gcc/testsuite/gcc.target/arm/pr43698.c
new file mode 100644
index 00000000000..407cf7eac2c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr43698.c
@@ -0,0 +1,38 @@
+/* { dg-do run } */
+/* { dg-options "-Os -march=armv7-a" } */
+#include <stdint.h>
+#include <stdlib.h>
+
+
+char do_reverse_endian = 0;
+
+# define bswap_32(x) \
+ ((((x) & 0xff000000) >> 24) | \
+ (((x) & 0x00ff0000) >> 8) | \
+ (((x) & 0x0000ff00) << 8) | \
+ (((x) & 0x000000ff) << 24))
+
+#define EGET(X) \
+ (__extension__ ({ \
+ uint64_t __res; \
+ if (!do_reverse_endian) { __res = (X); \
+ } else if (sizeof(X) == 4) { __res = bswap_32((X)); \
+ } \
+ __res; \
+ }))
+
+void __attribute__((noinline)) X(char **phdr, char **data, int *phoff)
+{
+ *phdr = *data + EGET(*phoff);
+}
+
+int main()
+{
+ char *phdr;
+ char *data = (char *)0x40164000;
+ int phoff = 0x34;
+ X(&phdr, &data, &phoff);
+ if (phdr != (char *)0x40164034)
+ abort ();
+ exit (0);
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr44788.c b/gcc/testsuite/gcc.target/arm/pr44788.c
new file mode 100644
index 00000000000..eb4bc11af9f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr44788.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+/* { dg-options "-Os -fno-strict-aliasing -fPIC -mthumb -march=armv7-a -mfpu=vfp3 -mfloat-abi=softfp" } */
+
+void joint_decode(float* mlt_buffer1, int t) {
+ int i;
+ float decode_buffer[1060];
+ foo(decode_buffer);
+ for (i=0; i<10 ; i++) {
+ mlt_buffer1[i] = i * decode_buffer[t];
+ }
+}
diff --git a/gcc/testsuite/gcc.target/i386/20020523.c b/gcc/testsuite/gcc.target/i386/20020523.c
index 7c3490f780b..0684d5feb42 100644
--- a/gcc/testsuite/gcc.target/i386/20020523.c
+++ b/gcc/testsuite/gcc.target/i386/20020523.c
@@ -4,6 +4,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse -mfpmath=sse -ffast-math" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/aes-avx-check.h b/gcc/testsuite/gcc.target/i386/aes-avx-check.h
index e91e88173cf..36a038ea341 100644
--- a/gcc/testsuite/gcc.target/i386/aes-avx-check.h
+++ b/gcc/testsuite/gcc.target/i386/aes-avx-check.h
@@ -22,7 +22,8 @@ main ()
return 0;
/* Run AES + AVX test only if host has AES + AVX support. */
- if ((ecx & (bit_AVX | bit_AES)) == (bit_AVX | bit_AES))
+ if ((ecx & (bit_AVX | bit_OSXSAVE | bit_AES))
+ == (bit_AVX | bit_OSXSAVE | bit_AES))
{
do_test ();
#ifdef DEBUG
diff --git a/gcc/testsuite/gcc.target/i386/all_one_m128i.c b/gcc/testsuite/gcc.target/i386/all_one_m128i.c
index 24d870fa37f..fa973e420ab 100644
--- a/gcc/testsuite/gcc.target/i386/all_one_m128i.c
+++ b/gcc/testsuite/gcc.target/i386/all_one_m128i.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
typedef int __v4si __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/avx-check.h b/gcc/testsuite/gcc.target/i386/avx-check.h
index 7736fc9f40b..b15584ad274 100644
--- a/gcc/testsuite/gcc.target/i386/avx-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx-check.h
@@ -20,7 +20,7 @@ main ()
return 0;
/* Run AVX test only if host has AVX support. */
- if (ecx & bit_AVX)
+ if ((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE))
{
do_test ();
#ifdef DEBUG
diff --git a/gcc/testsuite/gcc.target/i386/avx-cmpsd-1.c b/gcc/testsuite/gcc.target/i386/avx-cmpsd-1.c
index 65cda0b2cbf..7898606b0bc 100644
--- a/gcc/testsuite/gcc.target/i386/avx-cmpsd-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-cmpsd-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#define CHECK_H "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-cmpss-1.c b/gcc/testsuite/gcc.target/i386/avx-cmpss-1.c
index b2603aad4c5..e0ee934dad5 100644
--- a/gcc/testsuite/gcc.target/i386/avx-cmpss-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-cmpss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#define CHECK_H "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vcmppd-1.c b/gcc/testsuite/gcc.target/i386/avx-vcmppd-1.c
index be69d47e822..f9646a10d12 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vcmppd-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vcmppd-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#include "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vcmppd-256-1.c b/gcc/testsuite/gcc.target/i386/avx-vcmppd-256-1.c
index 7000bb07feb..1c169f5ac5c 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vcmppd-256-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vcmppd-256-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#include "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vcmpps-1.c b/gcc/testsuite/gcc.target/i386/avx-vcmpps-1.c
index 753f2ce64d0..888f9eb2878 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vcmpps-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vcmpps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#include "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vcmpps-256-1.c b/gcc/testsuite/gcc.target/i386/avx-vcmpps-256-1.c
index c1292a25555..b82abb6dcea 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vcmpps-256-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vcmpps-256-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#include "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vcmpsd-1.c b/gcc/testsuite/gcc.target/i386/avx-vcmpsd-1.c
index 97ca6e6c50f..9b6d580289c 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vcmpsd-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vcmpsd-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#include "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vcmpss-1.c b/gcc/testsuite/gcc.target/i386/avx-vcmpss-1.c
index 627333a860c..0dd1b09228e 100644
--- a/gcc/testsuite/gcc.target/i386/avx-vcmpss-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-vcmpss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target c99_runtime } */
/* { dg-options "-O2 -mavx -std=c99" } */
#include "avx-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/brokensqrt.c b/gcc/testsuite/gcc.target/i386/brokensqrt.c
index 19a59d822e6..836d3b37d4c 100644
--- a/gcc/testsuite/gcc.target/i386/brokensqrt.c
+++ b/gcc/testsuite/gcc.target/i386/brokensqrt.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
extern float sqrtf (float);
diff --git a/gcc/testsuite/gcc.target/i386/f16c-check.h b/gcc/testsuite/gcc.target/i386/f16c-check.h
new file mode 100644
index 00000000000..af7f32c5f4f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/f16c-check.h
@@ -0,0 +1,30 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include "cpuid.h"
+#include "m256-check.h"
+
+static void f16c_test (void);
+
+int
+main ()
+{
+ unsigned int eax, ebx, ecx, edx;
+
+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ return 0;
+
+ /* Run F16C test only if host has F16C support. */
+ if (ecx & bit_F16C)
+ {
+ f16c_test ();
+#ifdef DEBUG
+ printf ("PASSED\n");
+#endif
+ }
+#ifdef DEBUG
+ else
+ printf ("SKIPPED\n");
+#endif
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c b/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c
index bdfae5b3b7b..1a55a3d60eb 100644
--- a/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c
+++ b/gcc/testsuite/gcc.target/i386/fastcall-sseregparm.c
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-mpreferred-stack-boundary=4 -msse" } */
/* { dg-require-effective-target ilp32 } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/fpcvt-1.c b/gcc/testsuite/gcc.target/i386/fpcvt-1.c
index 5f09aedc53e..1c3b9b83453 100644
--- a/gcc/testsuite/gcc.target/i386/fpcvt-1.c
+++ b/gcc/testsuite/gcc.target/i386/fpcvt-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "cvtss2sd" } } */
float a,b;
main()
diff --git a/gcc/testsuite/gcc.target/i386/fpcvt-2.c b/gcc/testsuite/gcc.target/i386/fpcvt-2.c
index 317aa13b887..066d84365ed 100644
--- a/gcc/testsuite/gcc.target/i386/fpcvt-2.c
+++ b/gcc/testsuite/gcc.target/i386/fpcvt-2.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "cvtss2sd" } } */
float a,b;
main()
diff --git a/gcc/testsuite/gcc.target/i386/fpcvt-3.c b/gcc/testsuite/gcc.target/i386/fpcvt-3.c
index 70377c3d627..569d21a5aa7 100644
--- a/gcc/testsuite/gcc.target/i386/fpcvt-3.c
+++ b/gcc/testsuite/gcc.target/i386/fpcvt-3.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "cvtss2sd" } } */
extern double fabs (double);
float a,b;
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-9.c b/gcc/testsuite/gcc.target/i386/funcspec-9.c
index 1c05f134ab5..78714e12417 100644
--- a/gcc/testsuite/gcc.target/i386/funcspec-9.c
+++ b/gcc/testsuite/gcc.target/i386/funcspec-9.c
@@ -1,7 +1,6 @@
/* Test whether using target specific options, we can generate FMA4 code. */
/* { dg-do compile } */
/* { dg-options "-O2 -march=k8 -mfpmath=sse -msse2" } */
-/* { dg-require-effective-target sse2 } */
extern void exit (int);
diff --git a/gcc/testsuite/gcc.target/i386/i386.exp b/gcc/testsuite/gcc.target/i386/i386.exp
index 8b31231b61c..65abf58db81 100644
--- a/gcc/testsuite/gcc.target/i386/i386.exp
+++ b/gcc/testsuite/gcc.target/i386/i386.exp
@@ -27,8 +27,7 @@ load_lib gcc-dg.exp
# Return 1 if attribute ms_hook_prologue is supported.
proc check_effective_target_ms_hook_prologue { } {
- if { [check_effective_target_ilp32]
- && [check_no_compiler_messages ms_hook_prologue object {
+ if { [check_no_compiler_messages ms_hook_prologue object {
void __attribute__ ((__ms_hook_prologue__)) foo ();
} ""] } {
return 1
diff --git a/gcc/testsuite/gcc.target/i386/incoming-1.c b/gcc/testsuite/gcc.target/i386/incoming-1.c
index 9129ad00e17..86e98a79b47 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-1.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-1.c
@@ -1,7 +1,6 @@
/* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/incoming-12.c b/gcc/testsuite/gcc.target/i386/incoming-12.c
index b6bfa418d90..d7ef1038bb5 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-12.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-12.c
@@ -1,7 +1,6 @@
/* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */
-/* { dg-require-effective-target sse2 } */
typedef int v4si __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/incoming-2.c b/gcc/testsuite/gcc.target/i386/incoming-2.c
index 18451669612..2947d3347cd 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-2.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-2.c
@@ -1,7 +1,6 @@
/* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/incoming-3.c b/gcc/testsuite/gcc.target/i386/incoming-3.c
index bb9653a4067..1edbfda0b39 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-3.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-3.c
@@ -1,7 +1,6 @@
/* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/incoming-4.c b/gcc/testsuite/gcc.target/i386/incoming-4.c
index e1d1b751e7b..80c169c2469 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-4.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-4.c
@@ -1,7 +1,6 @@
/* PR middle-end/37009 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" } */
-/* { dg-require-effective-target sse2 } */
#include <stdarg.h>
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/incoming-6.c b/gcc/testsuite/gcc.target/i386/incoming-6.c
index f6b64b7abd2..5cc4ab3f766 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-6.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-6.c
@@ -1,7 +1,6 @@
/* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */
-/* { dg-require-effective-target sse2 } */
typedef int v4si __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/incoming-7.c b/gcc/testsuite/gcc.target/i386/incoming-7.c
index fb5380490d6..cdd60379683 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-7.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-7.c
@@ -1,7 +1,6 @@
/* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O2 -msse2 -mpreferred-stack-boundary=4" } */
-/* { dg-require-effective-target sse2 } */
typedef int v4si __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/incoming-8.c b/gcc/testsuite/gcc.target/i386/incoming-8.c
index 0f27af72078..2dd8800fd6c 100644
--- a/gcc/testsuite/gcc.target/i386/incoming-8.c
+++ b/gcc/testsuite/gcc.target/i386/incoming-8.c
@@ -1,7 +1,6 @@
/* PR target/40838 */
/* { dg-do compile { target { { ! *-*-darwin* } && ilp32 } } } */
/* { dg-options "-w -mstackrealign -O3 -msse2 -mpreferred-stack-boundary=4" } */
-/* { dg-require-effective-target sse2 } */
float
foo (float f)
diff --git a/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp b/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
index a0e7b8d1eaa..2b1d63de17a 100644
--- a/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
+++ b/gcc/testsuite/gcc.target/i386/math-torture/math-torture.exp
@@ -28,19 +28,23 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then {
set MATH_TORTURE_OPTIONS [list \
{ -O0 } \
{ -O0 -mfpmath=387 } \
+ { -O0 -mfpmath=387 -ffast-math } \
+ { -O2 } \
+ { -O2 -mfpmath=387 } \
+ { -O2 -mfpmath=387 -ffast-math } \
+]
+
+if { [check_effective_target_sse] } {
+ lappend MATH_TORTURE_OPTIONS \
{ -O0 -msse -mno-sse2 -mfpmath=sse } \
{ -O0 -msse -mno-sse2 -mfpmath=sse,387 } \
- { -O0 -mfpmath=387 -ffast-math } \
{ -O0 -msse -mno-sse2 -mfpmath=sse -ffast-math } \
{ -O0 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
- { -O2 } \
- { -O2 -mfpmath=387 } \
{ -O2 -msse -mno-sse2 -mfpmath=sse } \
{ -O2 -msse -mno-sse2 -mfpmath=sse,387 } \
- { -O2 -mfpmath=387 -ffast-math } \
{ -O2 -msse -mno-sse2 -mfpmath=sse -ffast-math } \
{ -O2 -msse -mno-sse2 -mfpmath=sse,387 -ffast-math } \
-]
+}
if { [check_effective_target_sse2] } {
lappend MATH_TORTURE_OPTIONS \
diff --git a/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c b/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c
index f945492dfde..e11bcc049cb 100644
--- a/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c
+++ b/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c
@@ -11,7 +11,7 @@ int __attribute__ ((__ms_hook_prologue__)) foo ()
/* The NOP mov must not be optimized away by optimizations.
The push %ebp, mov %esp, %ebp must not be removed by
-fomit-frame-pointer */
-
+#ifndef __x86_64__
/* movl.s %edi, %edi */
if(*ptr++ != 0x8b) return 1;
if(*ptr++ != 0xff) return 1;
@@ -20,6 +20,15 @@ int __attribute__ ((__ms_hook_prologue__)) foo ()
/* movl.s %esp, %ebp */
if(*ptr++ != 0x8b) return 1;
if(*ptr++ != 0xec) return 1;
+#else
+ /* leaq 0(%rsp), %rsp */
+ if (*ptr++ != 0x48) return 1;
+ if (*ptr++ != 0x8d) return 1;
+ if (*ptr++ != 0xa4) return 1;
+ if (*ptr++ != 0x24) return 1;
+ if (ptr[0] != 0 || ptr[1] != 0 || ptr[2] != 0 || ptr[3] != 0)
+ return 1;
+#endif
return 0;
}
diff --git a/gcc/testsuite/gcc.target/i386/opt-1.c b/gcc/testsuite/gcc.target/i386/opt-1.c
index 74d3e8d1046..28e2ef38c34 100644
--- a/gcc/testsuite/gcc.target/i386/opt-1.c
+++ b/gcc/testsuite/gcc.target/i386/opt-1.c
@@ -2,7 +2,6 @@
whether we vectorize a simple loop. */
/* { dg-do compile } */
/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "prefetcht0" } } */
/* { dg-final { scan-assembler "addps" } } */
/* { dg-final { scan-assembler "subss" } } */
diff --git a/gcc/testsuite/gcc.target/i386/opt-2.c b/gcc/testsuite/gcc.target/i386/opt-2.c
index d247d71fc23..d2791e071c3 100644
--- a/gcc/testsuite/gcc.target/i386/opt-2.c
+++ b/gcc/testsuite/gcc.target/i386/opt-2.c
@@ -2,7 +2,6 @@
whether we vectorize a simple loop. */
/* { dg-do compile } */
/* { dg-options "-O1 -msse2 -mfpmath=sse -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "prefetcht0" } } */
/* { dg-final { scan-assembler "addps" } } */
/* { dg-final { scan-assembler "subss" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ordcmp-1.c b/gcc/testsuite/gcc.target/i386/ordcmp-1.c
index 9be97e52b91..a136182aca9 100644
--- a/gcc/testsuite/gcc.target/i386/ordcmp-1.c
+++ b/gcc/testsuite/gcc.target/i386/ordcmp-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "cmpordss" } } */
/* { dg-final { scan-assembler "cmpordps" } } */
/* { dg-final { scan-assembler "cmpordsd" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h b/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h
index 550e49904d9..750e25c5069 100644
--- a/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h
+++ b/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h
@@ -22,7 +22,8 @@ main ()
return 0;
/* Run PCLMUL + AVX test only if host has PCLMUL + AVX support. */
- if ((ecx & (bit_AVX | bit_PCLMUL)) == (bit_AVX | bit_PCLMUL))
+ if ((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
+ == (bit_AVX | bit_OSXSAVE | bit_PCLMUL))
{
do_test ();
#ifdef DEBUG
diff --git a/gcc/testsuite/gcc.target/i386/pr13685.c b/gcc/testsuite/gcc.target/i386/pr13685.c
index 159112d1666..a50681bea26 100644
--- a/gcc/testsuite/gcc.target/i386/pr13685.c
+++ b/gcc/testsuite/gcc.target/i386/pr13685.c
@@ -1,6 +1,7 @@
/* PR target/13685 */
/* { dg-do run } */
/* { dg-options "-Os -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/pr17692.c b/gcc/testsuite/gcc.target/i386/pr17692.c
index f8aed82750f..476d8e3de3f 100644
--- a/gcc/testsuite/gcc.target/i386/pr17692.c
+++ b/gcc/testsuite/gcc.target/i386/pr17692.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O -mfpmath=sse -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
/* The fact that t1 and t2 are uninitialized is critical. With them
uninitialized, the register allocator is free to put them in the same
hard register, which results in
diff --git a/gcc/testsuite/gcc.target/i386/pr18614-1.c b/gcc/testsuite/gcc.target/i386/pr18614-1.c
index 6e16616cae6..1a499753760 100644
--- a/gcc/testsuite/gcc.target/i386/pr18614-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr18614-1.c
@@ -1,7 +1,6 @@
/* PR rtl-optimization/18614 */
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef double v2df __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr22152.c b/gcc/testsuite/gcc.target/i386/pr22152.c
index 4dce76cc947..d12597703ea 100644
--- a/gcc/testsuite/gcc.target/i386/pr22152.c
+++ b/gcc/testsuite/gcc.target/i386/pr22152.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <mmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/pr23570.c b/gcc/testsuite/gcc.target/i386/pr23570.c
index f220a8cb80d..1542663fa22 100644
--- a/gcc/testsuite/gcc.target/i386/pr23570.c
+++ b/gcc/testsuite/gcc.target/i386/pr23570.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef float __v4sf __attribute__ ((__vector_size__ (16)));
typedef float __m128 __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr23575.c b/gcc/testsuite/gcc.target/i386/pr23575.c
index 1b0ec7f88c3..522226ef7a2 100644
--- a/gcc/testsuite/gcc.target/i386/pr23575.c
+++ b/gcc/testsuite/gcc.target/i386/pr23575.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */
-/* { dg-require-effective-target sse2 } */
/* We used to ICE because of a bogous pattern. */
diff --git a/gcc/testsuite/gcc.target/i386/pr24306.c b/gcc/testsuite/gcc.target/i386/pr24306.c
index c578475bbea..1319918c350 100644
--- a/gcc/testsuite/gcc.target/i386/pr24306.c
+++ b/gcc/testsuite/gcc.target/i386/pr24306.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/pr26449-1.c b/gcc/testsuite/gcc.target/i386/pr26449-1.c
index e83375d6d0f..b4ef7804887 100644
--- a/gcc/testsuite/gcc.target/i386/pr26449-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr26449-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -mtune=k8" } */
-/* { dg-require-effective-target sse2 } */
typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr26600.c b/gcc/testsuite/gcc.target/i386/pr26600.c
index 61941de70e4..bbe0663da7e 100644
--- a/gcc/testsuite/gcc.target/i386/pr26600.c
+++ b/gcc/testsuite/gcc.target/i386/pr26600.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O -ftree-vectorize -msse2" } */
-/* { dg-require-effective-target sse2 } */
void foo(int *p, int N)
{
diff --git a/gcc/testsuite/gcc.target/i386/pr27790.c b/gcc/testsuite/gcc.target/i386/pr27790.c
index 4c5cdb6dc74..e8986c4158a 100644
--- a/gcc/testsuite/gcc.target/i386/pr27790.c
+++ b/gcc/testsuite/gcc.target/i386/pr27790.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O -ftree-vectorize -msse2" } */
-/* { dg-require-effective-target sse2 } */
void binarize (int npixels, unsigned char *b)
{
diff --git a/gcc/testsuite/gcc.target/i386/pr28839.c b/gcc/testsuite/gcc.target/i386/pr28839.c
index ccb715d7478..6a215164c58 100644
--- a/gcc/testsuite/gcc.target/i386/pr28839.c
+++ b/gcc/testsuite/gcc.target/i386/pr28839.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -ftree-vectorize -funswitch-loops" } */
-/* { dg-require-effective-target sse2 } */
static int ready[10];
void abort (void);
diff --git a/gcc/testsuite/gcc.target/i386/pr30970.c b/gcc/testsuite/gcc.target/i386/pr30970.c
index 25f773915f8..96d64e5a962 100644
--- a/gcc/testsuite/gcc.target/i386/pr30970.c
+++ b/gcc/testsuite/gcc.target/i386/pr30970.c
@@ -1,6 +1,5 @@
/* { dg-do compile }
/* { dg-options "-msse2 -O2 -ftree-vectorize" } */
-/* { dg-require-effective-target sse2 } */
#define N 256
int b[N];
diff --git a/gcc/testsuite/gcc.target/i386/pr32065-2.c b/gcc/testsuite/gcc.target/i386/pr32065-2.c
index e1a88592d3c..5f055b59c3a 100644
--- a/gcc/testsuite/gcc.target/i386/pr32065-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr32065-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target dfp } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-Os -msse -std=gnu99" } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/pr32280.c b/gcc/testsuite/gcc.target/i386/pr32280.c
index 49865ea4ba6..d48a635a4b8 100644
--- a/gcc/testsuite/gcc.target/i386/pr32280.c
+++ b/gcc/testsuite/gcc.target/i386/pr32280.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr32661.c b/gcc/testsuite/gcc.target/i386/pr32661.c
index 2eb1544e336..247ae131923 100644
--- a/gcc/testsuite/gcc.target/i386/pr32661.c
+++ b/gcc/testsuite/gcc.target/i386/pr32661.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef int __v4si __attribute__ ((__vector_size__ (16)));
typedef float __v4sf __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr32708-1.c b/gcc/testsuite/gcc.target/i386/pr32708-1.c
index 5200f3f6547..c5308937bb0 100644
--- a/gcc/testsuite/gcc.target/i386/pr32708-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr32708-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef long long __v2di __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr32961.c b/gcc/testsuite/gcc.target/i386/pr32961.c
index 8b513623111..a2326289af9 100644
--- a/gcc/testsuite/gcc.target/i386/pr32961.c
+++ b/gcc/testsuite/gcc.target/i386/pr32961.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O0 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <xmmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/pr33329.c b/gcc/testsuite/gcc.target/i386/pr33329.c
index e8036082cf1..bb589ee2780 100644
--- a/gcc/testsuite/gcc.target/i386/pr33329.c
+++ b/gcc/testsuite/gcc.target/i386/pr33329.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ftree-vectorize -msse2" } */
-/* { dg-require-effective-target sse2 } */
extern void g (int *);
diff --git a/gcc/testsuite/gcc.target/i386/pr35714.c b/gcc/testsuite/gcc.target/i386/pr35714.c
index d5d2755ed07..13ca47c23a3 100644
--- a/gcc/testsuite/gcc.target/i386/pr35714.c
+++ b/gcc/testsuite/gcc.target/i386/pr35714.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/pr35767-5.c b/gcc/testsuite/gcc.target/i386/pr35767-5.c
index 9f533033b71..4372d2e5746 100644
--- a/gcc/testsuite/gcc.target/i386/pr35767-5.c
+++ b/gcc/testsuite/gcc.target/i386/pr35767-5.c
@@ -1,7 +1,6 @@
/* Test that we generate aligned load when memory is aligned. */
/* { dg-do compile } */
/* { dg-options "-O -msse2 -mtune=generic" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "movups" } } */
/* { dg-final { scan-assembler "movaps" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr36222-1.c b/gcc/testsuite/gcc.target/i386/pr36222-1.c
index 647e1039619..2d4c5b9b76c 100644
--- a/gcc/testsuite/gcc.target/i386/pr36222-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr36222-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
typedef int __v4si __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr36992-1.c b/gcc/testsuite/gcc.target/i386/pr36992-1.c
index 017616bcc5b..7cd24cccf3e 100644
--- a/gcc/testsuite/gcc.target/i386/pr36992-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr36992-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile }
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/pr37101.c b/gcc/testsuite/gcc.target/i386/pr37101.c
index 69b913c4103..8fd3bfc5f85 100644
--- a/gcc/testsuite/gcc.target/i386/pr37101.c
+++ b/gcc/testsuite/gcc.target/i386/pr37101.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -ftree-vectorize -march=nocona" } */
-/* { dg-require-effective-target sse2 } */
typedef __SIZE_TYPE__ size_t;
extern void *malloc (size_t);
diff --git a/gcc/testsuite/gcc.target/i386/pr37275.c b/gcc/testsuite/gcc.target/i386/pr37275.c
index ca9612bba30..070dab554c7 100644
--- a/gcc/testsuite/gcc.target/i386/pr37275.c
+++ b/gcc/testsuite/gcc.target/i386/pr37275.c
@@ -1,6 +1,7 @@
/* PR middle-end/37275 */
/* { dg-do compile { target ilp32 } } */
/* { dg-options "-g -dA -O2 -march=i686 -fstack-protector" } */
+/* { dg-require-visibility "" } */
typedef __SIZE_TYPE__ size_t;
extern void *memcpy (void *, const void *, size_t);
diff --git a/gcc/testsuite/gcc.target/i386/pr37434-1.c b/gcc/testsuite/gcc.target/i386/pr37434-1.c
index 00ed55e3234..b556bf0848e 100644
--- a/gcc/testsuite/gcc.target/i386/pr37434-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr37434-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr37434-2.c b/gcc/testsuite/gcc.target/i386/pr37434-2.c
index b92d52100da..00ff9fd2e6c 100644
--- a/gcc/testsuite/gcc.target/i386/pr37434-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr37434-2.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -mtune=core2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr37434-3.c b/gcc/testsuite/gcc.target/i386/pr37434-3.c
index 916c99fe02f..2cc597b04f5 100644
--- a/gcc/testsuite/gcc.target/i386/pr37434-3.c
+++ b/gcc/testsuite/gcc.target/i386/pr37434-3.c
@@ -1,5 +1,4 @@
/* { dg-do compile } */
-/* { dg-require-effective-target sse4 } */
/* { dg-options "-O2 -msse4.1" } */
typedef char __v16qi __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr37434-4.c b/gcc/testsuite/gcc.target/i386/pr37434-4.c
index 15f8292b029..6848c63505e 100644
--- a/gcc/testsuite/gcc.target/i386/pr37434-4.c
+++ b/gcc/testsuite/gcc.target/i386/pr37434-4.c
@@ -1,5 +1,4 @@
/* { dg-do compile } */
-/* { dg-require-effective-target sse4 } */
/* { dg-options "-O2 -mtune=core2 -msse4.1" } */
typedef char __v16qi __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr39162.c b/gcc/testsuite/gcc.target/i386/pr39162.c
index 1a5e3e7aab0..2d114b8fd00 100644
--- a/gcc/testsuite/gcc.target/i386/pr39162.c
+++ b/gcc/testsuite/gcc.target/i386/pr39162.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -mno-avx" } */
-/* { dg-require-effective-target sse2 } */
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
diff --git a/gcc/testsuite/gcc.target/i386/pr39315-1.c b/gcc/testsuite/gcc.target/i386/pr39315-1.c
index 9f4d484639f..16ba5d59fe4 100644
--- a/gcc/testsuite/gcc.target/i386/pr39315-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr39315-1.c
@@ -1,7 +1,6 @@
/* PR middle-end/39315 */
/* { dg-do compile } */
/* { dg-options "-O -msse2 -mtune=generic" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "movups" } } */
/* { dg-final { scan-assembler-not "movlps" } } */
/* { dg-final { scan-assembler-not "movhps" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr39315-2.c b/gcc/testsuite/gcc.target/i386/pr39315-2.c
index 5363e97509b..c1a3da75a36 100644
--- a/gcc/testsuite/gcc.target/i386/pr39315-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr39315-2.c
@@ -1,7 +1,7 @@
/* PR middle-end/39315 */
/* { dg-do run } */
/* { dg-options "-O -msse2 -mtune=generic" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
/* { dg-additional-sources pr39315-check.c } */
typedef float __m128 __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr39315-3.c b/gcc/testsuite/gcc.target/i386/pr39315-3.c
index 38ea7aed745..07862db603a 100644
--- a/gcc/testsuite/gcc.target/i386/pr39315-3.c
+++ b/gcc/testsuite/gcc.target/i386/pr39315-3.c
@@ -1,7 +1,6 @@
/* PR middle-end/39315 */
/* { dg-do compile } */
/* { dg-options "-O -msse2 -mtune=generic" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler-not "movups" } } */
/* { dg-final { scan-assembler-not "movlps" } } */
/* { dg-final { scan-assembler-not "movhps" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr39315-4.c b/gcc/testsuite/gcc.target/i386/pr39315-4.c
index 4a62a1d51b9..77258a7c76c 100644
--- a/gcc/testsuite/gcc.target/i386/pr39315-4.c
+++ b/gcc/testsuite/gcc.target/i386/pr39315-4.c
@@ -1,7 +1,7 @@
/* PR middle-end/39315 */
/* { dg-do run } */
/* { dg-options "-O -msse2 -mtune=generic" } */
-/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target sse2_runtime } */
/* { dg-additional-sources pr39315-check.c } */
typedef float __m128 __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr39315-check.c b/gcc/testsuite/gcc.target/i386/pr39315-check.c
index 8f7376015d0..cb09d3f2be5 100644
--- a/gcc/testsuite/gcc.target/i386/pr39315-check.c
+++ b/gcc/testsuite/gcc.target/i386/pr39315-check.c
@@ -1,4 +1,5 @@
-/* { dg-compile } */
+/* { dg-do compile } */
+
typedef float __m128 __attribute__ ((__vector_size__ (16)));
__extension__ typedef __PTRDIFF_TYPE__ ptrdiff_t;
diff --git a/gcc/testsuite/gcc.target/i386/pr39496.c b/gcc/testsuite/gcc.target/i386/pr39496.c
index bdaca2e55a8..e4132a1165b 100644
--- a/gcc/testsuite/gcc.target/i386/pr39496.c
+++ b/gcc/testsuite/gcc.target/i386/pr39496.c
@@ -1,7 +1,6 @@
/* PR target/39496 */
/* { dg-do compile { target { { i?86-*-linux* x86_64-*-linux* } && ilp32 } } } */
/* { dg-options "-O0 -fverbose-asm -fno-omit-frame-pointer -mtune=i686 -msse2 -mfpmath=sse" } */
-/* { dg-require-effective-target sse2 } */
/* Verify that {foo,bar}{,2}param are all passed on the stack, using
normal calling conventions, when not optimizing. */
/* { dg-final { scan-assembler "\[^0-9-\]8\\(%ebp\\),\[^\n\]*fooparam," } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr40957.c b/gcc/testsuite/gcc.target/i386/pr40957.c
index 56762d7e810..b7ee26dffcd 100644
--- a/gcc/testsuite/gcc.target/i386/pr40957.c
+++ b/gcc/testsuite/gcc.target/i386/pr40957.c
@@ -1,5 +1,4 @@
/* { dg-do compile } */
-/* { dg-require-effective-target avx } */
/* { dg-options "-O2 -mavx" } */
typedef int __v8si __attribute__((__vector_size__(32)));
diff --git a/gcc/testsuite/gcc.target/i386/pr42542-3a.c b/gcc/testsuite/gcc.target/i386/pr42542-3a.c
index 89c9ed4945b..754e59e8487 100644
--- a/gcc/testsuite/gcc.target/i386/pr42542-3a.c
+++ b/gcc/testsuite/gcc.target/i386/pr42542-3a.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -msse2 -ftree-vectorize" } */
-/* { dg-require-effective-target sse2 } */
#include "pr42542-3.c"
diff --git a/gcc/testsuite/gcc.target/i386/pr44942.c b/gcc/testsuite/gcc.target/i386/pr44942.c
new file mode 100644
index 00000000000..4664f7e0d53
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr44942.c
@@ -0,0 +1,44 @@
+/* PR target/44942 */
+/* { dg-do run { target lp64 } } */
+
+#include <stdarg.h>
+#include <emmintrin.h>
+
+void
+test1 (double a, double b, double c, double d, double e, double f,
+ double g, __m128d h, ...)
+{
+ double i;
+ va_list ap;
+
+ va_start (ap, h);
+ i = va_arg (ap, double);
+ if (i != 1234.0)
+ __builtin_abort ();
+ va_end (ap);
+}
+
+void
+test2 (double a, double b, double c, double d, double e, double f, double g,
+ __m128d h, double i, __m128d j, double k, __m128d l,
+ double m, __m128d n, ...)
+{
+ double o;
+ va_list ap;
+
+ va_start (ap, n);
+ o = va_arg (ap, double);
+ if (o != 1234.0)
+ __builtin_abort ();
+ va_end (ap);
+}
+
+int
+main ()
+{
+ __m128d m = _mm_set1_pd (7.0);
+ test1 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, m, 1234.0);
+ test2 (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, m, 0.0, m,
+ 0.0, m, 0.0, m, 1234.0);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/push-1.c b/gcc/testsuite/gcc.target/i386/push-1.c
index 797ad575dd1..09464bf9229 100644
--- a/gcc/testsuite/gcc.target/i386/push-1.c
+++ b/gcc/testsuite/gcc.target/i386/push-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
/* { dg-options "-w -msse2 -Os" } */
-/* { dg-require-effective-target sse2 } */
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
diff --git a/gcc/testsuite/gcc.target/i386/quad-sse.c b/gcc/testsuite/gcc.target/i386/quad-sse.c
index 8c594452618..4b6fe792575 100644
--- a/gcc/testsuite/gcc.target/i386/quad-sse.c
+++ b/gcc/testsuite/gcc.target/i386/quad-sse.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
__float128 x, y;
diff --git a/gcc/testsuite/gcc.target/i386/rdfsbase-1.c b/gcc/testsuite/gcc.target/i386/rdfsbase-1.c
new file mode 100644
index 00000000000..c4808e9683b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdfsbase-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "rdfsbase\[ \t]+(%|)eax" } } */
+
+#include <immintrin.h>
+
+unsigned int
+read_fs_base32 (void)
+{
+ return _readfsbase_u32 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/rdfsbase-2.c b/gcc/testsuite/gcc.target/i386/rdfsbase-2.c
new file mode 100644
index 00000000000..40b8f4a999f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdfsbase-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "rdfsbase\[ \t]+(%|)rax" } } */
+
+#include <immintrin.h>
+
+unsigned long long
+read_fs_base64 (void)
+{
+ return _readfsbase_u64 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/rdgsbase-1.c b/gcc/testsuite/gcc.target/i386/rdgsbase-1.c
new file mode 100644
index 00000000000..1e5a302085e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdgsbase-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "rdgsbase\[ \t]+(%|)eax" } } */
+
+#include <immintrin.h>
+
+unsigned int
+read_gs_base32 (void)
+{
+ return _readgsbase_u32 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/rdgsbase-2.c b/gcc/testsuite/gcc.target/i386/rdgsbase-2.c
new file mode 100644
index 00000000000..13215825069
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdgsbase-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "rdgsbase\[ \t]+(%|)rax" } } */
+
+#include <immintrin.h>
+
+unsigned long long
+read_gs_base64 (void)
+{
+ return _readgsbase_u64 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/rdrand-1.c b/gcc/testsuite/gcc.target/i386/rdrand-1.c
new file mode 100644
index 00000000000..4f6b9e177e0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdrand-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mrdrnd " } */
+/* { dg-final { scan-assembler "rdrand\[ \t]+(%|)ax" } } */
+/* { dg-final { scan-assembler "jnc\[ \t]+" } } */
+
+#include <immintrin.h>
+
+unsigned short
+read_rdrand16 (void)
+{
+ return _rdrand_u16 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/rdrand-2.c b/gcc/testsuite/gcc.target/i386/rdrand-2.c
new file mode 100644
index 00000000000..22973834dca
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdrand-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mrdrnd " } */
+/* { dg-final { scan-assembler "rdrand\[ \t]+(%|)eax" } } */
+/* { dg-final { scan-assembler "jnc\[ \t]+" } } */
+
+#include <immintrin.h>
+
+unsigned int
+read_rdrand32 (void)
+{
+ return _rdrand_u32 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/rdrand-3.c b/gcc/testsuite/gcc.target/i386/rdrand-3.c
new file mode 100644
index 00000000000..17c7c6fff24
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/rdrand-3.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mrdrnd " } */
+/* { dg-final { scan-assembler "rdrand\[ \t]+(%|)rax" } } */
+/* { dg-final { scan-assembler "jnc\[ \t]+" } } */
+
+#include <immintrin.h>
+
+unsigned long long
+read_rdrand64 (void)
+{
+ return _rdrand_u64 ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/reload-1.c b/gcc/testsuite/gcc.target/i386/reload-1.c
index 299871585e2..f8075acaed4 100644
--- a/gcc/testsuite/gcc.target/i386/reload-1.c
+++ b/gcc/testsuite/gcc.target/i386/reload-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O3 -msse2 -fdump-rtl-csa" } */
/* { dg-skip-if "no stdint" { vxworks_kernel } } */
diff --git a/gcc/testsuite/gcc.target/i386/sse-12.c b/gcc/testsuite/gcc.target/i386/sse-12.c
index 77baff0f4b9..2d50f41d540 100644
--- a/gcc/testsuite/gcc.target/i386/sse-12.c
+++ b/gcc/testsuite/gcc.target/i386/sse-12.c
@@ -2,7 +2,7 @@
abmintrin.h, lwpintrin.h, popcntintrin.h and mm_malloc.h are usable
with -O -std=c89 -pedantic-errors. */
/* { dg-do compile } */
-/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-13.c b/gcc/testsuite/gcc.target/i386/sse-13.c
index 96214e02280..01809d0cffa 100644
--- a/gcc/testsuite/gcc.target/i386/sse-13.c
+++ b/gcc/testsuite/gcc.target/i386/sse-13.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
#include <mm_malloc.h>
@@ -50,6 +50,8 @@
#define __builtin_ia32_vinsertf128_si256(X, Y, C) __builtin_ia32_vinsertf128_si256(X, Y, 1)
#define __builtin_ia32_roundpd256(V, M) __builtin_ia32_roundpd256(V, 1)
#define __builtin_ia32_roundps256(V, M) __builtin_ia32_roundps256(V, 1)
+#define __builtin_ia32_vcvtps2ph(A, I) __builtin_ia32_vcvtps2ph(A, 1)
+#define __builtin_ia32_vcvtps2ph256(A, I) __builtin_ia32_vcvtps2ph256(A, 1)
/* wmmintrin.h */
#define __builtin_ia32_aeskeygenassist128(X, C) __builtin_ia32_aeskeygenassist128(X, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-14.c b/gcc/testsuite/gcc.target/i386/sse-14.c
index 96a3f210eb0..d256e68c4be 100644
--- a/gcc/testsuite/gcc.target/i386/sse-14.c
+++ b/gcc/testsuite/gcc.target/i386/sse-14.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -msse4a -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -msse4a -maes -mpclmul -mpopcnt -mabm -mlwp -mfsgsbase -mrdrnd -mf16c" } */
#include <mm_malloc.h>
@@ -89,6 +89,9 @@ test_2 (_mm256_insert_epi64, __m256i, __m256i, long long, 1)
#endif
test_1 (_mm256_round_pd, __m256d, __m256d, 1)
test_1 (_mm256_round_ps, __m256, __m256, 1)
+test_1 (_cvtss_sh, unsigned short, float, 1)
+test_1 (_mm_cvtps_ph, __m128i, __m128, 1)
+test_1 (_mm256_cvtps_ph, __m128i, __m256, 1)
/* wmmintrin.h */
test_1 (_mm_aeskeygenassist_si128, __m128i, __m128i, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-15.c b/gcc/testsuite/gcc.target/i386/sse-15.c
index ed91ee65d38..5a1da7a755f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-15.c
+++ b/gcc/testsuite/gcc.target/i386/sse-15.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse -msse2" } */
-/* { dg-require-effective-target sse2 } */
/* Test that the intrinsics compile with optimization. These were not
tested in i386-sse-[12].c because these builtins require immediate
diff --git a/gcc/testsuite/gcc.target/i386/sse-19.c b/gcc/testsuite/gcc.target/i386/sse-19.c
index 112c3e1cfad..43c090bd4e1 100644
--- a/gcc/testsuite/gcc.target/i386/sse-19.c
+++ b/gcc/testsuite/gcc.target/i386/sse-19.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O3 -msse2" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "punpcklbw" } } */
extern void abort();
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-2.c b/gcc/testsuite/gcc.target/i386/sse-2.c
index cbaa5e6a30d..c2f3e0b17cd 100644
--- a/gcc/testsuite/gcc.target/i386/sse-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-2.c
@@ -1,5 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O3 -msse" } */
+
#include <xmmintrin.h>
static const __m128 v_sign = {-.0f, -.0f, -.0f, -.0f};
static const __m128 v_half = {0.5f, 0.5f, 0.5f, 0.5f};
diff --git a/gcc/testsuite/gcc.target/i386/sse-20.c b/gcc/testsuite/gcc.target/i386/sse-20.c
index 5aa8f7a2812..fc0744f2554 100644
--- a/gcc/testsuite/gcc.target/i386/sse-20.c
+++ b/gcc/testsuite/gcc.target/i386/sse-20.c
@@ -1,5 +1,6 @@
/* PR target/13685 */
/* { dg-options "-Os -msse" } */
+/* { dg-require-effective-target sse } */
typedef float __m128 __attribute__ ((vector_size (16)));
typedef int __m64 __attribute__ ((vector_size (8)));
diff --git a/gcc/testsuite/gcc.target/i386/sse-22.c b/gcc/testsuite/gcc.target/i386/sse-22.c
index 6d976972d28..bb0472d471c 100644
--- a/gcc/testsuite/gcc.target/i386/sse-22.c
+++ b/gcc/testsuite/gcc.target/i386/sse-22.c
@@ -39,7 +39,7 @@
#ifndef DIFFERENT_PRAGMAS
-#pragma GCC target ("mmx,3dnow,sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,aes,pclmul,xop,popcnt,abm,lwp")
+#pragma GCC target ("mmx,3dnow,sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,aes,pclmul,xop,popcnt,abm,lwp,fsgsbase,rdrnd,f16c")
#endif
/* Following intrinsics require immediate arguments. They
@@ -179,3 +179,12 @@ test_2 ( __lwpins32, unsigned char, unsigned int, unsigned int, 1)
test_2 ( __lwpval64, void, unsigned long long, unsigned int, 1)
test_2 ( __lwpins64, unsigned char, unsigned long long, unsigned int, 1)
#endif
+
+/* immintrin.h (F16C). */
+#ifdef DIFFERENT_PRAGMAS
+#pragma GCC target ("f16c")
+#endif
+#include <x86intrin.h>
+test_1 (_cvtss_sh, unsigned short, float, 1)
+test_1 (_mm_cvtps_ph, __m128i, __m128, 1)
+test_1 (_mm256_cvtps_ph, __m128i, __m256, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-23.c b/gcc/testsuite/gcc.target/i386/sse-23.c
index f74d3a71f6e..0e15bb25418 100644
--- a/gcc/testsuite/gcc.target/i386/sse-23.c
+++ b/gcc/testsuite/gcc.target/i386/sse-23.c
@@ -126,6 +126,8 @@
#define __builtin_ia32_vinsertf128_si256(X, Y, C) __builtin_ia32_vinsertf128_si256(X, Y, 1)
#define __builtin_ia32_roundpd256(V, M) __builtin_ia32_roundpd256(V, 1)
#define __builtin_ia32_roundps256(V, M) __builtin_ia32_roundps256(V, 1)
+#define __builtin_ia32_vcvtps2ph(A, I) __builtin_ia32_vcvtps2ph(A, 1)
+#define __builtin_ia32_vcvtps2ph256(A, I) __builtin_ia32_vcvtps2ph256(A, 1)
/* xopintrin.h */
#define __builtin_ia32_vprotbi(A, B) __builtin_ia32_vprotbi(A,1)
@@ -139,7 +141,7 @@
#define __builtin_ia32_lwpins32(D2, D1, F) __builtin_ia32_lwpins32 (D2, D1, 1)
#define __builtin_ia32_lwpins64(D2, D1, F) __builtin_ia32_lwpins64 (D2, D1, 1)
-#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop,abm,popcnt,lwp")
+#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop,abm,popcnt,lwp,fsgsbase,rdrnd,f16c")
#include <wmmintrin.h>
#include <smmintrin.h>
#include <mm3dnow.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-3.c b/gcc/testsuite/gcc.target/i386/sse-3.c
index 338b7c60ba7..1be1d1aa223 100644
--- a/gcc/testsuite/gcc.target/i386/sse-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-3.c
@@ -1,6 +1,7 @@
/* PR target/21149 */
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-4.c b/gcc/testsuite/gcc.target/i386/sse-4.c
index 5d49884ab85..394ad9d7ec4 100644
--- a/gcc/testsuite/gcc.target/i386/sse-4.c
+++ b/gcc/testsuite/gcc.target/i386/sse-4.c
@@ -1,7 +1,6 @@
/* This testcase caused a buffer overflow in simplify_immed_subreg. */
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-7.c b/gcc/testsuite/gcc.target/i386/sse-7.c
index 12b88ca53f3..30e2c13ba04 100644
--- a/gcc/testsuite/gcc.target/i386/sse-7.c
+++ b/gcc/testsuite/gcc.target/i386/sse-7.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-9.c b/gcc/testsuite/gcc.target/i386/sse-9.c
index 0106cb52f63..e1a0a2270cb 100644
--- a/gcc/testsuite/gcc.target/i386/sse-9.c
+++ b/gcc/testsuite/gcc.target/i386/sse-9.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-addps-1.c b/gcc/testsuite/gcc.target/i386/sse-addps-1.c
index 2aa1cfa411a..b280667b5d0 100644
--- a/gcc/testsuite/gcc.target/i386/sse-addps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-addps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-addss-1.c b/gcc/testsuite/gcc.target/i386/sse-addss-1.c
index 911a6cd9192..43aa2d53efd 100644
--- a/gcc/testsuite/gcc.target/i386/sse-addss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-addss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-andnps-1.c b/gcc/testsuite/gcc.target/i386/sse-andnps-1.c
index 06d1e07dd40..eeeec020a7d 100644
--- a/gcc/testsuite/gcc.target/i386/sse-andnps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-andnps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-andps-1.c b/gcc/testsuite/gcc.target/i386/sse-andps-1.c
index aa46b8a28b7..6094dba7d34 100644
--- a/gcc/testsuite/gcc.target/i386/sse-andps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-andps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-check.h b/gcc/testsuite/gcc.target/i386/sse-check.h
index 85629cc71b9..11b71bc3e97 100644
--- a/gcc/testsuite/gcc.target/i386/sse-check.h
+++ b/gcc/testsuite/gcc.target/i386/sse-check.h
@@ -1,8 +1,7 @@
-#include <stdio.h>
#include <stdlib.h>
#include "m128-check.h"
-
#include "cpuid.h"
+#include "sse-os-support.h"
static void sse_test (void);
@@ -22,7 +21,7 @@ main ()
return 0;
/* Run SSE test only if host has SSE support. */
- if (edx & bit_SSE)
+ if ((edx & bit_SSE) && sse_os_support ())
do_test ();
return 0;
diff --git a/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c b/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c
index e4be7318e06..45438bcd1b7 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cmpss-1.c
@@ -1,5 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse -std=c99" } */
+/* { dg-require-effective-target sse } */
+/* { dg-require-effective-target c99_runtime } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-1.c b/gcc/testsuite/gcc.target/i386/sse-comiss-1.c
index 2892a70a67b..ff623aa8bed 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-2.c b/gcc/testsuite/gcc.target/i386/sse-comiss-2.c
index 63b6d6d113f..d674bed002b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-3.c b/gcc/testsuite/gcc.target/i386/sse-comiss-3.c
index 75ac4e4faaf..d2301ad8e51 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-3.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-4.c b/gcc/testsuite/gcc.target/i386/sse-comiss-4.c
index ceeeca79472..7f372e249b9 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-4.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-4.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-5.c b/gcc/testsuite/gcc.target/i386/sse-comiss-5.c
index 8f503512ffa..104fdd701f7 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-5.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-5.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-comiss-6.c b/gcc/testsuite/gcc.target/i386/sse-comiss-6.c
index 38df9b8e47b..8229b7d55d7 100644
--- a/gcc/testsuite/gcc.target/i386/sse-comiss-6.c
+++ b/gcc/testsuite/gcc.target/i386/sse-comiss-6.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c b/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
index 9342e2c7187..bd85889503d 100644
--- a/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
+++ b/gcc/testsuite/gcc.target/i386/sse-copysignf-vec.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ftree-vectorize -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
index e5435b6b733..740227feef4 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
index aa74e11ec55..6abc4d5afed 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtsi2ss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
#ifndef CHECK_H
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
index 5740626659a..3f8c549c962 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c
index e136b7198a0..44a5fafc31b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvtss2si-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
#ifndef CHECK_H
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c
index 8edc197eafd..667806d970f 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
index 94e831e782f..eb85223450d 100644
--- a/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-cvttss2si-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target lp64 } */
+/* { dg-require-effective-target sse } */
/* { dg-options "-O2 -msse" } */
#ifndef CHECK_H
diff --git a/gcc/testsuite/gcc.target/i386/sse-divps-1.c b/gcc/testsuite/gcc.target/i386/sse-divps-1.c
index d4d441aeb1f..321bb5ac7c6 100644
--- a/gcc/testsuite/gcc.target/i386/sse-divps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-divps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-divss-1.c b/gcc/testsuite/gcc.target/i386/sse-divss-1.c
index e7449496e0a..1427e4f1a44 100644
--- a/gcc/testsuite/gcc.target/i386/sse-divss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-divss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c b/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
index 5c254772709..f2513154788 100644
--- a/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-init-v4hi-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c b/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
index 4cb1f337e2a..eea03ecadea 100644
--- a/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-init-v4sf-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-maxps-1.c b/gcc/testsuite/gcc.target/i386/sse-maxps-1.c
index 5e6fcd654ef..9a82f665a4b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-maxps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-maxps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-maxss-1.c b/gcc/testsuite/gcc.target/i386/sse-maxss-1.c
index 5b5215a5772..7b88dfce710 100644
--- a/gcc/testsuite/gcc.target/i386/sse-maxss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-maxss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-minps-1.c b/gcc/testsuite/gcc.target/i386/sse-minps-1.c
index a41139f8b96..452df8318ab 100644
--- a/gcc/testsuite/gcc.target/i386/sse-minps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-minps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-minss-1.c b/gcc/testsuite/gcc.target/i386/sse-minss-1.c
index 9280b07052d..b7288f85915 100644
--- a/gcc/testsuite/gcc.target/i386/sse-minss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-minss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movaps-1.c b/gcc/testsuite/gcc.target/i386/sse-movaps-1.c
index 3677ac44288..ed3562ba53a 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movaps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movaps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movaps-2.c b/gcc/testsuite/gcc.target/i386/sse-movaps-2.c
index 46b971a9d9c..fcfa80bebbc 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movaps-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movaps-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c b/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c
index 7023bf95d1e..4d7b3edc2ac 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movhlps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movhps-1.c b/gcc/testsuite/gcc.target/i386/sse-movhps-1.c
index 9f28927a881..44b88592701 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movhps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movhps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movhps-2.c b/gcc/testsuite/gcc.target/i386/sse-movhps-2.c
index 023937b6633..11ab383977c 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movhps-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movhps-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c b/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c
index aba9a9aa413..4ce3edf59e7 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movlhps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c b/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c
index f1f0d7ed5a4..8557a30214b 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movmskps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movntps-1.c b/gcc/testsuite/gcc.target/i386/sse-movntps-1.c
index 8c45da31dde..067f29616e1 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movntps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movntps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movss-1.c b/gcc/testsuite/gcc.target/i386/sse-movss-1.c
index eccdf5af907..ee53d5faf11 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movss-2.c b/gcc/testsuite/gcc.target/i386/sse-movss-2.c
index f64fa4db698..638666594c9 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movss-3.c b/gcc/testsuite/gcc.target/i386/sse-movss-3.c
index 1212622b7ea..a090aada7f5 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movss-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movss-3.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movups-1.c b/gcc/testsuite/gcc.target/i386/sse-movups-1.c
index 222da79d940..7ea9122897a 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movups-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movups-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-movups-2.c b/gcc/testsuite/gcc.target/i386/sse-movups-2.c
index 41657239c32..188967a2a37 100644
--- a/gcc/testsuite/gcc.target/i386/sse-movups-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-movups-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-mulps-1.c b/gcc/testsuite/gcc.target/i386/sse-mulps-1.c
index a07b5abf610..de66a28e142 100644
--- a/gcc/testsuite/gcc.target/i386/sse-mulps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-mulps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-mulss-1.c b/gcc/testsuite/gcc.target/i386/sse-mulss-1.c
index 7b45063508d..99161a811a1 100644
--- a/gcc/testsuite/gcc.target/i386/sse-mulss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-mulss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-orps-1.c b/gcc/testsuite/gcc.target/i386/sse-orps-1.c
index 6c8dac5cc5c..605603726c0 100644
--- a/gcc/testsuite/gcc.target/i386/sse-orps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-orps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-os-support.h b/gcc/testsuite/gcc.target/i386/sse-os-support.h
new file mode 100644
index 00000000000..a2b4e2d3c7e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/sse-os-support.h
@@ -0,0 +1,55 @@
+#if defined(__sun__) && defined(__svr4__)
+/* Make sure sigaction() is declared even with -std=c99. */
+#define __EXTENSIONS__
+#include <signal.h>
+#include <ucontext.h>
+
+static volatile sig_atomic_t sigill_caught;
+
+static void
+sigill_hdlr (int sig __attribute((unused)),
+ siginfo_t *sip __attribute__((unused)),
+ ucontext_t *ucp)
+{
+ sigill_caught = 1;
+ /* Set PC to the instruction after the faulting one to skip over it,
+ otherwise we enter an infinite loop. */
+ ucp->uc_mcontext.gregs[EIP] += 4;
+ setcontext (ucp);
+}
+#endif
+
+/* Check if the OS supports executing SSE instructions. This function is
+ only used in sse-check.h, sse2-check.h, and sse3-check.h so far since
+ Solaris 8 and 9 won't run on newer CPUs anyway. */
+
+static int
+sse_os_support (void)
+{
+#if defined(__sun__) && defined(__svr4__)
+ /* Solaris 2 before Solaris 9 4/04 cannot execute SSE instructions
+ even if the CPU supports them. Programs receive SIGILL instead, so
+ check for that at runtime. */
+
+ struct sigaction act, oact;
+
+ act.sa_handler = sigill_hdlr;
+ sigemptyset (&act.sa_mask);
+ /* Need to set SA_SIGINFO so a ucontext_t * is passed to the handler. */
+ act.sa_flags = SA_SIGINFO;
+ sigaction (SIGILL, &act, &oact);
+
+ /* We need a single SSE instruction here so the handler can safely skip
+ over it. */
+ __asm__ volatile ("movss %xmm2,%xmm1");
+
+ sigaction (SIGILL, &oact, NULL);
+
+ if (sigill_caught)
+ exit (0);
+ else
+ return 1;
+#else
+ return 1;
+#endif /* __sun__ && __svr4__ */
+}
diff --git a/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c b/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
index 7a1a8fa7370..4d0783515e6 100644
--- a/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-rcpps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-recip-vec.c b/gcc/testsuite/gcc.target/i386/sse-recip-vec.c
index 202351dc987..bb1e458f92d 100644
--- a/gcc/testsuite/gcc.target/i386/sse-recip-vec.c
+++ b/gcc/testsuite/gcc.target/i386/sse-recip-vec.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-recip.c b/gcc/testsuite/gcc.target/i386/sse-recip.c
index d88eb7f007b..4f7d3bf3d54 100644
--- a/gcc/testsuite/gcc.target/i386/sse-recip.c
+++ b/gcc/testsuite/gcc.target/i386/sse-recip.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c b/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c
index 4052c21f010..c2db7254957 100644
--- a/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-rsqrtps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c b/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c
index 8232c7229c5..5a0c9b95d66 100644
--- a/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-set-ps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c b/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c
index 9f0658d0e27..1dbd260e515 100644
--- a/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-sqrtps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-subps-1.c b/gcc/testsuite/gcc.target/i386/sse-subps-1.c
index 2e7e8d50231..e63e4784a11 100644
--- a/gcc/testsuite/gcc.target/i386/sse-subps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-subps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-subss-1.c b/gcc/testsuite/gcc.target/i386/sse-subss-1.c
index 5b3ef26bd9f..5d9a5f504f9 100644
--- a/gcc/testsuite/gcc.target/i386/sse-subss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-subss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c
index b38b1fd424a..4d72b01873e 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c
index e0212a4e3df..dc4ba8045b3 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-2.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c
index dc728fb503b..042898bf6d2 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-3.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c
index 3251c0b8fb0..a3f32bb3576 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-4.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c
index ad34f01d979..821dd772640 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-5.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c b/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c
index b9b2f4b2892..602a923a0a5 100644
--- a/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c
+++ b/gcc/testsuite/gcc.target/i386/sse-ucomiss-6.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c b/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c
index be4ab3659cb..005924b5b6c 100644
--- a/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-unpckhps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c b/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c
index 5a5da2064a1..456ef201bca 100644
--- a/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-unpcklps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse-vect-types.c b/gcc/testsuite/gcc.target/i386/sse-vect-types.c
index 2658f020eff..9cb6f3e07cd 100644
--- a/gcc/testsuite/gcc.target/i386/sse-vect-types.c
+++ b/gcc/testsuite/gcc.target/i386/sse-vect-types.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O0 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <xmmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-xorps-1.c b/gcc/testsuite/gcc.target/i386/sse-xorps-1.c
index 6f96e691064..8ec500838ae 100644
--- a/gcc/testsuite/gcc.target/i386/sse-xorps-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse-xorps-1.c
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse" } */
+/* { dg-require-effective-target sse } */
#ifndef CHECK_H
#define CHECK_H "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse2-check.h b/gcc/testsuite/gcc.target/i386/sse2-check.h
index e9f17f04079..fd4a6ce1dbf 100644
--- a/gcc/testsuite/gcc.target/i386/sse2-check.h
+++ b/gcc/testsuite/gcc.target/i386/sse2-check.h
@@ -1,6 +1,7 @@
#include <stdlib.h>
#include "cpuid.h"
#include "m128-check.h"
+#include "sse-os-support.h"
static void sse2_test (void);
@@ -20,7 +21,7 @@ main ()
return 0;
/* Run SSE2 test only if host has SSE2 support. */
- if (edx & bit_SSE2)
+ if ((edx & bit_SSE2) && sse_os_support ())
do_test ();
return 0;
diff --git a/gcc/testsuite/gcc.target/i386/sse2-cmpsd-1.c b/gcc/testsuite/gcc.target/i386/sse2-cmpsd-1.c
index 953f220d1b1..153fd2bf045 100644
--- a/gcc/testsuite/gcc.target/i386/sse2-cmpsd-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse2-cmpsd-1.c
@@ -1,6 +1,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse2 -std=c99" } */
/* { dg-require-effective-target sse2 } */
+/* { dg-require-effective-target c99_runtime } */
#ifndef CHECK_H
#define CHECK_H "sse2-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/sse2-unpack-1.c b/gcc/testsuite/gcc.target/i386/sse2-unpack-1.c
index ed067082594..a2676396cd3 100644
--- a/gcc/testsuite/gcc.target/i386/sse2-unpack-1.c
+++ b/gcc/testsuite/gcc.target/i386/sse2-unpack-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
#include <emmintrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse3-check.h b/gcc/testsuite/gcc.target/i386/sse3-check.h
index df0e63a4575..5a0a0b1a02e 100644
--- a/gcc/testsuite/gcc.target/i386/sse3-check.h
+++ b/gcc/testsuite/gcc.target/i386/sse3-check.h
@@ -1,7 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
-
#include "cpuid.h"
+#include "sse-os-support.h"
static void sse3_test (void);
@@ -21,7 +21,7 @@ main ()
return 0;
/* Run SSE3 test only if host has SSE3 support. */
- if (ecx & bit_SSE3)
+ if ((ecx & bit_SSE3) && sse_os_support ())
do_test ();
return 0;
diff --git a/gcc/testsuite/gcc.target/i386/ssefn-2.c b/gcc/testsuite/gcc.target/i386/ssefn-2.c
index dfaacf6bdca..09b920ea7ca 100644
--- a/gcc/testsuite/gcc.target/i386/ssefn-2.c
+++ b/gcc/testsuite/gcc.target/i386/ssefn-2.c
@@ -3,7 +3,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "movss" } } */
/* { dg-final { scan-assembler "mulss" } } */
/* { dg-final { scan-assembler "movsd" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ssefn-3.c b/gcc/testsuite/gcc.target/i386/ssefn-3.c
index adf72cce18a..b96b21179dc 100644
--- a/gcc/testsuite/gcc.target/i386/ssefn-3.c
+++ b/gcc/testsuite/gcc.target/i386/ssefn-3.c
@@ -3,6 +3,7 @@
/* { dg-do run } */
/* { dg-options "-O2 -msse -mfpmath=sse" } */
+/* { dg-require-effective-target sse } */
#include "sse-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/ssefp-1.c b/gcc/testsuite/gcc.target/i386/ssefp-1.c
index fdce233173b..621e362f490 100644
--- a/gcc/testsuite/gcc.target/i386/ssefp-1.c
+++ b/gcc/testsuite/gcc.target/i386/ssefp-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8 -mfpmath=sse" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "maxsd" } } */
/* { dg-final { scan-assembler "minsd" } } */
double x;
diff --git a/gcc/testsuite/gcc.target/i386/ssefp-2.c b/gcc/testsuite/gcc.target/i386/ssefp-2.c
index 0b8b72262b5..a6caee398b2 100644
--- a/gcc/testsuite/gcc.target/i386/ssefp-2.c
+++ b/gcc/testsuite/gcc.target/i386/ssefp-2.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8 -mfpmath=sse" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "maxsd" } } */
/* { dg-final { scan-assembler "minsd" } } */
double x;
diff --git a/gcc/testsuite/gcc.target/i386/sseregparm-3.c b/gcc/testsuite/gcc.target/i386/sseregparm-3.c
index 7475e4f827f..9ee82af44ae 100644
--- a/gcc/testsuite/gcc.target/i386/sseregparm-3.c
+++ b/gcc/testsuite/gcc.target/i386/sseregparm-3.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* Make sure we know that mysinfp returns in %xmm0. */
diff --git a/gcc/testsuite/gcc.target/i386/sseregparm-4.c b/gcc/testsuite/gcc.target/i386/sseregparm-4.c
index b8fc521264e..a29cf06bf5c 100644
--- a/gcc/testsuite/gcc.target/i386/sseregparm-4.c
+++ b/gcc/testsuite/gcc.target/i386/sseregparm-4.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* Make sure we know that mysinfp returns in %xmm0. */
diff --git a/gcc/testsuite/gcc.target/i386/sseregparm-5.c b/gcc/testsuite/gcc.target/i386/sseregparm-5.c
index fa41a2c87b9..7423722d694 100644
--- a/gcc/testsuite/gcc.target/i386/sseregparm-5.c
+++ b/gcc/testsuite/gcc.target/i386/sseregparm-5.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* Make sure we know that mysinfp returns in %xmm0. */
diff --git a/gcc/testsuite/gcc.target/i386/sseregparm-6.c b/gcc/testsuite/gcc.target/i386/sseregparm-6.c
index d0358c5e693..6203b6b5971 100644
--- a/gcc/testsuite/gcc.target/i386/sseregparm-6.c
+++ b/gcc/testsuite/gcc.target/i386/sseregparm-6.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* Make sure we know that mysinfp returns in %xmm0. */
diff --git a/gcc/testsuite/gcc.target/i386/sseregparm-7.c b/gcc/testsuite/gcc.target/i386/sseregparm-7.c
index 99953b5aa9c..61267df9853 100644
--- a/gcc/testsuite/gcc.target/i386/sseregparm-7.c
+++ b/gcc/testsuite/gcc.target/i386/sseregparm-7.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-msse2 -O2" } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* Make sure we know that mysinfp returns in %xmm0. */
diff --git a/gcc/testsuite/gcc.target/i386/ssetype-1.c b/gcc/testsuite/gcc.target/i386/ssetype-1.c
index 00ea2857484..ef89059b8d8 100644
--- a/gcc/testsuite/gcc.target/i386/ssetype-1.c
+++ b/gcc/testsuite/gcc.target/i386/ssetype-1.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* This test checks for absolute memory operands. */
/* { dg-require-effective-target nonpic } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -msse2 -march=k8" } */
/* { dg-final { scan-assembler "andpd\[^\\n\]*magic" } } */
/* { dg-final { scan-assembler "andnpd\[^\\n\]*magic" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ssetype-2.c b/gcc/testsuite/gcc.target/i386/ssetype-2.c
index c6a8ba7b548..b68a63923fb 100644
--- a/gcc/testsuite/gcc.target/i386/ssetype-2.c
+++ b/gcc/testsuite/gcc.target/i386/ssetype-2.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "andpd" } } */
/* { dg-final { scan-assembler "andnpd" } } */
/* { dg-final { scan-assembler "xorpd" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ssetype-3.c b/gcc/testsuite/gcc.target/i386/ssetype-3.c
index 0e83e28c468..d6887d5cd20 100644
--- a/gcc/testsuite/gcc.target/i386/ssetype-3.c
+++ b/gcc/testsuite/gcc.target/i386/ssetype-3.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* This test checks for absolute memory operands. */
/* { dg-require-effective-target nonpic } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -msse2 -march=k8" } */
/* { dg-final { scan-assembler "andps\[^\\n\]*magic" } } */
/* { dg-final { scan-assembler "andnps\[^\\n\]*magic" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ssetype-4.c b/gcc/testsuite/gcc.target/i386/ssetype-4.c
index 9b68792390d..9994b07f21c 100644
--- a/gcc/testsuite/gcc.target/i386/ssetype-4.c
+++ b/gcc/testsuite/gcc.target/i386/ssetype-4.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -march=k8" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "andps" } } */
/* { dg-final { scan-assembler "andnps" } } */
/* { dg-final { scan-assembler "xorps" } } */
diff --git a/gcc/testsuite/gcc.target/i386/ssetype-5.c b/gcc/testsuite/gcc.target/i386/ssetype-5.c
index 098ed89ad66..75133e9fa68 100644
--- a/gcc/testsuite/gcc.target/i386/ssetype-5.c
+++ b/gcc/testsuite/gcc.target/i386/ssetype-5.c
@@ -1,7 +1,6 @@
/* { dg-do compile } */
/* This test checks for absolute memory operands. */
/* { dg-require-effective-target nonpic } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -msse2 -march=k8" } */
/* { dg-final { scan-assembler "pand\[^\\n\]*magic" } } */
/* { dg-final { scan-assembler "pandn\[^\\n\]*magic" } } */
diff --git a/gcc/testsuite/gcc.target/i386/stackalign/return-3.c b/gcc/testsuite/gcc.target/i386/stackalign/return-3.c
index 87210d817a8..dd2c2e8b452 100644
--- a/gcc/testsuite/gcc.target/i386/stackalign/return-3.c
+++ b/gcc/testsuite/gcc.target/i386/stackalign/return-3.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-skip-if "" { ! { ilp32 && dfp } } { "*" } { "" } } */
/* { dg-options "-msse -std=gnu99 -mpreferred-stack-boundary=2" } */
+/* { dg-require-effective-target sse } */
/* This compile only test is to detect an assertion failure in stack branch
development. */
diff --git a/gcc/testsuite/gcc.target/i386/unordcmp-1.c b/gcc/testsuite/gcc.target/i386/unordcmp-1.c
index 85de4865d2f..49d4b8e076a 100644
--- a/gcc/testsuite/gcc.target/i386/unordcmp-1.c
+++ b/gcc/testsuite/gcc.target/i386/unordcmp-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "cmpunordss" } } */
/* { dg-final { scan-assembler "cmpunordps" } } */
/* { dg-final { scan-assembler "cmpunordsd" } } */
diff --git a/gcc/testsuite/gcc.target/i386/vcvtph2ps-1.c b/gcc/testsuite/gcc.target/i386/vcvtph2ps-1.c
new file mode 100644
index 00000000000..3b46671f056
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vcvtph2ps-1.c
@@ -0,0 +1,28 @@
+/* { dg-do run } */
+/* { dg-require-effective-target f16c } */
+/* { dg-options "-O2 -mf16c" } */
+
+#include "f16c-check.h"
+
+static void
+f16c_test (void)
+{
+ union128i_w val;
+ union128 res;
+ float exp[4];
+
+ exp[0] = 1;
+ exp[1] = -2;
+ exp[2] = -1;
+ exp[3] = 2;
+
+ val.a[0] = 0x3c00;
+ val.a[1] = 0xc000;
+ val.a[2] = 0xbc00;
+ val.a[3] = 0x4000;
+
+ res.x = _mm_cvtph_ps (val.x);
+
+ if (check_union128 (res, exp))
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/vcvtph2ps-2.c b/gcc/testsuite/gcc.target/i386/vcvtph2ps-2.c
new file mode 100644
index 00000000000..1523deaa1d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vcvtph2ps-2.c
@@ -0,0 +1,36 @@
+/* { dg-do run } */
+/* { dg-require-effective-target f16c } */
+/* { dg-options "-O2 -mf16c" } */
+
+#include "f16c-check.h"
+
+static void
+f16c_test (void)
+{
+ union256 res;
+ union128i_w val;
+ float exp[8];
+
+ exp[0] = 1;
+ exp[1] = 2;
+ exp[2] = 4;
+ exp[3] = 8;
+ exp[4] = -1;
+ exp[5] = -2;
+ exp[6] = -4;
+ exp[7] = -8;
+
+ val.a[0] = 0x3c00;
+ val.a[1] = 0x4000;
+ val.a[2] = 0x4400;
+ val.a[3] = 0x4800;
+ val.a[4] = 0xbc00;
+ val.a[5] = 0xc000;
+ val.a[6] = 0xc400;
+ val.a[7] = 0xc800;
+
+ res.x = _mm256_cvtph_ps (val.x);
+
+ if (check_union256 (res, exp))
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/vcvtph2ps-3.c b/gcc/testsuite/gcc.target/i386/vcvtph2ps-3.c
new file mode 100644
index 00000000000..49b61f678c4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vcvtph2ps-3.c
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-require-effective-target f16c } */
+/* { dg-options "-O2 -mf16c" } */
+
+#include "f16c-check.h"
+
+static void
+f16c_test (void)
+{
+ unsigned short val = 0xc000;
+ float exp = -2;
+ float res;
+
+ res = _cvtsh_ss (val);
+
+ if (res != exp)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/vcvtps2ph-1.c b/gcc/testsuite/gcc.target/i386/vcvtps2ph-1.c
new file mode 100644
index 00000000000..c114c98ad8d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vcvtps2ph-1.c
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-require-effective-target f16c } */
+/* { dg-options "-O2 -mf16c" } */
+
+#include "f16c-check.h"
+
+static void
+f16c_test (void)
+{
+ union128 val;
+ union128i_w res;
+ short exp[8];
+
+ val.a[0] = 1;
+ val.a[1] = -2;
+ val.a[2] = -1;
+ val.a[3] = 2;
+
+ exp[0] = 0x3c00;
+ exp[1] = 0xc000;
+ exp[2] = 0xbc00;
+ exp[3] = 0x4000;
+ exp[4] = 0;
+ exp[5] = 0;
+ exp[6] = 0;
+ exp[7] = 0;
+
+ res.x = _mm_cvtps_ph (val.x, 0);
+
+ if (check_union128i_w (res, exp))
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/vcvtps2ph-2.c b/gcc/testsuite/gcc.target/i386/vcvtps2ph-2.c
new file mode 100644
index 00000000000..57436ae86bf
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vcvtps2ph-2.c
@@ -0,0 +1,36 @@
+/* { dg-do run } */
+/* { dg-require-effective-target f16c } */
+/* { dg-options "-O2 -mf16c" } */
+
+#include "f16c-check.h"
+
+static void
+f16c_test (void)
+{
+ union256 val;
+ union128i_w res;
+ short exp[8];
+
+ val.a[0] = 1;
+ val.a[1] = 2;
+ val.a[2] = 4;
+ val.a[3] = 8;
+ val.a[4] = -1;
+ val.a[5] = -2;
+ val.a[6] = -4;
+ val.a[7] = -8;
+
+ exp[0] = 0x3c00;
+ exp[1] = 0x4000;
+ exp[2] = 0x4400;
+ exp[3] = 0x4800;
+ exp[4] = 0xbc00;
+ exp[5] = 0xc000;
+ exp[6] = 0xc400;
+ exp[7] = 0xc800;
+
+ res.x = _mm256_cvtps_ph (val.x, 0);
+
+ if (check_union128i_w (res, exp))
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/vcvtps2ph-3.c b/gcc/testsuite/gcc.target/i386/vcvtps2ph-3.c
new file mode 100644
index 00000000000..3b7cb5c5ca0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vcvtps2ph-3.c
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+/* { dg-require-effective-target f16c } */
+/* { dg-options "-O2 -mf16c" } */
+
+#include "f16c-check.h"
+
+static void
+f16c_test (void)
+{
+ float val = -2;
+ unsigned short exp = 0xc000;
+ unsigned short res;
+
+ res = _cvtss_sh (val, 0);
+
+ if (res != exp)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/vecinit-1.c b/gcc/testsuite/gcc.target/i386/vecinit-1.c
index cba7429f242..fad0c07e100 100644
--- a/gcc/testsuite/gcc.target/i386/vecinit-1.c
+++ b/gcc/testsuite/gcc.target/i386/vecinit-1.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
#define vector __attribute__((vector_size(16)))
float a;
diff --git a/gcc/testsuite/gcc.target/i386/vecinit-2.c b/gcc/testsuite/gcc.target/i386/vecinit-2.c
index fdfa837c698..a3a7abc5340 100644
--- a/gcc/testsuite/gcc.target/i386/vecinit-2.c
+++ b/gcc/testsuite/gcc.target/i386/vecinit-2.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
#define vector __attribute__((vector_size(16)))
int a;
diff --git a/gcc/testsuite/gcc.target/i386/vecinit-3.c b/gcc/testsuite/gcc.target/i386/vecinit-3.c
index aae642ae27c..062fb1ed10a 100644
--- a/gcc/testsuite/gcc.target/i386/vecinit-3.c
+++ b/gcc/testsuite/gcc.target/i386/vecinit-3.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
#define vector __attribute__((vector_size(16)))
char a;
diff --git a/gcc/testsuite/gcc.target/i386/vecinit-4.c b/gcc/testsuite/gcc.target/i386/vecinit-4.c
index 101b68badc4..2dfa29c4922 100644
--- a/gcc/testsuite/gcc.target/i386/vecinit-4.c
+++ b/gcc/testsuite/gcc.target/i386/vecinit-4.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
#define vector __attribute__((vector_size(16)))
short a;
diff --git a/gcc/testsuite/gcc.target/i386/vecinit-5.c b/gcc/testsuite/gcc.target/i386/vecinit-5.c
index b9e7e27c78f..dcf8b9206aa 100644
--- a/gcc/testsuite/gcc.target/i386/vecinit-5.c
+++ b/gcc/testsuite/gcc.target/i386/vecinit-5.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
#define vector __attribute__((vector_size(16)))
float a, b;
diff --git a/gcc/testsuite/gcc.target/i386/vecinit-6.c b/gcc/testsuite/gcc.target/i386/vecinit-6.c
index 3b22043273b..6817922d26b 100644
--- a/gcc/testsuite/gcc.target/i386/vecinit-6.c
+++ b/gcc/testsuite/gcc.target/i386/vecinit-6.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2" } */
-/* { dg-require-effective-target sse2 } */
+
#define vector __attribute__((vector_size(16)))
int a, b;
diff --git a/gcc/testsuite/gcc.target/i386/vectorize1.c b/gcc/testsuite/gcc.target/i386/vectorize1.c
index 7a5023aa905..f673e44c963 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize1.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize1.c
@@ -1,5 +1,6 @@
/* PR middle-end/28915 */
/* { dg-options "-msse -O2 -ftree-vectorize -fdump-tree-vect" } */
+/* { dg-require-effective-target sse } */
extern char lanip[3][40];
typedef struct
diff --git a/gcc/testsuite/gcc.target/i386/vectorize2.c b/gcc/testsuite/gcc.target/i386/vectorize2.c
index a7196c70d13..41964871959 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize2.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize2.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse2 -mfpmath=sse" } */
double a[256];
diff --git a/gcc/testsuite/gcc.target/i386/vectorize3.c b/gcc/testsuite/gcc.target/i386/vectorize3.c
index e19f8d87bda..2947acbafda 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize3.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize3.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse2 -mfpmath=sse" } */
float a[256];
diff --git a/gcc/testsuite/gcc.target/i386/vectorize4.c b/gcc/testsuite/gcc.target/i386/vectorize4.c
index 9933d299729..f3d605e228a 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize4.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize4.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
-/* { dg-require-effective-target sse2 } */
/* { dg-options "-O2 -ffast-math -ftree-vectorize -msse2 --param ggc-min-expand=0 --param ggc-min-heapsize=0" } */
/* This test, tests two thing, we vectorize square root and also we don't crash due to a GC issue. */
diff --git a/gcc/testsuite/gcc.target/i386/vectorize6.c b/gcc/testsuite/gcc.target/i386/vectorize6.c
index 41e61aa2ccd..78ec53d15a8 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize6.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize6.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -msse2 -ftree-vectorize -mveclibabi=svml -ffast-math" } */
-/* { dg-require-effective-target sse2 } */
double x[256];
diff --git a/gcc/testsuite/gcc.target/i386/vectorize7.c b/gcc/testsuite/gcc.target/i386/vectorize7.c
index eca043bdfa2..10b7ba27868 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize7.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize7.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ftree-vectorize -msse2" } */
-/* { dg-require-effective-target sse2 } */
unsigned int a[256];
float b[256];
diff --git a/gcc/testsuite/gcc.target/i386/vectorize8.c b/gcc/testsuite/gcc.target/i386/vectorize8.c
index e26362035ad..ed1517b93ef 100644
--- a/gcc/testsuite/gcc.target/i386/vectorize8.c
+++ b/gcc/testsuite/gcc.target/i386/vectorize8.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -ftree-vectorize -msse2" } */
-/* { dg-require-effective-target sse2 } */
unsigned int a[256];
double b[256];
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v2df.c b/gcc/testsuite/gcc.target/i386/vperm-v2df.c
index d0394635c59..40a51306fdc 100644
--- a/gcc/testsuite/gcc.target/i386/vperm-v2df.c
+++ b/gcc/testsuite/gcc.target/i386/vperm-v2df.c
@@ -3,6 +3,7 @@
/* { dg-require-effective-target sse2 } */
#include "isa-check.h"
+#include "sse-os-support.h"
typedef double S;
typedef double V __attribute__((vector_size(16)));
@@ -25,6 +26,11 @@ extern int memcmp (const void *, const void *, __SIZE_TYPE__);
int main()
{
+ check_isa ();
+
+ if (!sse_os_support ())
+ exit (0);
+
i[0].s[0] = 0;
i[0].s[1] = 1;
i[0].s[2] = 2;
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v2di.c b/gcc/testsuite/gcc.target/i386/vperm-v2di.c
index 940de68af19..8e300837da8 100644
--- a/gcc/testsuite/gcc.target/i386/vperm-v2di.c
+++ b/gcc/testsuite/gcc.target/i386/vperm-v2di.c
@@ -3,6 +3,7 @@
/* { dg-require-effective-target sse2 } */
#include "isa-check.h"
+#include "sse-os-support.h"
typedef long long S;
typedef long long V __attribute__((vector_size(16)));
@@ -25,6 +26,11 @@ extern int memcmp (const void *, const void *, __SIZE_TYPE__);
int main()
{
+ check_isa ();
+
+ if (!sse_os_support ())
+ exit (0);
+
i[0].s[0] = 0;
i[0].s[1] = 1;
i[0].s[2] = 2;
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c b/gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c
index b9fc9b172fe..23608b3cf0a 100644
--- a/gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c
+++ b/gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c
@@ -1,7 +1,9 @@
/* { dg-do run } */
/* { dg-options "-O -msse" } */
+/* { dg-require-effective-target sse } */
#include "isa-check.h"
+#include "sse-os-support.h"
typedef float S;
typedef float V __attribute__((vector_size(16)));
@@ -26,6 +28,11 @@ extern int memcmp (const void *, const void *, __SIZE_TYPE__);
int main()
{
+ check_isa ();
+
+ if (!sse_os_support ())
+ exit (0);
+
i[0].s[0] = 0;
i[0].s[1] = 1;
i[0].s[2] = 2;
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c b/gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c
index 61b0d5a80dd..a0d49874f99 100644
--- a/gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c
+++ b/gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c
@@ -27,6 +27,8 @@ extern int memcmp (const void *, const void *, __SIZE_TYPE__);
int main()
{
+ check_isa ();
+
i[0].s[0] = 0;
i[0].s[1] = 1;
i[0].s[2] = 2;
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v4si-1.c b/gcc/testsuite/gcc.target/i386/vperm-v4si-1.c
index 93c25c6826a..01b7c6fdab6 100644
--- a/gcc/testsuite/gcc.target/i386/vperm-v4si-1.c
+++ b/gcc/testsuite/gcc.target/i386/vperm-v4si-1.c
@@ -3,6 +3,7 @@
/* { dg-require-effective-target sse2 } */
#include "isa-check.h"
+#include "sse-os-support.h"
typedef int S;
typedef int V __attribute__((vector_size(16)));
@@ -27,6 +28,11 @@ extern int memcmp (const void *, const void *, __SIZE_TYPE__);
int main()
{
+ check_isa ();
+
+ if (!sse_os_support ())
+ exit (0);
+
i[0].s[0] = 0;
i[0].s[1] = 1;
i[0].s[2] = 2;
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v4si-2.c b/gcc/testsuite/gcc.target/i386/vperm-v4si-2.c
index d77146896e4..43f88ee0935 100644
--- a/gcc/testsuite/gcc.target/i386/vperm-v4si-2.c
+++ b/gcc/testsuite/gcc.target/i386/vperm-v4si-2.c
@@ -27,6 +27,8 @@ extern int memcmp (const void *, const void *, __SIZE_TYPE__);
int main()
{
+ check_isa ();
+
i[0].s[0] = 0;
i[0].s[1] = 1;
i[0].s[2] = 2;
diff --git a/gcc/testsuite/gcc.target/i386/wrfsbase-1.c b/gcc/testsuite/gcc.target/i386/wrfsbase-1.c
new file mode 100644
index 00000000000..4b849269bb2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/wrfsbase-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "wrfsbase\[ \t]+(%|)edi" } } */
+
+#include <immintrin.h>
+
+void
+write_fs_base32 (unsigned int base)
+{
+ _writefsbase_u32 (base);
+}
diff --git a/gcc/testsuite/gcc.target/i386/wrfsbase-2.c b/gcc/testsuite/gcc.target/i386/wrfsbase-2.c
new file mode 100644
index 00000000000..5e1762dfa3d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/wrfsbase-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "wrfsbase\[ \t]+(%|)rdi" } } */
+
+#include <immintrin.h>
+
+void
+write_fs_base64 (unsigned long long base)
+{
+ _writefsbase_u64 (base);
+}
diff --git a/gcc/testsuite/gcc.target/i386/wrgsbase-1.c b/gcc/testsuite/gcc.target/i386/wrgsbase-1.c
new file mode 100644
index 00000000000..15d2d7ffb9c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/wrgsbase-1.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "wrgsbase\[ \t]+(%|)edi" } } */
+
+#include <immintrin.h>
+
+void
+write_gs_base32 (unsigned int base)
+{
+ _writegsbase_u32 (base);
+}
diff --git a/gcc/testsuite/gcc.target/i386/wrgsbase-2.c b/gcc/testsuite/gcc.target/i386/wrgsbase-2.c
new file mode 100644
index 00000000000..0a33d770710
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/wrgsbase-2.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2 -mfsgsbase" } */
+/* { dg-final { scan-assembler "wrgsbase\[ \t]+(%|)rdi" } } */
+
+#include <immintrin.h>
+
+void
+write_gs_base64 (unsigned long long base)
+{
+ _writegsbase_u64 (base);
+}
diff --git a/gcc/testsuite/gcc.target/i386/xorps-sse2.c b/gcc/testsuite/gcc.target/i386/xorps-sse2.c
index 4d3994c88ef..3c268b4cbaa 100644
--- a/gcc/testsuite/gcc.target/i386/xorps-sse2.c
+++ b/gcc/testsuite/gcc.target/i386/xorps-sse2.c
@@ -1,7 +1,6 @@
/* Test that we generate xorps when the result is used in FP math. */
/* { dg-do compile } */
/* { dg-options "-O -msse2 -mno-sse3" } */
-/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "xorps\[ \t\]" { xfail *-*-* } } } */
/* { dg-final { scan-assembler-not "pxor" { xfail *-*-* } } } */
diff --git a/gcc/testsuite/gcc.target/i386/xorps.c b/gcc/testsuite/gcc.target/i386/xorps.c
index bc2e97d76d6..6803a4d8916 100644
--- a/gcc/testsuite/gcc.target/i386/xorps.c
+++ b/gcc/testsuite/gcc.target/i386/xorps.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-Os -msse2" } */
-/* { dg-require-effective-target sse2 } */
typedef float __m128 __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/m68k/pr45015.c b/gcc/testsuite/gcc.target/m68k/pr45015.c
new file mode 100644
index 00000000000..fba9550e9ef
--- /dev/null
+++ b/gcc/testsuite/gcc.target/m68k/pr45015.c
@@ -0,0 +1,26 @@
+/* PR debug/45015 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g" } */
+
+unsigned int
+foo (unsigned int *x, const unsigned int *y, int z, unsigned int w)
+{
+ unsigned int a, b, c, s;
+ int j;
+ j = -z;
+ x -= j;
+ y -= j;
+ a = 0;
+ do
+ {
+ __asm__ ("move.l %2, %0; move.l %3, %1" : "=d" (b), "=d" (c) : "g<>" (y[j]), "d" (w));
+ c += a;
+ a = (c < a) + b;
+ s = x[j];
+ c = s + c;
+ a += (c < s);
+ x[j] = c;
+ }
+ while (++j != 0);
+ return a;
+}
diff --git a/gcc/testsuite/gcc.target/mips/cache-1.c b/gcc/testsuite/gcc.target/mips/cache-1.c
index 05cb4079157..da897066d49 100644
--- a/gcc/testsuite/gcc.target/mips/cache-1.c
+++ b/gcc/testsuite/gcc.target/mips/cache-1.c
@@ -26,5 +26,5 @@ f4 (const volatile unsigned char *area)
/* { dg-final { scan-assembler "\tcache\t0x14,0\\(\\\$4\\)" } } */
/* { dg-final { scan-assembler "\tcache\t0x18,20\\(\\\$4\\)" } } */
-/* { dg-final { scan-assembler "\tcache\t0x0,0\\(\\\$.\\)" } } */
+/* { dg-final { scan-assembler "\tcache\t(0x|)0,0\\(\\\$.\\)" } } */
/* { dg-final { scan-assembler "\tcache\t0x4,-80\\(\\\$4\\)" } } */
diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp
index 02e031cd15c..0a7bc1de8dd 100644
--- a/gcc/testsuite/gcc.target/mips/mips.exp
+++ b/gcc/testsuite/gcc.target/mips/mips.exp
@@ -233,7 +233,7 @@ set mips_option_groups {
fp "-mfp(32|64)"
gp "-mgp(32|64)"
long "-mlong(32|64)"
- mips16 "-mips16|-mno-mips16"
+ mips16 "-mips16|-mno-mips16|-mflip-mips16"
mips3d "-mips3d|-mno-mips3d"
optimization "-O(|[0-3s])"
pic "-f(no-|)(pic|PIC)"
@@ -509,6 +509,14 @@ proc mips_have_option_p { upstatus option } {
$option]
}
+# Return true if the options described by UPSTATUS require MIPS16 support.
+proc mips_using_mips16_p { upstatus } {
+ upvar $upstatus status
+
+ return [expr { [mips_have_option_p status "-mips16"]
+ || [mips_have_option_p status "-mflip-mips16"] }]
+}
+
# Return true if the test described by UPSTATUS requires option OPTION.
proc mips_have_test_option_p { upstatus option } {
upvar $upstatus status
@@ -763,7 +771,7 @@ proc mips-dg-finish {} {
#
# START END
# | |
-# -mips16 -mno-mips16
+# -mips16/-mflip-mips16 -mno-mips16
# | |
# -mips3d -mno-mips3d
# | |
@@ -1011,7 +1019,7 @@ proc mips-dg-options { args } {
# EABI doesn't support -mabicalls.
# EABI doesn't support the combination -mgp32 -mfp64.
set force_abi 1
- } elseif { [mips_have_option_p options "-mips16"]
+ } elseif { [mips_using_mips16_p options]
&& ![mips_same_option_p $abi "-mabi=32"]
&& ![mips_same_option_p $abi "-mabi=o64"]
&& (![mips_have_option_p options "addressing=absolute"]
@@ -1048,7 +1056,7 @@ proc mips-dg-options { args } {
mips_make_test_option options "-mfp32"
}
}
- if { [mips_have_option_p options "-mips16"]
+ if { [mips_using_mips16_p options]
&& ![mips_same_option_p $abi "-mabi=32"]
&& ![mips_same_option_p $abi "-mabi=o64"]
&& (![mips_have_option_p options "addressing=absolute"]
diff --git a/gcc/testsuite/gcc.target/mips/mips16-attributes-4.c b/gcc/testsuite/gcc.target/mips/mips16-attributes-4.c
new file mode 100644
index 00000000000..de7cb4349b7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/mips16-attributes-4.c
@@ -0,0 +1,17 @@
+/* { dg-do run } */
+/* { dg-options "(-mips16)" } */
+
+extern void abort (void);
+
+__complex float f = { -1.0 + -1.0i };
+__complex float __attribute__((nomips16)) foo (void) { return f; }
+__complex float (*volatile foop) (void) = foo;
+__complex float __attribute__((mips16, noinline)) bar (void) { return foop (); }
+
+int
+main (void)
+{
+ if (bar () != f)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c b/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c
index 594ec88b4e7..a2aa111459e 100644
--- a/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c
+++ b/gcc/testsuite/gcc.target/powerpc/altivec-volatile.c
@@ -8,6 +8,6 @@
vector float *f (volatile vector float *a)
{
- return a; /* { dg-warning "discards qualifiers" } */
+ return a; /* { dg-warning "discards 'volatile' qualifier" } */
}
diff --git a/gcc/testsuite/gcc.target/powerpc/block-move-1.c b/gcc/testsuite/gcc.target/powerpc/block-move-1.c
new file mode 100644
index 00000000000..7b6623fbe51
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/block-move-1.c
@@ -0,0 +1,14 @@
+/* Test that we bump up low values of -mblock-move-inline-limit */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mblock-move-inline-limit=8" } */
+
+typedef __SIZE_TYPE__ size_t;
+extern void *memcpy (void *, const void *, size_t);
+
+void
+cpy16 (void *x, void *y)
+{
+ memcpy (x, y, 16);
+}
+
+/* { dg-final { scan-assembler-not "memcpy" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/block-move-2.c b/gcc/testsuite/gcc.target/powerpc/block-move-2.c
new file mode 100644
index 00000000000..ffaf9ef05e8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/block-move-2.c
@@ -0,0 +1,14 @@
+/* Test that we honor -mblock-move-inline-limit. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mblock-move-inline-limit=128" } */
+
+typedef __SIZE_TYPE__ size_t;
+extern void *memcpy (void *, const void *, size_t);
+
+void
+cpy128 (void *x, void *y)
+{
+ memcpy (x, y, 128);
+}
+
+/* { dg-final { scan-assembler-not "memcpy" } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c b/gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c
index 3d9afb25aa7..8efaeaba38a 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppu-intrinsics.c
@@ -1,5 +1,5 @@
/* { dg-do link { target { *-*-linux* && powerpc_fprs } } } */
-/* { dg-options "-W -Wall -Wno-uninitialized -mcpu=cell" } */
+/* { dg-options "-W -Wall -Wno-uninitialized -Wno-unused-but-set-variable -mcpu=cell" } */
/* Test some PPU intrinsics from <ppu_intrinsics.h>. */
#include <ppu_intrinsics.h>
diff --git a/gcc/testsuite/gcc.target/powerpc/recip-1.c b/gcc/testsuite/gcc.target/powerpc/recip-1.c
index d1e383dc4ea..590881bb892 100644
--- a/gcc/testsuite/gcc.target/powerpc/recip-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/recip-1.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-do compile { target { { powerpc*-*-* } && { ! powerpc*-apple-darwin* } } } } */
/* { dg-options "-O2 -mrecip -ffast-math -mcpu=power6" } */
/* { dg-final { scan-assembler-times "frsqrte" 2 } } */
/* { dg-final { scan-assembler-times "fmsub" 2 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/recip-2.c b/gcc/testsuite/gcc.target/powerpc/recip-2.c
index 69442733aab..3e64c07578f 100644
--- a/gcc/testsuite/gcc.target/powerpc/recip-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/recip-2.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-do compile { target { { powerpc*-*-* } && { ! powerpc*-apple-darwin* } } } } */
/* { dg-options "-O2 -mrecip -ffast-math -mcpu=power5" } */
/* { dg-final { scan-assembler-times "frsqrtes" 1 } } */
/* { dg-final { scan-assembler-times "fmsubs" 1 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/recip-3.c b/gcc/testsuite/gcc.target/powerpc/recip-3.c
index 80a34e8ee59..c5ce539bb42 100644
--- a/gcc/testsuite/gcc.target/powerpc/recip-3.c
+++ b/gcc/testsuite/gcc.target/powerpc/recip-3.c
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-do compile { target { { powerpc*-*-* } && { ! powerpc*-apple-darwin* } } } } */
/* { dg-options "-O2 -mrecip -ffast-math -mcpu=power7" } */
/* { dg-final { scan-assembler-times "xsrsqrtedp" 1 } } */
/* { dg-final { scan-assembler-times "xsmsub.dp" 1 } } */
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s b/gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s
index 5a7c91be6ee..b3b88466a62 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s
+++ b/gcc/testsuite/gcc.target/x86_64/abi/asm-support-darwin.s
@@ -22,20 +22,20 @@ _snapshot:
movq %r15, _r15(%rip)
movdqu %xmm0, _xmm_regs+0(%rip)
movdqu %xmm1, _xmm_regs+16(%rip)
- movdqu %xmm2, _xmm_regs+16*2(%rip)
- movdqu %xmm3, _xmm_regs+16*3(%rip)
- movdqu %xmm4, _xmm_regs+16*4(%rip)
- movdqu %xmm5, _xmm_regs+16*5(%rip)
- movdqu %xmm6, _xmm_regs+16*6(%rip)
- movdqu %xmm7, _xmm_regs+16*7(%rip)
- movdqu %xmm8, _xmm_regs+16*8(%rip)
- movdqu %xmm9, _xmm_regs+16*9(%rip)
- movdqu %xmm10, _xmm_regs+16*10(%rip)
- movdqu %xmm11, _xmm_regs+16*11(%rip)
- movdqu %xmm12, _xmm_regs+16*12(%rip)
- movdqu %xmm13, _xmm_regs+16*13(%rip)
- movdqu %xmm14, _xmm_regs+16*14(%rip)
- movdqu %xmm15, _xmm_regs+16*15(%rip)
+ movdqu %xmm2, _xmm_regs+32(%rip)
+ movdqu %xmm3, _xmm_regs+48(%rip)
+ movdqu %xmm4, _xmm_regs+64(%rip)
+ movdqu %xmm5, _xmm_regs+80(%rip)
+ movdqu %xmm6, _xmm_regs+96(%rip)
+ movdqu %xmm7, _xmm_regs+112(%rip)
+ movdqu %xmm8, _xmm_regs+128(%rip)
+ movdqu %xmm9, _xmm_regs+144(%rip)
+ movdqu %xmm10, _xmm_regs+160(%rip)
+ movdqu %xmm11, _xmm_regs+176(%rip)
+ movdqu %xmm12, _xmm_regs+192(%rip)
+ movdqu %xmm13, _xmm_regs+208(%rip)
+ movdqu %xmm14, _xmm_regs+224(%rip)
+ movdqu %xmm15, _xmm_regs+240(%rip)
jmp *_callthis(%rip)
.LFE3:
.p2align 4,,15
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S
index cb1e31ea785..8e0bffe8b49 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S
+++ b/gcc/testsuite/gcc.target/x86_64/abi/asm-support.S
@@ -26,20 +26,20 @@ snapshot:
movq %r15, r15(%rip)
movdqu %xmm0, xmm_regs+0(%rip)
movdqu %xmm1, xmm_regs+16(%rip)
- movdqu %xmm2, xmm_regs+16*2(%rip)
- movdqu %xmm3, xmm_regs+16*3(%rip)
- movdqu %xmm4, xmm_regs+16*4(%rip)
- movdqu %xmm5, xmm_regs+16*5(%rip)
- movdqu %xmm6, xmm_regs+16*6(%rip)
- movdqu %xmm7, xmm_regs+16*7(%rip)
- movdqu %xmm8, xmm_regs+16*8(%rip)
- movdqu %xmm9, xmm_regs+16*9(%rip)
- movdqu %xmm10, xmm_regs+16*10(%rip)
- movdqu %xmm11, xmm_regs+16*11(%rip)
- movdqu %xmm12, xmm_regs+16*12(%rip)
- movdqu %xmm13, xmm_regs+16*13(%rip)
- movdqu %xmm14, xmm_regs+16*14(%rip)
- movdqu %xmm15, xmm_regs+16*15(%rip)
+ movdqu %xmm2, xmm_regs+32(%rip)
+ movdqu %xmm3, xmm_regs+48(%rip)
+ movdqu %xmm4, xmm_regs+64(%rip)
+ movdqu %xmm5, xmm_regs+80(%rip)
+ movdqu %xmm6, xmm_regs+96(%rip)
+ movdqu %xmm7, xmm_regs+112(%rip)
+ movdqu %xmm8, xmm_regs+128(%rip)
+ movdqu %xmm9, xmm_regs+144(%rip)
+ movdqu %xmm10, xmm_regs+160(%rip)
+ movdqu %xmm11, xmm_regs+176(%rip)
+ movdqu %xmm12, xmm_regs+192(%rip)
+ movdqu %xmm13, xmm_regs+208(%rip)
+ movdqu %xmm14, xmm_regs+224(%rip)
+ movdqu %xmm15, xmm_regs+240(%rip)
jmp *callthis(%rip)
.LFE3:
.size snapshot, .-snapshot
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S b/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S
index a4d002e19e4..d248ef02e84 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S
+++ b/gcc/testsuite/gcc.target/x86_64/abi/avx/asm-support.S
@@ -23,20 +23,20 @@ snapshot:
movq %r15, r15(%rip)
vmovdqu %ymm0, ymm_regs+0(%rip)
vmovdqu %ymm1, ymm_regs+32(%rip)
- vmovdqu %ymm2, ymm_regs+32*2(%rip)
- vmovdqu %ymm3, ymm_regs+32*3(%rip)
- vmovdqu %ymm4, ymm_regs+32*4(%rip)
- vmovdqu %ymm5, ymm_regs+32*5(%rip)
- vmovdqu %ymm6, ymm_regs+32*6(%rip)
- vmovdqu %ymm7, ymm_regs+32*7(%rip)
- vmovdqu %ymm8, ymm_regs+32*8(%rip)
- vmovdqu %ymm9, ymm_regs+32*9(%rip)
- vmovdqu %ymm10, ymm_regs+32*10(%rip)
- vmovdqu %ymm11, ymm_regs+32*11(%rip)
- vmovdqu %ymm12, ymm_regs+32*12(%rip)
- vmovdqu %ymm13, ymm_regs+32*13(%rip)
- vmovdqu %ymm14, ymm_regs+32*14(%rip)
- vmovdqu %ymm15, ymm_regs+32*15(%rip)
+ vmovdqu %ymm2, ymm_regs+64(%rip)
+ vmovdqu %ymm3, ymm_regs+96(%rip)
+ vmovdqu %ymm4, ymm_regs+128(%rip)
+ vmovdqu %ymm5, ymm_regs+160(%rip)
+ vmovdqu %ymm6, ymm_regs+192(%rip)
+ vmovdqu %ymm7, ymm_regs+224(%rip)
+ vmovdqu %ymm8, ymm_regs+256(%rip)
+ vmovdqu %ymm9, ymm_regs+288(%rip)
+ vmovdqu %ymm10, ymm_regs+320(%rip)
+ vmovdqu %ymm11, ymm_regs+352(%rip)
+ vmovdqu %ymm12, ymm_regs+384(%rip)
+ vmovdqu %ymm13, ymm_regs+416(%rip)
+ vmovdqu %ymm14, ymm_regs+448(%rip)
+ vmovdqu %ymm15, ymm_regs+480(%rip)
jmp *callthis(%rip)
.LFE3:
.size snapshot, .-snapshot
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/avx/avx-check.h b/gcc/testsuite/gcc.target/x86_64/abi/avx/avx-check.h
index 7f1f8f9fc5c..e66a27e9afd 100644
--- a/gcc/testsuite/gcc.target/x86_64/abi/avx/avx-check.h
+++ b/gcc/testsuite/gcc.target/x86_64/abi/avx/avx-check.h
@@ -12,7 +12,7 @@ main ()
return 0;
/* Run AVX test only if host has AVX support. */
- if (ecx & bit_AVX)
+ if ((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE))
{
avx_test ();
#ifdef DEBUG
diff --git a/gcc/testsuite/gfortran.dg/aliasing_dummy_5.f90 b/gcc/testsuite/gfortran.dg/aliasing_dummy_5.f90
new file mode 100644
index 00000000000..379fbd7f8f9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/aliasing_dummy_5.f90
@@ -0,0 +1,55 @@
+! { dg-do run }
+!
+! PR fortran/45019
+!
+! Check that the compiler knows that
+! "arg" and "arr" can alias.
+!
+MODULE m
+ IMPLICIT NONE
+ INTEGER, TARGET :: arr(3)
+CONTAINS
+ SUBROUTINE foobar (arg)
+ INTEGER, TARGET :: arg(:)
+ arr(2:3) = arg(1:2)
+ END SUBROUTINE foobar
+END MODULE m
+
+PROGRAM main
+ USE m
+ IMPLICIT NONE
+ arr = (/ 1, 2, 3 /)
+ CALL bar(arr)
+ if (any (arr /= (/ 1, 1, 2 /))) call abort()
+ CALL test()
+contains
+ subroutine bar(x)
+ INTEGER, TARGET :: x(:)
+ CALL foobar (x)
+ end subroutine bar
+END PROGRAM main
+
+MODULE m2
+ IMPLICIT NONE
+ INTEGER, TARGET :: arr(3)
+CONTAINS
+ SUBROUTINE foobar (arg)
+ INTEGER, TARGET :: arg(:)
+ arr(1) = 5
+ arg(1) = 6
+ if (arr(1) == 5) call abort()
+ END SUBROUTINE foobar
+END MODULE m2
+subroutine test
+ USE m2
+ IMPLICIT NONE
+ arr = (/ 1, 2, 3 /)
+ CALL bar(arr)
+contains
+ subroutine bar(x)
+ INTEGER, TARGET :: x(:)
+ CALL foobar (x)
+ end subroutine bar
+END subroutine test
+
+! { dg-final { cleanup-modules "m m2" } }
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/c_loc_tests_15.f90 b/gcc/testsuite/gfortran.dg/c_loc_tests_15.f90
new file mode 100644
index 00000000000..63f8816379e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/c_loc_tests_15.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR 44925: [OOP] C_LOC with CLASS pointer
+!
+! Contributed by Barron Bichon <barron.bichon@swri.org>
+
+ use iso_c_binding
+
+ type :: t
+ end type t
+
+ type(c_ptr) :: tt_cptr
+ class(t), pointer :: tt_fptr
+ if (associated(tt_fptr)) tt_cptr = c_loc(tt_fptr) ! { dg-error "must not be polymorphic" }
+
+end
diff --git a/gcc/testsuite/gfortran.dg/c_sizeof_1.f90 b/gcc/testsuite/gfortran.dg/c_sizeof_1.f90
index f2a5caf6864..b30bdc5285e 100644
--- a/gcc/testsuite/gfortran.dg/c_sizeof_1.f90
+++ b/gcc/testsuite/gfortran.dg/c_sizeof_1.f90
@@ -1,8 +1,12 @@
! { dg-do run }
! Support F2008's c_sizeof()
!
-integer(4) :: i, j(10)
-character(4),parameter :: str(1) = "abcd"
+use iso_c_binding, only: c_int, c_char, c_ptr, c_intptr_t, c_null_ptr
+
+integer(kind=c_int) :: i, j(10)
+character(kind=c_char,len=4),parameter :: str(1) = "abcd"
+type(c_ptr) :: cptr
+integer(c_intptr_t) :: iptr
! Using F2008's C_SIZEOF
i = c_sizeof(i)
@@ -18,9 +22,10 @@ i = c_sizeof(str(1))
if (i /= 4) call abort()
i = c_sizeof(str(1)(1:3))
-print *, i
if (i /= 3) call abort()
+write(*,*) c_sizeof(cptr), c_sizeof(iptr), c_sizeof(C_NULL_PTR)
+
! Using GNU's SIZEOF
i = sizeof(i)
if (i /= 4) call abort()
@@ -36,5 +41,6 @@ if (i /= 4) call abort()
i = sizeof(str(1)(1:3))
if (i /= 3) call abort()
+
end
diff --git a/gcc/testsuite/gfortran.dg/char4_iunit_1.f03 b/gcc/testsuite/gfortran.dg/char4_iunit_1.f03
new file mode 100644
index 00000000000..98e5cdd070c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/char4_iunit_1.f03
@@ -0,0 +1,32 @@
+! { dg-do run }
+! PR37077 Implement Internal Unit I/O for character KIND=4
+! Test case prepared by Jerry DeLisle <jvdelisle@gcc.gnu.org>
+program char4_iunit_1
+ implicit none
+ character(kind=4,len=42) :: string
+ integer(kind=4) :: i,j
+ real(kind=4) :: inf, nan, large
+
+ large = huge(large)
+ inf = 2 * large
+ nan = 0
+ nan = nan / nan
+
+ string = 4_"123456789x"
+ write(string,'(a11)') 4_"abcdefg"
+ if (string .ne. 4_" abcdefg ") call abort
+ write(string,*) 12345
+ if (string .ne. 4_" 12345 ") call abort
+ write(string, '(i6,5x,i8,a5)') 78932, 123456, "abc"
+ if (string .ne. 4_" 78932 123456 abc ") call abort
+ write(string, *) .true., .false. , .true.
+ if (string .ne. 4_" T F T ") call abort
+ write(string, *) 1.2345e-06, 4.2846e+10_8
+ if (string .ne. 4_" 1.23450002E-06 42846000000.000000 ") call abort
+ write(string, *) nan, inf
+ if (string .ne. 4_" NaN +Infinity ") call abort
+ write(string, '(10x,f3.1,3x,f9.1)') nan, inf
+ if (string .ne. 4_" NaN +Infinity ") call abort
+ write(string, *) (1.2, 3.4 )
+ if (string .ne. 4_" ( 1.2000000 , 3.4000001 ) ") call abort
+end program char4_iunit_1
diff --git a/gcc/testsuite/gfortran.dg/char4_iunit_2.f03 b/gcc/testsuite/gfortran.dg/char4_iunit_2.f03
new file mode 100644
index 00000000000..074321274ca
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/char4_iunit_2.f03
@@ -0,0 +1,47 @@
+! { dg-do run }
+! PR37077 Implement Internal Unit I/O for character KIND=4
+! Test case prepared by Jerry DeLisle <jvdelisle@gcc.gnu.org>
+program char4_iunit_2
+ implicit none
+ integer, parameter :: k = 4
+ character(kind=4,len=80) :: widestring, str_char4
+ character(kind=1,len=80) :: skinnystring
+ integer :: i,j
+ real :: x
+ character(9) :: str_default
+
+ widestring = k_"12345 2.54360 hijklmnop qwertyuiopasdfg"
+ skinnystring = "12345 2.54360 hijklmnop qwertyuiopasdfg"
+ i = 77777
+ x = 0.0
+ str_default = "xxxxxxxxx"
+ str_char4 = k_"xyzzy"
+ read(widestring,'(i5,1x,f7.5,1x,a9,1x,a15)') i, x, str_default, str_char4
+ if (i /= 12345 .or. (x - 2.5436001) > epsilon(x) .or. &
+ str_default /= "hijklmnop" .or. str_char4 /= k_"qwertyuiopasdfg")&
+ call abort
+ i = 77777
+ x = 0.0
+ str_default = "xxxxxxxxx"
+ str_char4 = k_"xyzzy"
+ read(widestring,'(2x,i4,tl3,1x,f7.5,1x,a9,1x,a15)')i, x, str_default,&
+ str_char4
+ if (i /= 345 .or. (x - 52.542999) > epsilon(x) .or. &
+ str_default /= "0 hijklmn" .or. str_char4 /= k_"p qwertyuiopasd")&
+ call abort
+ read(skinnystring,'(2x,i4,tl3,1x,f7.5,1x,a9,1x,a15)')i, x, str_default,&
+ str_char4
+ if (i /= 345 .or. (x - 52.542999) > epsilon(x) .or. &
+ str_default /= "0 hijklmn" .or. str_char4 /= k_"p qwertyuiopasd")&
+ call abort
+ write(widestring,'(2x,i4,tl3,1x,f10.5,1x,a9,1x,a15)')i, x, str_default,&
+ trim(str_char4)
+ if (widestring .ne. k_" 3 52.54300 0 hijklmn p qwertyuiopasd") call abort
+ write(skinnystring,'(2x,i4,tl3,1x,f10.5,1x,a9,1x,a15)')i, x, str_default,&
+ trim(str_char4)
+ if (skinnystring .ne. " 3 52.54300 0 hijklmn p qwertyuiopasd") call abort
+ write(widestring,*)"test",i, x, str_default,&
+ trim(str_char4)
+ if (widestring .ne. &
+ k_" test 345 52.542999 0 hijklmnp qwertyuiopasd") call abort
+end program char4_iunit_2
diff --git a/gcc/testsuite/gfortran.dg/char_bounds_check_fail_1.f90 b/gcc/testsuite/gfortran.dg/char_bounds_check_fail_1.f90
index bd5552c0ea6..15d70215020 100644
--- a/gcc/testsuite/gfortran.dg/char_bounds_check_fail_1.f90
+++ b/gcc/testsuite/gfortran.dg/char_bounds_check_fail_1.f90
@@ -10,4 +10,4 @@ program bound_check
zz(i:j) = 'abcdef'
print * , zz
end
-! { dg-output "Substring out of bounds: upper bound exceeds string length.*at line 9)}
+! { dg-output "At line 10.*Substring out of bounds: upper bound \\(11\\) of 'zz' exceeds string length" }
diff --git a/gcc/testsuite/gfortran.dg/class_24.f03 b/gcc/testsuite/gfortran.dg/class_24.f03
new file mode 100644
index 00000000000..085e6d1e1ce
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_24.f03
@@ -0,0 +1,22 @@
+! { dg-do compile }
+!
+! PR 44869: [OOP] Missing TARGET check - and wrong code or accepts-invalid?
+!
+! Contributed by Satish.BD <bdsatish@gmail.com>
+
+ type :: test_case
+ end type
+
+ type :: test_suite
+ type(test_case) :: list
+ end type
+
+contains
+
+ subroutine sub(self)
+ class(test_suite), intent(inout) :: self
+ type(test_case), pointer :: tst_case
+ tst_case => self%list ! { dg-error "is neither TARGET nor POINTER" }
+ end subroutine
+
+end
diff --git a/gcc/testsuite/gfortran.dg/class_defined_operator_1.f03 b/gcc/testsuite/gfortran.dg/class_defined_operator_1.f03
new file mode 100644
index 00000000000..008739e3f98
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_defined_operator_1.f03
@@ -0,0 +1,102 @@
+! { dg-do run }
+! Test the fix for PR42385, in which CLASS defined operators
+! compiled but were not correctly dynamically dispatched.
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+!
+module foo_module
+ implicit none
+ private
+ public :: foo
+
+ type :: foo
+ integer :: foo_x
+ contains
+ procedure :: times => times_foo
+ procedure :: assign => assign_foo
+ generic :: operator(*) => times
+ generic :: assignment(=) => assign
+ end type
+
+contains
+
+ function times_foo(this,factor) result(product)
+ class(foo) ,intent(in) :: this
+ class(foo) ,allocatable :: product
+ integer, intent(in) :: factor
+ allocate (product, source = this)
+ product%foo_x = -product%foo_x * factor
+ end function
+
+ subroutine assign_foo(lhs,rhs)
+ class(foo) ,intent(inout) :: lhs
+ class(foo) ,intent(in) :: rhs
+ lhs%foo_x = -rhs%foo_x
+ end subroutine
+
+end module
+
+module bar_module
+ use foo_module ,only : foo
+ implicit none
+ private
+ public :: bar
+
+ type ,extends(foo) :: bar
+ integer :: bar_x
+ contains
+ procedure :: times => times_bar
+ procedure :: assign => assign_bar
+ end type
+
+contains
+ subroutine assign_bar(lhs,rhs)
+ class(bar) ,intent(inout) :: lhs
+ class(foo) ,intent(in) :: rhs
+ select type(rhs)
+ type is (bar)
+ lhs%bar_x = rhs%bar_x
+ lhs%foo_x = -rhs%foo_x
+ end select
+ end subroutine
+ function times_bar(this,factor) result(product)
+ class(bar) ,intent(in) :: this
+ integer, intent(in) :: factor
+ class(foo), allocatable :: product
+ select type(this)
+ type is (bar)
+ allocate(product,source=this)
+ select type(product)
+ type is(bar)
+ product%bar_x = 2*this%bar_x*factor
+ end select
+ end select
+ end function
+end module
+
+program main
+ use foo_module ,only : foo
+ use bar_module ,only : bar
+ implicit none
+ type(foo) :: unitf
+ type(bar) :: unitb
+
+! foo's assign negates, whilst its '*' negates and mutliplies.
+ unitf%foo_x = 1
+ call rescale(unitf, 42)
+ if (unitf%foo_x .ne. 42) call abort
+
+! bar's assign negates foo_x, whilst its '*' copies foo_x
+! and does a multiply by twice factor.
+ unitb%foo_x = 1
+ unitb%bar_x = 2
+ call rescale(unitb, 3)
+ if (unitb%bar_x .ne. 12) call abort
+ if (unitb%foo_x .ne. -1) call abort
+contains
+ subroutine rescale(this,scale)
+ class(foo) ,intent(inout) :: this
+ integer, intent(in) :: scale
+ this = this*scale
+ end subroutine
+end program
diff --git a/gcc/testsuite/gfortran.dg/coarray_10.f90 b/gcc/testsuite/gfortran.dg/coarray_10.f90
index 7a50c89fc3c..6ee425d7bf9 100644
--- a/gcc/testsuite/gfortran.dg/coarray_10.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_10.f90
@@ -24,5 +24,23 @@ subroutine this_image_check()
j = this_image(dim=3) ! { dg-error "DIM argument without ARRAY argument" }
i = image_index(i, [ 1 ]) ! { dg-error "Expected coarray variable" }
i = image_index(z, 2) ! { dg-error "must be a rank one array" }
-
end subroutine this_image_check
+
+
+subroutine rank_mismatch()
+ implicit none
+ integer,allocatable :: A(:)[:,:,:,:]
+ allocate(A(1)[1,1,1:*]) ! { dg-error "Unexpected ... for codimension" }
+ allocate(A(1)[1,1,1,1,1,*]) ! { dg-error "Invalid codimension 5" }
+ allocate(A(1)[1,1,1,*])
+ allocate(A(1)[1,1]) ! { dg-error "Too few codimensions" }
+ allocate(A(1)[1,*]) ! { dg-error "Too few codimensions" }
+ allocate(A(1)[1,1:*]) ! { dg-error "Unexpected ... for codimension" }
+
+ A(1)[1,1,1] = 1 ! { dg-error "Too few codimensions" }
+ A(1)[1,1,1,1,1,1] = 1 ! { dg-error "Invalid codimension 5" }
+ A(1)[1,1,1,1] = 1
+ A(1)[1,1] = 1 ! { dg-error "Too few codimensions" }
+ A(1)[1,1] = 1 ! { dg-error "Too few codimensions" }
+ A(1)[1,1:1] = 1 ! { dg-error "Too few codimensions" }
+end subroutine rank_mismatch
diff --git a/gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90 b/gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
index 688c38d9192..0aa2e4e1c18 100644
--- a/gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
+++ b/gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
@@ -1,4 +1,4 @@
-! { dg-compile }
+! { dg-do compile }
!
! gfortran was ICEing for the constructor of
! componentfree types.
diff --git a/gcc/testsuite/gfortran.dg/dim_range_1.f90 b/gcc/testsuite/gfortran.dg/dim_range_1.f90
new file mode 100644
index 00000000000..59f3f431143
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dim_range_1.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! PR 44693 - check for invalid dim even in functions.
+! Based on a test case by Dominique d'Humieres.
+subroutine test1(esss,Ix,Iyz, n)
+ real(kind=kind(1.0d0)), dimension(n), intent(out) :: esss
+ real(kind=kind(1.0d0)), dimension(n,n,n) :: sp
+ real(kind=kind(1.0d0)), dimension(n,n) :: Ix,Iyz
+ esss = sum(Ix * Iyz, 0) ! { dg-error "is not a valid dimension index" }
+ esss = sum(Ix * Iyz, 1)
+ esss = sum(Ix * Iyz, 2)
+ esss = sum(Ix * Iyz, 3) ! { dg-error "is not a valid dimension index" }
+ sp = spread (ix * iyz, 0, n) ! { dg-error "is not a valid dimension index" }
+ sp = spread (ix * iyz, 1, n)
+ sp = spread (ix * iyz, 2, n)
+ sp = spread (ix * iyz, 3, n)
+ sp = spread (ix * iyz, 4, n) ! { dg-error "is not a valid dimension index" }
+end subroutine
diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_1.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_1.f03
index 4854b0ff08d..2182dce3e4f 100644
--- a/gcc/testsuite/gfortran.dg/dynamic_dispatch_1.f03
+++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_1.f03
@@ -12,16 +12,14 @@ module m
procedure, pass :: make_integer
procedure, pass :: prod => i_m_j
generic, public :: extract => real, make_integer
- generic, public :: base_extract => real, make_integer
end type t1
type, extends(t1) :: t2
integer :: j = 99
contains
procedure, pass :: real => make_real2
- procedure, pass :: make_integer_2
+ procedure, pass :: make_integer => make_integer_2
procedure, pass :: prod => i_m_j_2
- generic, public :: extract => real, make_integer_2
end type t2
contains
real function make_real (arg)
@@ -69,16 +67,13 @@ end module m
if (a%real() .ne. real (42)) call abort
if (a%prod() .ne. 42) call abort
if (a%extract (2) .ne. 84) call abort
- if (a%base_extract (2) .ne. 84) call abort
a => c ! extension in module
if (a%real() .ne. real (99)) call abort
if (a%prod() .ne. 99) call abort
if (a%extract (3) .ne. 297) call abort
- if (a%base_extract (3) .ne. 126) call abort
a => d ! extension in main
if (a%real() .ne. real (42)) call abort
if (a%prod() .ne. 42) call abort
if (a%extract (4) .ne. 168) call abort
- if (a%base_extract (4) .ne. 168) call abort
end
! { dg-final { cleanup-modules "m" } }
diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_2.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_2.f03
index 989a2e0d3f0..95ce8372325 100644
--- a/gcc/testsuite/gfortran.dg/dynamic_dispatch_2.f03
+++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_2.f03
@@ -12,16 +12,14 @@ module m
procedure, pass :: make_integer
procedure, pass :: prod => i_m_j
generic, public :: extract => real, make_integer
- generic, public :: base_extract => real, make_integer
end type t1
type, extends(t1) :: t2
integer :: j = 99
contains
procedure, pass :: real => make_real2
- procedure, pass :: make_integer_2
+ procedure, pass :: make_integer => make_integer_2
procedure, pass :: prod => i_m_j_2
- generic, public :: extract => real, make_integer_2
end type t2
contains
subroutine make_real (arg, arg2)
@@ -79,8 +77,6 @@ end module m
if (i .ne. 42) call abort
call a%extract (2, i)
if (i .ne. 84) call abort
- call a%base_extract (2, i)
- if (i .ne. 84) call abort
a => c ! extension in module
call a%real(r)
@@ -89,8 +85,6 @@ end module m
if (i .ne. 99) call abort
call a%extract (3, i)
if (i .ne. 297) call abort
- call a%base_extract (3, i)
- if (i .ne. 126) call abort
a => d ! extension in main
call a%real(r)
@@ -99,7 +93,5 @@ end module m
if (i .ne. 42) call abort
call a%extract (4, i)
if (i .ne. 168) call abort
- call a%extract (4, i)
- if (i .ne. 168) call abort
end
! { dg-final { cleanup-modules "m" } }
diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_3.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_3.f03
index aa8713ef4d4..884d3426039 100644
--- a/gcc/testsuite/gfortran.dg/dynamic_dispatch_3.f03
+++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_3.f03
@@ -15,7 +15,6 @@ module m1
procedure, pass :: make_integer
procedure, pass :: prod => i_m_j
generic, public :: extract => real, make_integer
- generic, public :: base_extract => real, make_integer
end type t1
contains
real function make_real (arg)
@@ -41,9 +40,8 @@ module m2
integer :: j = 99
contains
procedure, pass :: real => make_real2
- procedure, pass :: make_integer_2
+ procedure, pass :: make_integer => make_integer_2
procedure, pass :: prod => i_m_j_2
- generic, public :: extract => real, make_integer_2
end type t2
contains
real function make_real2 (arg)
@@ -76,16 +74,13 @@ end module m2
if (a%real() .ne. real (42)) call abort
if (a%prod() .ne. 42) call abort
if (a%extract (2) .ne. 84) call abort
- if (a%base_extract (2) .ne. 84) call abort
a => c ! extension in module m2
if (a%real() .ne. real (99)) call abort
if (a%prod() .ne. 99) call abort
if (a%extract (3) .ne. 297) call abort
- if (a%base_extract (3) .ne. 126) call abort
a => d ! extension in main
if (a%real() .ne. real (42)) call abort
if (a%prod() .ne. 42) call abort
if (a%extract (4) .ne. 168) call abort
- if (a%base_extract (4) .ne. 168) call abort
end
! { dg-final { cleanup-modules "m1, m2" } }
diff --git a/gcc/testsuite/gfortran.dg/endfile_2.f90 b/gcc/testsuite/gfortran.dg/endfile_2.f90
index ee911e89e9e..e91e80eb2aa 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/exit_1.f08 b/gcc/testsuite/gfortran.dg/exit_1.f08
new file mode 100644
index 00000000000..9ebc2eccb50
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/exit_1.f08
@@ -0,0 +1,50 @@
+! { dg-do run }
+! { dg-options "-std=f2008 -fall-intrinsics" }
+
+! PR fortran/44709
+! Check that exit and cycle from within a BLOCK works for loops as expected.
+
+! Contributed by Daniel Kraft, d@domob.eu.
+
+PROGRAM main
+ IMPLICIT NONE
+ INTEGER :: i
+
+ ! Simple exit without loop name.
+ DO
+ BLOCK
+ EXIT
+ END BLOCK
+ CALL abort ()
+ END DO
+
+ ! Cycle without loop name.
+ DO i = 1, 1
+ BLOCK
+ CYCLE
+ END BLOCK
+ CALL abort ()
+ END DO
+
+ ! Exit loop by name from within a BLOCK.
+ loop1: DO
+ DO
+ BLOCK
+ EXIT loop1
+ END BLOCK
+ CALL abort ()
+ END DO
+ CALL abort ()
+ END DO loop1
+
+ ! Cycle loop by name from within a BLOCK.
+ loop2: DO i = 1, 1
+ loop3: DO
+ BLOCK
+ CYCLE loop2
+ END BLOCK
+ CALL abort ()
+ END DO loop3
+ CALL abort ()
+ END DO loop2
+END PROGRAM main
diff --git a/gcc/testsuite/gfortran.dg/exit_2.f08 b/gcc/testsuite/gfortran.dg/exit_2.f08
new file mode 100644
index 00000000000..23e7009cbf8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/exit_2.f08
@@ -0,0 +1,31 @@
+! { dg-do compile }
+! { dg-options "-std=f2008" }
+
+! PR fortran/44709
+! Check that the resolving of loop names in parent namespaces introduced to
+! handle intermediate BLOCK's does not go too far and other sanity checks.
+
+! Contributed by Daniel Kraft, d@domob.eu.
+
+PROGRAM main
+ IMPLICIT NONE
+
+ EXIT ! { dg-error "is not within a loop" }
+ EXIT foobar ! { dg-error "is unknown" }
+ EXIT main ! { dg-error "is not a loop name" }
+
+ mainLoop: DO
+ CALL test ()
+ END DO mainLoop
+
+ otherLoop: DO
+ EXIT mainLoop ! { dg-error "is not within loop 'mainloop'" }
+ END DO otherLoop
+
+CONTAINS
+
+ SUBROUTINE test ()
+ EXIT mainLoop ! { dg-error "is unknown" }
+ END SUBROUTINE test
+
+END PROGRAM main
diff --git a/gcc/testsuite/gfortran.dg/ftell_3.f90 b/gcc/testsuite/gfortran.dg/ftell_3.f90
index c16afe8ed16..16875d812a8 100644
--- a/gcc/testsuite/gfortran.dg/ftell_3.f90
+++ b/gcc/testsuite/gfortran.dg/ftell_3.f90
@@ -3,9 +3,10 @@
! Contributed by Janne Blomqvist, Manfred Schwarb
! and Dominique d'Humieres.
program ftell_3
- integer :: i
+ integer :: i, j
+ character(1) :: ch
character(len=99) :: buffer
- open(10, form='formatted', status='scratch', position='rewind')
+ open(10, form='formatted', position='rewind')
write(10, '(a)') '123456'
write(10, '(a)') '789'
write(10, '(a)') 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
@@ -13,16 +14,29 @@ program ftell_3
rewind(10)
read(10, '(a)') buffer
call ftell(10, i)
- if(i /= 7) then
- call abort()
+! Expected: On '\n' systems: 7, on \r\n systems: 8
+ if(i /= 7 .and. i /= 8) then
+ call abort
end if
read(10,'(a)') buffer
if (trim(buffer) /= "789") then
call abort()
end if
- call ftell(10,i)
- if (i /= 11) then
- call abort()
- end if
+ call ftell(10,j)
close(10)
+ open(10, access="stream")
+! Expected: On '\n' systems: 11, on \r\n systems: 13
+ if (i == 7) then
+ read(10, pos=7) ch
+ if (ch /= char(10)) call abort
+ if (j /= 11) call abort
+ end if
+ if (i == 8) then
+ read(10, pos=7) ch
+ if (ch /= char(13)) call abort
+ read(10) ch
+ if (ch /= char(10)) call abort
+ if (j /= 13) call abort
+ end if
+ close(10, status="delete")
end program ftell_3
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr44847.f90 b/gcc/testsuite/gfortran.dg/gomp/pr44847.f90
new file mode 100644
index 00000000000..3da4311499e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/pr44847.f90
@@ -0,0 +1,86 @@
+! PR fortran/44847
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+subroutine pr44847_1
+ integer :: i, j
+!$omp parallel do collapse(2)
+l:do i = 1, 2
+ do j = 1, 2
+ cycle l ! { dg-error "CYCLE statement" }
+ end do
+ end do l
+end subroutine
+subroutine pr44847_2
+ integer :: i, j, k
+!$omp parallel do collapse(3)
+ do i = 1, 2
+ l:do j = 1, 2
+ do k = 1, 2
+ cycle l ! { dg-error "CYCLE statement" }
+ end do
+ end do l
+ end do
+end subroutine
+subroutine pr44847_3
+ integer :: i, j
+!$omp parallel do
+l:do i = 1, 2
+ do j = 1, 2
+ cycle l
+ end do
+ end do l
+end subroutine
+subroutine pr44847_4
+ integer :: i, j, k
+!$omp parallel do collapse(2)
+ do i = 1, 2
+ l:do j = 1, 2
+ do k = 1, 2
+ cycle l
+ end do
+ end do l
+ end do
+end subroutine
+subroutine pr44847_5
+ integer :: i, j
+!$omp parallel do collapse(2)
+l:do i = 1, 2
+ do j = 1, 2
+ exit l ! { dg-error "EXIT statement" }
+ end do
+ end do l
+end subroutine
+subroutine pr44847_6
+ integer :: i, j, k
+!$omp parallel do collapse(3)
+ do i = 1, 2
+ l:do j = 1, 2
+ do k = 1, 2
+ exit l ! { dg-error "EXIT statement" }
+ end do
+ end do l
+ end do
+end subroutine
+subroutine pr44847_7
+ integer :: i, j, k
+!$omp parallel do collapse(2)
+ do i = 1, 2
+ l:do j = 1, 2
+ do k = 1, 2
+ exit l ! { dg-error "EXIT statement" }
+ end do
+ end do l
+ end do
+end subroutine
+subroutine pr44847_8
+ integer :: i, j, k
+!$omp parallel do
+ do i = 1, 2
+ l:do j = 1, 2
+ do k = 1, 2
+ exit l
+ end do
+ end do l
+ end do
+end subroutine
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr42185.f90 b/gcc/testsuite/gfortran.dg/graphite/pr42185.f90
index d0e1b017879..6fa6e303677 100644
--- a/gcc/testsuite/gfortran.dg/graphite/pr42185.f90
+++ b/gcc/testsuite/gfortran.dg/graphite/pr42185.f90
@@ -1,4 +1,4 @@
-! { dg-compile }
+! { dg-do compile }
! { dg-options "-fgraphite -O -ffast-math" }
MODULE powell
diff --git a/gcc/testsuite/gfortran.dg/initialization_20.f90 b/gcc/testsuite/gfortran.dg/initialization_20.f90
index 47d552834ae..6af1a00a45d 100644
--- a/gcc/testsuite/gfortran.dg/initialization_20.f90
+++ b/gcc/testsuite/gfortran.dg/initialization_20.f90
@@ -6,5 +6,5 @@ program pr19925
integer j
integer, parameter :: n = 100000
integer, parameter :: i(n)=(/(j,j=1,n)/) ! { dg-error "number of elements" }
- print *, i(5)
+ print *, i(5) ! { dg-error "has no IMPLICIT type" }
end program pr19925
diff --git a/gcc/testsuite/gfortran.dg/initialization_24.f90 b/gcc/testsuite/gfortran.dg/initialization_24.f90
index 4c203312be4..0ab8dc624e4 100644
--- a/gcc/testsuite/gfortran.dg/initialization_24.f90
+++ b/gcc/testsuite/gfortran.dg/initialization_24.f90
@@ -3,7 +3,7 @@
! Test case by Dominique d'Humieres
INTEGER, PARAMETER ::N=65536
INTEGER, PARAMETER ::I(N)=(/(MOD(K,2),K=1,N)/)!{ dg-error "number of elements" }
-INTEGER, PARAMETER ::M(N)=I(N:1:-1)
+INTEGER, PARAMETER ::M(N)=I(N:1:-1) ! { dg-error "Syntax error in argument" }
print *, I(1), M(1), I(N), M(N)
END
diff --git a/gcc/testsuite/gfortran.dg/intent_out_5.f90 b/gcc/testsuite/gfortran.dg/intent_out_5.f90
index acd2b606525..6a9c6f4bd39 100644
--- a/gcc/testsuite/gfortran.dg/intent_out_5.f90
+++ b/gcc/testsuite/gfortran.dg/intent_out_5.f90
@@ -1,4 +1,4 @@
-! { dg-do run}
+! { dg-do run }
!
! PR fortran/41479
!
diff --git a/gcc/testsuite/gfortran.dg/ltrans-7.f90 b/gcc/testsuite/gfortran.dg/ltrans-7.f90
index 9c9bcf939eb..583edf216ba 100644
--- a/gcc/testsuite/gfortran.dg/ltrans-7.f90
+++ b/gcc/testsuite/gfortran.dg/ltrans-7.f90
@@ -27,5 +27,5 @@ Program FOO
end Program FOO
! Please do not XFAIL.
-! { dg-final { scan-tree-dump-times "transformed loop" 1 "ltrans"} }
+! { dg-final { scan-tree-dump-times "transformed loop" 1 "ltrans" } }
! { dg-final { cleanup-tree-dump "ltrans" } }
diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_4.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_4.f90
index 2ea2e7b86ab..673739518dc 100644
--- a/gcc/testsuite/gfortran.dg/minmaxloc_4.f90
+++ b/gcc/testsuite/gfortran.dg/minmaxloc_4.f90
@@ -3,7 +3,6 @@
PROGRAM TST
IMPLICIT NONE
REAL :: A(1,3)
- REAL :: B(3,1)
A(:,1) = 10
A(:,2) = 20
A(:,3) = 30
@@ -13,9 +12,4 @@ PROGRAM TST
if (minloc(sum(a(:,1:3),1),1) .ne. 1) call abort()
if (maxloc(sum(a(:,1:3),1),1) .ne. 3) call abort()
- B(1,:) = 10
- B(2,:) = 20
- B(3,:) = 30
- if (minloc(sum(b(1:3,:),2),2) .ne. 1) call abort()
- if (maxloc(sum(b(1:3,:),2),2) .ne. 3) call abort()
END PROGRAM TST
diff --git a/gcc/testsuite/gfortran.dg/namelist_36.f90 b/gcc/testsuite/gfortran.dg/namelist_36.f90
index 61e88b6b3e9..b6a14e36bc3 100644
--- a/gcc/testsuite/gfortran.dg/namelist_36.f90
+++ b/gcc/testsuite/gfortran.dg/namelist_36.f90
@@ -1,4 +1,4 @@
-! { dg-compile }
+! { dg-do compile }
!
! Private types and types with private components
! are acceptable in local namelists.
diff --git a/gcc/testsuite/gfortran.dg/parameter_array_init_6.f90 b/gcc/testsuite/gfortran.dg/parameter_array_init_6.f90
new file mode 100644
index 00000000000..9a654db3f00
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/parameter_array_init_6.f90
@@ -0,0 +1,18 @@
+! { dg-do compile }
+!
+! PR fortran/44742
+!
+! Test case based on Juergen Reuter's and reduced by
+! Janus Weil.
+!
+! The program creates a large array constructor, which
+! exceeds -fmax-array-constructor - and caused an ICE.
+!
+
+module proc8
+ implicit none
+ integer, parameter :: N = 256
+ logical, dimension(N**2), parameter :: A = .false.
+ logical, dimension(N,N), parameter :: B &
+ = reshape ( (/ A /), (/ N, N /) ) ! { dg-error "array constructor at .1. requires an increase" }
+end module
diff --git a/gcc/testsuite/gfortran.dg/pr44882.f90 b/gcc/testsuite/gfortran.dg/pr44882.f90
new file mode 100644
index 00000000000..ac22459dc08
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr44882.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-options "-O3 -ffast-math -funroll-loops -w" }
+
+ SUBROUTINE TRUDGE(KDIR)
+! There is a type mismatch here for TRUPAR which caused an ICE
+ COMMON /TRUPAR/ DR(10),V(10,10)
+ DO 110 I=1,NDIR
+ 110 DR(I)=V(I,JDIR)
+ END
+ SUBROUTINE TRUSRC(LEAVE)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ COMMON /TRUPAR/ DX(10),V(10,10)
+ END
+
diff --git a/gcc/testsuite/gfortran.dg/runtime_warning_1.f90 b/gcc/testsuite/gfortran.dg/runtime_warning_1.f90
index cff9eae7ae7..2894136a8b5 100644
--- a/gcc/testsuite/gfortran.dg/runtime_warning_1.f90
+++ b/gcc/testsuite/gfortran.dg/runtime_warning_1.f90
@@ -14,4 +14,4 @@
close (42)
if (c /= 'abcde') call abort ()
end
-! { dg-warning ".*descriptor" "" 10}
+
diff --git a/gcc/testsuite/gfortran.dg/select_char_2.f90 b/gcc/testsuite/gfortran.dg/select_char_2.f90
new file mode 100644
index 00000000000..22af1c76dfc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/select_char_2.f90
@@ -0,0 +1,45 @@
+! { dg-do run }
+! { dg-options "-O -fdump-tree-original" }
+
+ if (foo ('E') .ne. 1) call abort
+ if (foo ('e') .ne. 1) call abort
+ if (foo ('f') .ne. 2) call abort
+ if (foo ('g') .ne. 2) call abort
+ if (foo ('h') .ne. 2) call abort
+ if (foo ('Q') .ne. 3) call abort
+ if (foo (' ') .ne. 4) call abort
+ if (bar ('e') .ne. 1) call abort
+ if (bar ('f') .ne. 3) call abort
+contains
+ function foo (c)
+ character :: c
+ integer :: foo
+ select case (c)
+ case ('E','e')
+ foo = 1
+ case ('f':'h ')
+ foo = 2
+ case default
+ foo = 3
+ case ('')
+ foo = 4
+ end select
+ end function
+ function bar (c)
+ character :: c
+ integer :: bar
+ select case (c)
+ case ('ea':'ez')
+ bar = 2
+ case ('e')
+ bar = 1
+ case default
+ bar = 3
+ case ('fd')
+ bar = 4
+ end select
+ end function
+end
+
+! { dg-final { scan-tree-dump-not "_gfortran_select_string" "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/select_char_3.f90 b/gcc/testsuite/gfortran.dg/select_char_3.f90
new file mode 100644
index 00000000000..f0a7c874175
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/select_char_3.f90
@@ -0,0 +1,15 @@
+! PR fortran/40206
+! { dg-do compile }
+! { dg-options "-O2 -Wuninitialized" }
+
+function char2type (char)
+ character, intent(in) :: char
+ integer :: char2type
+
+ select case (char)
+ case ('E','e')
+ char2type=1
+ case default
+ char2type=-1234
+ end select
+end function
diff --git a/gcc/testsuite/gfortran.dg/storage_size_1.f08 b/gcc/testsuite/gfortran.dg/storage_size_1.f08
new file mode 100644
index 00000000000..ade9dfc30b0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/storage_size_1.f08
@@ -0,0 +1,31 @@
+! { dg-do run }
+!
+! PR 44649: [OOP] F2008: storage_size intrinsic
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+type :: t
+ integer(4) :: i
+ real(4) :: r
+end type
+
+type,extends(t) :: t2
+ integer(4) :: j
+end type
+
+type(t) :: a
+type(t), dimension(1:3) :: b
+class(t), allocatable :: cp
+
+allocate(t2::cp)
+
+if (sizeof(a) /= 8) call abort()
+if (storage_size(a) /= 64) call abort()
+
+if (sizeof(b) /= 24) call abort()
+if (storage_size(b) /= 64) call abort()
+
+if (sizeof(cp) /= 8) call abort()
+if (storage_size(cp) /= 96) call abort()
+
+end
diff --git a/gcc/testsuite/gfortran.dg/storage_size_2.f08 b/gcc/testsuite/gfortran.dg/storage_size_2.f08
new file mode 100644
index 00000000000..50de9575e74
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/storage_size_2.f08
@@ -0,0 +1,27 @@
+! { dg-do compile }
+!
+! PR 44649: [OOP] F2008: storage_size intrinsic
+!
+! Contributed by Janus Weil <janus@gcc.gnu.org>
+
+use iso_c_binding, only: c_int
+
+type, bind(c) :: t
+ integer(c_int) :: j
+end type
+
+integer(4) :: i1
+integer(c_int) :: i2
+type(t) :: x
+
+print *,c_sizeof(i1) ! { dg-error "must be be an interoperable data entity" }
+print *,c_sizeof(i2)
+print *,c_sizeof(x)
+print *, c_sizeof(ran()) ! { dg-error "must be be an interoperable data entity" }
+
+print *,storage_size(1.0,4)
+print *,storage_size(1.0,3.2) ! { dg-error "must be INTEGER" }
+print *,storage_size(1.0,(/1,2/)) ! { dg-error "must be a scalar" }
+print *,storage_size(1.0,irand()) ! { dg-error "must be a constant" }
+
+end
diff --git a/gcc/testsuite/gfortran.dg/typebound_call_16.f03 b/gcc/testsuite/gfortran.dg/typebound_call_16.f03
new file mode 100644
index 00000000000..fdd60c603cc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_call_16.f03
@@ -0,0 +1,35 @@
+! { dg-do compile }
+!
+! PR 41685: [OOP] internal compiler error: verify_flow_info failed
+!
+! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
+
+module base_mat_mod
+
+ type :: base_sparse_mat
+ contains
+ procedure, pass(a) :: get_nrows
+ end type base_sparse_mat
+
+contains
+
+ integer function get_nrows(a)
+ implicit none
+ class(base_sparse_mat), intent(in) :: a
+ end function get_nrows
+
+end module base_mat_mod
+
+
+ use base_mat_mod
+
+ type, extends(base_sparse_mat) :: s_coo_sparse_mat
+ end type s_coo_sparse_mat
+
+ class(s_coo_sparse_mat), pointer :: a
+ Integer :: m
+ m = a%get_nrows()
+
+end
+
+! { dg-final { cleanup-modules "base_mat_mod" } }
diff --git a/gcc/testsuite/gfortran.dg/typebound_generic_6.f03 b/gcc/testsuite/gfortran.dg/typebound_generic_6.f03
new file mode 100644
index 00000000000..973e10a35e3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_generic_6.f03
@@ -0,0 +1,69 @@
+! { dg-do run }
+!
+! PR 43945: [OOP] Derived type with GENERIC: resolved to the wrong specific TBP
+!
+! Contributed by 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
+ 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
+ class(foo), allocatable :: afab
+
+ allocate(foo2 :: afab)
+ call af2%do()
+ if (af2%i .ne. 2) call abort
+ if (af2%get() .ne. 3) call abort
+ call afab%do()
+ if (afab%i .ne. 2) call abort
+ if (afab%get() .ne. 3) call abort
+
+end program testd15
+
+! { dg-final { cleanup-modules "foo_mod foo2_mod" } }
diff --git a/gcc/testsuite/gfortran.dg/typebound_generic_7.f03 b/gcc/testsuite/gfortran.dg/typebound_generic_7.f03
new file mode 100644
index 00000000000..2519ab09416
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_generic_7.f03
@@ -0,0 +1,28 @@
+! { dg-do compile }
+!
+! PR 44434: [OOP] ICE in in gfc_add_component_ref
+!
+! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
+
+module foo_mod
+ type foo
+ contains
+ procedure :: doit
+ generic :: do => doit
+ end type
+contains
+ subroutine doit(a)
+ class(foo) :: a
+ end subroutine
+end module
+
+program testd15
+contains
+ subroutine dodo(x)
+ use foo_mod
+ class(foo) :: x
+ call x%do()
+ end subroutine
+end
+
+! { dg-final { cleanup-modules "foo_mod" } }
diff --git a/gcc/testsuite/gfortran.dg/typebound_generic_8.f03 b/gcc/testsuite/gfortran.dg/typebound_generic_8.f03
new file mode 100644
index 00000000000..0ee6610e173
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_generic_8.f03
@@ -0,0 +1,29 @@
+! { dg-do compile }
+!
+! PR 44565: [4.6 Regression] [OOP] ICE in gimplify_expr with array-valued generic TBP
+!
+! Contributed by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de>
+
+module ice6
+
+ type :: t
+ contains
+ procedure :: get_array
+ generic :: get_something => get_array
+ end type
+
+contains
+
+ function get_array(this)
+ class(t) :: this
+ real,dimension(2) :: get_array
+ end function get_array
+
+ subroutine do_something(this)
+ class(t) :: this
+ print *,this%get_something()
+ end subroutine do_something
+
+end module ice6
+
+! { dg-final { cleanup-modules "ice6" } }
diff --git a/gcc/testsuite/gfortran.dg/typebound_generic_9.f03 b/gcc/testsuite/gfortran.dg/typebound_generic_9.f03
new file mode 100644
index 00000000000..f85bb385706
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_generic_9.f03
@@ -0,0 +1,63 @@
+! { dg-do run }
+!
+! PR 44936: [OOP] Generic TBP not resolved correctly at compile time
+!
+! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
+
+module foo_mod
+ type foo
+ integer :: i
+ contains
+ procedure, pass(a) :: doit => doit1
+ procedure, pass(a) :: getit=> getit1
+ generic, public :: do => doit
+ generic, public :: get => getit
+ end type foo
+ private doit1,getit1
+contains
+ subroutine doit1(a)
+ class(foo) :: a
+ a%i = 1
+ write(*,*) 'FOO%DOIT base version'
+ end subroutine doit1
+ function getit1(a) result(res)
+ class(foo) :: a
+ integer :: res
+ res = a%i
+ end function getit1
+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
+ 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/use_iso_c_binding.f90 b/gcc/testsuite/gfortran.dg/use_iso_c_binding.f90
index b35c024c08c..8a28490f7b2 100644
--- a/gcc/testsuite/gfortran.dg/use_iso_c_binding.f90
+++ b/gcc/testsuite/gfortran.dg/use_iso_c_binding.f90
@@ -7,12 +7,12 @@
! intrinsic one. --Rickett, 09.26.06
module use_stmt_0
! this is an error because c_ptr_2 does not exist
- use, intrinsic :: iso_c_binding, only: c_ptr_2 ! { dg-error "Symbol 'c_ptr_2' referenced at \\(1\\) does not exist" }
+ use, intrinsic :: iso_c_binding, only: c_ptr_2 ! { dg-error "Symbol 'c_ptr_2' referenced at \\(1\\) not found" }
end module use_stmt_0
module use_stmt_1
! this is an error because c_ptr_2 does not exist
- use iso_c_binding, only: c_ptr_2 ! { dg-error "Symbol 'c_ptr_2' referenced at \\(1\\) does not exist" }
+ use iso_c_binding, only: c_ptr_2 ! { dg-error "Symbol 'c_ptr_2' referenced at \\(1\\) not found" }
end module use_stmt_1
module use_stmt_2
diff --git a/gcc/testsuite/gfortran.dg/use_rename_6.f90 b/gcc/testsuite/gfortran.dg/use_rename_6.f90
new file mode 100644
index 00000000000..02f25c36e97
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_rename_6.f90
@@ -0,0 +1,40 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/44702
+!
+! Based on a test case by Joe Krahn.
+!
+! Multiple import of the same symbol was failing for
+! intrinsic modules.
+!
+subroutine one()
+ use iso_c_binding, only: a => c_ptr, b => c_ptr, c_ptr
+ implicit none
+ type(a) :: x
+ type(b) :: y
+ type(c_ptr) :: z
+end subroutine one
+
+subroutine two()
+ use iso_c_binding, a => c_ptr, b => c_ptr
+ implicit none
+ type(a) :: x
+ type(b) :: y
+end subroutine two
+
+subroutine three()
+ use iso_fortran_env, only: a => error_unit, b => error_unit, error_unit
+ implicit none
+ if(a /= b) call shall_not_be_there()
+ if(a /= error_unit) call shall_not_be_there()
+end subroutine three
+
+subroutine four()
+ use iso_fortran_env, a => error_unit, b => error_unit
+ implicit none
+ if(a /= b) call shall_not_be_there()
+end subroutine four
+
+! { dg-final { scan-tree-dump-times "shall_not_be_there" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/vect/vect.exp b/gcc/testsuite/gfortran.dg/vect/vect.exp
index 39a1f9d811a..5783e929496 100644
--- a/gcc/testsuite/gfortran.dg/vect/vect.exp
+++ b/gcc/testsuite/gfortran.dg/vect/vect.exp
@@ -68,11 +68,8 @@ if [istarget "powerpc-*paired*"] {
} elseif { [istarget "spu-*-*"] } {
set dg-do-what-default run
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } {
- if { ![check_effective_target_sse2] } then {
- return
- }
lappend DEFAULT_VECTCFLAGS "-msse2"
- if [check_sse2_hw_available] {
+ if { [check_effective_target_sse2_runtime] } {
set dg-do-what-default run
} else {
set dg-do-what-default compile
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/aggr15.adb b/gcc/testsuite/gnat.dg/aggr15.adb
new file mode 100644
index 00000000000..e69e9d346e1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/aggr15.adb
@@ -0,0 +1,18 @@
+-- { dg-do compile }
+-- { dg-options "-gnatws" }
+
+package body Aggr15 is
+
+ function CREATE return DATA_T is
+ D : DATA_T;
+ begin
+ return D;
+ end;
+
+ function ALL_CREATE return ALL_DATA_T is
+ C : constant ALL_DATA_T := (others => (others => Create));
+ begin
+ return C;
+ end;
+
+end Aggr15;
diff --git a/gcc/testsuite/gnat.dg/aggr15.ads b/gcc/testsuite/gnat.dg/aggr15.ads
new file mode 100644
index 00000000000..23f26a8df7d
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/aggr15.ads
@@ -0,0 +1,15 @@
+package Aggr15 is
+
+ type T is tagged record
+ I : Integer;
+ end record;
+
+ type DATA_T is record
+ D : T;
+ end record;
+
+ type ALL_DATA_T is array (1..2, 1..2) of DATA_T;
+
+ function ALL_CREATE return ALL_DATA_T;
+
+end Aggr15;
diff --git a/gcc/testsuite/gnat.dg/atomic3.adb b/gcc/testsuite/gnat.dg/atomic3.adb
new file mode 100644
index 00000000000..592a856caef
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/atomic3.adb
@@ -0,0 +1,24 @@
+-- { dg-do compile }
+
+procedure Atomic3 is
+
+ type Unsigned_32_T is mod 2 ** 32;
+ for Unsigned_32_T'Size use 32;
+
+ type Id_T is (One, Two, Three);
+
+ type Array_T is array (Id_T) of Unsigned_32_T;
+ pragma Atomic_Components (Array_T);
+
+ A : Array_T := (others => 0);
+
+ function Get_Array return Array_T is
+ begin
+ return A;
+ end;
+
+ X : Array_T;
+
+begin
+ X := Get_Array;
+end;
diff --git a/gcc/testsuite/gnat.dg/cond_expr1.adb b/gcc/testsuite/gnat.dg/cond_expr1.adb
new file mode 100644
index 00000000000..e1a87a36ab5
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/cond_expr1.adb
@@ -0,0 +1,7 @@
+-- { dg-do compile }
+-- { dg-options "-gnat12" }
+
+function Cond_Expr1 (Dir : in String) return String is
+begin
+ return (if Dir (Dir'Last) = '\' then Dir else Dir & '\');
+end;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization7.adb b/gcc/testsuite/gnat.dg/loop_optimization7.adb
index 16683949465..c6a5dc98900 100644
--- a/gcc/testsuite/gnat.dg/loop_optimization7.adb
+++ b/gcc/testsuite/gnat.dg/loop_optimization7.adb
@@ -1,6 +1,7 @@
-- { dg-do compile }
-- { dg-options "-O3" }
-- { dg-options "-O3 -msse" { target i?86-*-* x86_64-*-* } }
+-- { dg-require-effective-target sse }
package body Loop_Optimization7 is
diff --git a/gcc/testsuite/gnat.dg/modular3.adb b/gcc/testsuite/gnat.dg/modular3.adb
new file mode 100644
index 00000000000..539edcaf4d4
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/modular3.adb
@@ -0,0 +1,32 @@
+-- { dg-do run }
+
+with Modular3_Pkg; use Modular3_Pkg;
+
+procedure Modular3 is
+
+ function F1 (A : Int16_T) return Int16_T is
+ begin
+ return A + 128;
+ end;
+
+ function F2 (B : Mod16_T) return Mod16_T is
+ begin
+ return B + 128;
+ end;
+
+ A : Int16_T := 16384;
+ B : Mod16_T := 65504;
+
+begin
+
+ A := F1 (A);
+ if A /= 16512 then
+ raise Program_Error;
+ end if;
+
+ B := F2 (B);
+ if B /= 96 then
+ raise Program_Error;
+ end if;
+
+end Modular3;
diff --git a/gcc/testsuite/gnat.dg/modular3_pkg.ads b/gcc/testsuite/gnat.dg/modular3_pkg.ads
new file mode 100644
index 00000000000..85cf6a8bfaa
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/modular3_pkg.ads
@@ -0,0 +1,11 @@
+package Modular3_Pkg is
+
+ type Int16_T is range -32768 .. 32767;
+ for Int16_T'Size use 16;
+ for Int16_T'Alignment use 1;
+
+ type Mod16_T is mod 2 ** 16;
+ for Mod16_T'Size use 16;
+ for Mod16_T'Alignment use 1;
+
+end Modular3_Pkg;
diff --git a/gcc/testsuite/gnat.dg/noreturn1.adb b/gcc/testsuite/gnat.dg/noreturn1.adb
index 83eafe7f364..f854e662be3 100644
--- a/gcc/testsuite/gnat.dg/noreturn1.adb
+++ b/gcc/testsuite/gnat.dg/noreturn1.adb
@@ -1,4 +1,4 @@
--- { dg-compile }
+-- { dg-do compile }
package body Noreturn1 is
diff --git a/gcc/testsuite/gnat.dg/specs/small_alignment.ads b/gcc/testsuite/gnat.dg/specs/small_alignment.ads
index 318148d1a68..fbedf47d131 100644
--- a/gcc/testsuite/gnat.dg/specs/small_alignment.ads
+++ b/gcc/testsuite/gnat.dg/specs/small_alignment.ads
@@ -1,4 +1,4 @@
--- { dg-compile }
+-- { dg-do compile }
package Small_Alignment is
diff --git a/gcc/testsuite/gnat.dg/sse_nolib.adb b/gcc/testsuite/gnat.dg/sse_nolib.adb
index b024a216e94..d678b9a868b 100644
--- a/gcc/testsuite/gnat.dg/sse_nolib.adb
+++ b/gcc/testsuite/gnat.dg/sse_nolib.adb
@@ -1,5 +1,6 @@
-- { dg-do run { target i?86-*-* x86_64-*-* } }
-- { dg-options "-O1 -msse" }
+-- { dg-require-effective-target sse }
with Ada.Unchecked_Conversion;
diff --git a/gcc/testsuite/gnat.dg/unchecked_convert5b.adb b/gcc/testsuite/gnat.dg/unchecked_convert5b.adb
new file mode 100644
index 00000000000..5232041c0d8
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/unchecked_convert5b.adb
@@ -0,0 +1,22 @@
+-- { dg-do run { target i?86-*-* x86_64-*-* alpha*-*-* ia64-*-* } }
+
+with Unchecked_Conversion;
+
+procedure Unchecked_Convert5b is
+
+ subtype c_1 is string(1..1);
+
+ function int2c1 is -- { dg-warning "different sizes" }
+ new unchecked_conversion (source => integer, target => c_1);
+
+ c1 : c_1;
+
+begin
+
+ c1 := int2c1(16#12#);
+
+ if c1 (1) /= ASCII.DC2 then
+ raise Program_Error;
+ end if;
+
+end;
diff --git a/gcc/testsuite/gnat.dg/unchecked_convert6.adb b/gcc/testsuite/gnat.dg/unchecked_convert6.adb
new file mode 100644
index 00000000000..a26a6a9b762
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/unchecked_convert6.adb
@@ -0,0 +1,22 @@
+-- { dg-do run { target hppa*-*-* sparc*-*-* powerpc*-*-* } }
+
+with Unchecked_Conversion;
+
+procedure Unchecked_Convert6 is
+
+ subtype c_5 is string(1..5);
+
+ function int2c5 is -- { dg-warning "different sizes" }
+ new unchecked_conversion (source => integer, target => c_5);
+
+ c5 : c_5;
+
+begin
+
+ c5 := int2c5(16#12#);
+
+ if c5 (4) /= ASCII.DC2 then
+ raise Program_Error;
+ end if;
+
+end;
diff --git a/gcc/testsuite/gnat.dg/unchecked_convert6b.adb b/gcc/testsuite/gnat.dg/unchecked_convert6b.adb
new file mode 100644
index 00000000000..d696f7d5f09
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/unchecked_convert6b.adb
@@ -0,0 +1,22 @@
+-- { dg-do run { target i?86-*-* x86_64-*-* alpha*-*-* ia64-*-* } }
+
+with Unchecked_Conversion;
+
+procedure Unchecked_Convert6b is
+
+ subtype c_5 is string(1..5);
+
+ function int2c5 is -- { dg-warning "different sizes" }
+ new unchecked_conversion (source => integer, target => c_5);
+
+ c5 : c_5;
+
+begin
+
+ c5 := int2c5(16#12#);
+
+ if c5 (1) /= ASCII.DC2 then
+ raise Program_Error;
+ end if;
+
+end;
diff --git a/gcc/testsuite/lib/fortran-torture.exp b/gcc/testsuite/lib/fortran-torture.exp
index 72ce9d682cd..cd24ace426f 100644
--- a/gcc/testsuite/lib/fortran-torture.exp
+++ b/gcc/testsuite/lib/fortran-torture.exp
@@ -46,7 +46,8 @@ proc get-fortran-torture-options { } {
set test_tree_vectorize 1
} elseif { ( [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] )
&& [check_effective_target_sse2]
- && [check_sse2_hw_available] } {
+ && [check_sse2_hw_available]
+ && [check_sse_os_support_available] } {
lappend vectorizer_options "-msse2"
set test_tree_vectorize 1
} elseif { [istarget "mips*-*-*"]
diff --git a/gcc/testsuite/lib/objc-torture.exp b/gcc/testsuite/lib/objc-torture.exp
index a3d1ef2446e..d3207a466ac 100644
--- a/gcc/testsuite/lib/objc-torture.exp
+++ b/gcc/testsuite/lib/objc-torture.exp
@@ -23,17 +23,24 @@ load_lib target-supports.exp
# Make sure that the runtime list is re-evaluated for each multilib.
proc objc-set-runtime-options { dowhat args } {
global OBJC_RUNTIME_OPTIONS
- if ![info exists OBJC_RUNTIME_OPTIONS] {
- set rtlist [list "-fgnu-runtime" "-fnext-runtime" ]
- } else {
- set rtlist [list "-fgnu-runtime" "-fnext-runtime" ]
- foreach other $OBJC_RUNTIME_OPTIONS {
- # Don't do tests twice...
- if { ( $other == "-fnext-runtime" || $other == "-fgnu-runtime" ) } {
- continue
- }
- lappend rtlist $other
+ set rtlist [list "-fgnu-runtime" ]
+ # At present (4.6), the only NeXT runtime target is Darwin.
+ # The previously used approach of testing trivial compiles is not reliable
+ # for determining the absence of the NeXT runtime, since a non-Darwin
+ # installation can have the objc headers present in the same locations
+ # that Darwin uses. If NeXT is ported to another target, then it should
+ # be listed here.
+ if [istarget "*-*-darwin*" ] {
+ lappend rtlist "-fnext-runtime"
+ }
+ if [info exists OBJC_RUNTIME_OPTIONS] {
+ foreach other $OBJC_RUNTIME_OPTIONS {
+ # Don't do tests twice...
+ if { ( $other == "-fnext-runtime" || $other == "-fgnu-runtime" ) } {
+ continue
}
+ lappend rtlist $other
+ }
}
set OBJC_RUNTIME_OPTIONS ""
@@ -49,8 +56,10 @@ proc objc-set-runtime-options { dowhat args } {
if [info exists dowhat] {
switch $dowhat {
"compile" {
- set compile_type "assembly"
- set output_file "trivial.s"
+ # We should check that the generated asm is sensible, so do
+ # the equivalent of -c.
+ set compile_type "object"
+ set output_file "trivial.o"
set comp_output [objc_target_compile \
"$srcdir/$subdir/trivial.m" "$output_file" "$compile_type" $options]
diff --git a/gcc/testsuite/lib/plugin-support.exp b/gcc/testsuite/lib/plugin-support.exp
index fe4526549b3..9444f52662b 100644
--- a/gcc/testsuite/lib/plugin-support.exp
+++ b/gcc/testsuite/lib/plugin-support.exp
@@ -84,7 +84,7 @@ proc plugin-test-execute { plugin_src plugin_tests } {
set gcc_objdir "$objdir/../../.."
set includes "-I. -I${srcdir} -I${gcc_srcdir}/gcc -I${gcc_objdir}/gcc \
-I${gcc_srcdir}/include -I${gcc_srcdir}/libcpp/include \
- $GMPINC"
+ $GMPINC -I${gcc_objdir}/intl"
set optstr "$includes $extra_flags -DIN_GCC -fPIC -shared"
diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
index abc01b7cc55..20aed864ce0 100644
--- a/gcc/testsuite/lib/scanasm.exp
+++ b/gcc/testsuite/lib/scanasm.exp
@@ -291,3 +291,40 @@ proc scan-assembler-dem-not { args } {
fail "$testcase scan-assembler-dem-not $pp_pattern"
}
}
+
+# Utility for testing that a function is defined on the current line.
+# Call pass if so, otherwise fail. Invoked directly; the file must
+# have been compiled with -g -dA.
+#
+# Argument 0 is the current line, passed implicitly by dejagnu
+# Argument 1 is the function to check
+# Argument 2 handles expected failures and the like
+# Argument 3 is "." to match the current line, or an integer to match
+# an explicit line.
+proc dg-function-on-line { args } {
+ # Upvar from dg-final:
+ upvar dg-final-code final-code
+
+ set line [lindex $args 0]
+ set symbol [lindex $args 1]
+ set failures [lindex $args 2]
+
+ if { [llength $args] >= 4 } {
+ switch [lindex $args 3] {
+ "." { }
+ "default" { set line [lindex $args 3] }
+ }
+ }
+
+ set pattern [format {%s:[^\t]*(\t.file[^\t]*)?\t[^:]+:%d\n} \
+ $symbol $line]
+
+ # The lack of spaces around $pattern is important, since they'd
+ # become part of the regex scan-assembler tries to match.
+ set cmd "scan-assembler {$pattern}"
+ if { [llength $args] >= 3 } {
+ set cmd "$cmd {$failures}"
+ }
+
+ append final-code "$cmd\n"
+}
diff --git a/gcc/testsuite/lib/target-supports-dg.exp b/gcc/testsuite/lib/target-supports-dg.exp
index e742d750c76..02f0bc19f57 100644
--- a/gcc/testsuite/lib/target-supports-dg.exp
+++ b/gcc/testsuite/lib/target-supports-dg.exp
@@ -207,6 +207,14 @@ proc dg-require-host-local { args } {
}
}
+proc dg-require-linker-plugin { args } {
+ set linker_plugin_available [ check_linker_plugin_available ]
+ if { $linker_plugin_available == 0 } {
+ upvar dg-do-what dg-do-what
+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+ }
+}
+
# Add any target-specific flags needed for accessing the given list
# of features. This must come after all dg-options.
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 1cdc53b4983..b3123442837 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -569,6 +569,24 @@ proc check_effective_target_pcc_bitfield_type_matters { } {
}]
}
+# Add to FLAGS all the target-specific flags needed to use thread-local storage.
+
+proc add_options_for_tls { flags } {
+ # On Solaris 8 and 9, __tls_get_addr/___tls_get_addr only lives in
+ # libthread, so always pass -pthread for native TLS.
+ # Need to duplicate native TLS check from
+ # check_effective_target_tls_native to avoid recursion.
+ if { [istarget *-*-solaris2.\[89\]*] &&
+ [check_no_messages_and_pattern tls_native "!emutls" assembly {
+ __thread int i;
+ int f (void) { return i; }
+ void g (int j) { i = j; }
+ }] } {
+ return "$flags -pthread"
+ }
+ return $flags
+}
+
# Return 1 if thread local storage (TLS) is supported, 0 otherwise.
proc check_effective_target_tls {} {
@@ -886,6 +904,12 @@ proc check_effective_target_static_libgfortran { } {
} "-static"]
}
+proc check_linker_plugin_available { } {
+ return [check_no_compiler_messages_nocache linker_plugin executable {
+ int main() { return 0; }
+ } "-flto -fuse-linker-plugin"]
+}
+
# Return 1 if the target supports executing 750CL paired-single instructions, 0
# otherwise. Cache the result.
@@ -910,6 +934,53 @@ proc check_750cl_hw_available { } {
}]
}
+# Return 1 if the target OS supports running SSE executables, 0
+# otherwise. Cache the result.
+
+proc check_sse_os_support_available { } {
+ return [check_cached_effective_target sse_os_support_available {
+ # If this is not the right target then we can skip the test.
+ if { !([istarget x86_64-*-*] || [istarget i?86-*-*]) } {
+ expr 0
+ } elseif { [istarget i?86-*-solaris2*] } {
+ # The Solaris 2 kernel doesn't save and restore SSE registers
+ # before Solaris 9 4/04. Before that, executables die with SIGILL.
+ check_runtime_nocache sse_os_support_available {
+ int main ()
+ {
+ __asm__ volatile ("movss %xmm2,%xmm1");
+ return 0;
+ }
+ } "-msse"
+ } else {
+ expr 1
+ }
+ }]
+}
+
+# Return 1 if the target supports executing SSE instructions, 0
+# otherwise. Cache the result.
+
+proc check_sse_hw_available { } {
+ return [check_cached_effective_target sse_hw_available {
+ # If this is not the right target then we can skip the test.
+ if { !([istarget x86_64-*-*] || [istarget i?86-*-*]) } {
+ expr 0
+ } else {
+ check_runtime_nocache sse_hw_available {
+ #include "cpuid.h"
+ int main ()
+ {
+ unsigned int eax, ebx, ecx, edx;
+ if (__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ return !(edx & bit_SSE);
+ return 1;
+ }
+ } ""
+ }
+ }]
+}
+
# Return 1 if the target supports executing SSE2 instructions, 0
# otherwise. Cache the result.
@@ -923,7 +994,7 @@ proc check_sse2_hw_available { } {
#include "cpuid.h"
int main ()
{
- unsigned int eax, ebx, ecx, edx = 0;
+ unsigned int eax, ebx, ecx, edx;
if (__get_cpuid (1, &eax, &ebx, &ecx, &edx))
return !(edx & bit_SSE2);
return 1;
@@ -933,6 +1004,62 @@ proc check_sse2_hw_available { } {
}]
}
+# Return 1 if the target supports executing AVX instructions, 0
+# otherwise. Cache the result.
+
+proc check_avx_hw_available { } {
+ return [check_cached_effective_target avx_hw_available {
+ # If this is not the right target then we can skip the test.
+ if { !([istarget x86_64-*-*] || [istarget i?86-*-*]) } {
+ expr 0
+ } else {
+ check_runtime_nocache avx_hw_available {
+ #include "cpuid.h"
+ int main ()
+ {
+ unsigned int eax, ebx, ecx, edx;
+ if (__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ return ((ecx & (bit_AVX | bit_OSXSAVE))
+ != (bit_AVX | bit_OSXSAVE));
+ return 1;
+ }
+ } ""
+ }
+ }]
+}
+
+# Return 1 if the target supports running SSE executables, 0 otherwise.
+
+proc check_effective_target_sse_runtime { } {
+ if { [check_effective_target_sse]
+ && [check_sse_hw_available]
+ && [check_sse_os_support_available] } {
+ return 1
+ }
+ return 0
+}
+
+# Return 1 if the target supports running SSE2 executables, 0 otherwise.
+
+proc check_effective_target_sse2_runtime { } {
+ if { [check_effective_target_sse2]
+ && [check_sse2_hw_available]
+ && [check_sse_os_support_available] } {
+ return 1
+ }
+ return 0
+}
+
+# Return 1 if the target supports running AVX executables, 0 otherwise.
+
+proc check_effective_target_avx_runtime { } {
+ if { [check_effective_target_avx]
+ && [check_avx_hw_available] } {
+ return 1
+ }
+ return 0
+}
+
# Return 1 if the target supports executing VSX instructions, 0
# otherwise. Cache the result.
@@ -3261,6 +3388,17 @@ proc check_effective_target_avx { } {
} "-O2 -mavx" ]
}
+# Return 1 if sse instructions can be compiled.
+proc check_effective_target_sse { } {
+ return [check_no_compiler_messages sse object {
+ int main ()
+ {
+ __builtin_ia32_stmxcsr ();
+ return 0;
+ }
+ } "-O2 -msse" ]
+}
+
# Return 1 if sse2 instructions can be compiled.
proc check_effective_target_sse2 { } {
return [check_no_compiler_messages sse2 object {
@@ -3273,6 +3411,19 @@ proc check_effective_target_sse2 { } {
} "-O2 -msse2" ]
}
+# Return 1 if F16C instructions can be compiled.
+
+proc check_effective_target_f16c { } {
+ return [check_no_compiler_messages f16c object {
+ #include "immintrin.h"
+ float
+ foo (unsigned short val)
+ {
+ return _cvtsh_ss (val);
+ }
+ } "-O2 -mf16c" ]
+}
+
# Return 1 if C wchar_t type is compatible with char16_t.
proc check_effective_target_wchar_t_char16_t_compatible { } {
diff --git a/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm b/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
index a3c4b0c492a..e94e6ec57a2 100644
--- a/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
+++ b/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
@@ -1,13 +1,12 @@
// Check if ObjC classes with non-POD C++ ivars are specially marked in the metadata.
// { dg-do run { target *-*-darwin* } }
-// { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
-// { dg-options "-fobjc-call-cxx-cdtors" }
-// { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } }
-
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+// { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
+// { dg-options "-fobjc-call-cxx-cdtors -mmacosx-version-min=10.4" }
+// This test has no equivalent or meaning for m64/ABI V2
+// { dg-xfail-run-if "No Test Avail" { *-*-darwin* && lp64 } { "-fnext-runtime" } { "" } }
+#include <objc/objc-runtime.h>
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
@@ -39,18 +38,17 @@ struct cxx_struct {
int main (void)
{
+#ifndef __LP64__
Class cls;
- cls = objc_get_class("Foo");
-#if NEXT_OBJC_USE_NEW_INTERFACE
- CHECK_IF(class_isMetaClass(cls) & CLS_HAS_CXX_STRUCTORS);
- cls = objc_getClass("Bar");
- CHECK_IF(!(class_isMetaClass(cls) & CLS_HAS_CXX_STRUCTORS));
-#else
+ cls = objc_getClass("Foo");
CHECK_IF(cls->info & CLS_HAS_CXX_STRUCTORS);
cls = objc_getClass("Bar");
CHECK_IF(!(cls->info & CLS_HAS_CXX_STRUCTORS));
+
+#else
+ /* No test needed or available. */
+ abort ();
#endif
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
diff --git a/gcc/testsuite/obj-c++.dg/encode-2.mm b/gcc/testsuite/obj-c++.dg/encode-2.mm
index cfa9bc783e3..157bb526700 100644
--- a/gcc/testsuite/obj-c++.dg/encode-2.mm
+++ b/gcc/testsuite/obj-c++.dg/encode-2.mm
@@ -1,4 +1,5 @@
-/* { dg-do compile } */
+/* { dg-do assemble } */
+/* { dg-options "-save-temps" } */
template <class T>
struct Vec {
@@ -11,7 +12,7 @@ typedef struct {
Vec<float> fvec;
float fscalar;
double dscalar;
- Vec<char> chVec;
+ Vec<signed char> chVec;
int iscalar;
} anonymous;
@@ -23,4 +24,5 @@ const char *enc3 = @encode(anonymous);
/* { dg-final { scan-assembler "{Vec<float>=ffi}" } } */
/* { dg-final { scan-assembler "{Vec<double>=ddi}" } } */
-/* { dg-final { scan-assembler "{?={Vec<double>=ddi}{Vec<float>=ffi}fd{Vec<char>=cci}i}" } } */
+/* { dg-final { scan-file "encode-2.o" "{?={Vec<double>=ddi}{Vec<float>=ffi}fd{Vec<signed char>=cci}i}" } }
+/* { dg-final cleanup-saved-temps } */
diff --git a/gcc/testsuite/obj-c++.dg/encode-3.mm b/gcc/testsuite/obj-c++.dg/encode-3.mm
index 05193ae2c2f..8627a773e25 100644
--- a/gcc/testsuite/obj-c++.dg/encode-3.mm
+++ b/gcc/testsuite/obj-c++.dg/encode-3.mm
@@ -18,7 +18,7 @@ typedef struct {
int iscalar;
long z;
long long zz;
- Vec<const char> cv;
+ Vec<const signed char> cv;
} anonymous;
//Vec<double> dd;
@@ -44,7 +44,7 @@ int main(void) {
if (strcmp (enc2, "{Vec<double>=dd" L "q}"))
_exit(-(__LINE__));
- if (strcmp (enc3, "{?=f[10d]i" L "q{Vec<const char>=rcrc" L "q}}"))
+ if (strcmp (enc3, "{?=f[10d]i" L "q{Vec<const signed char>=rcrc" L "q}}"))
_exit(-(__LINE__));
return 0;
diff --git a/gcc/testsuite/obj-c++.dg/lto/lto.exp b/gcc/testsuite/obj-c++.dg/lto/lto.exp
new file mode 100644
index 00000000000..291895ffc01
--- /dev/null
+++ b/gcc/testsuite/obj-c++.dg/lto/lto.exp
@@ -0,0 +1,84 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+#
+# Based on gcc/testsuite/gcc.dg/lto/lto.exp.
+
+# Test link-time optimization across multiple files.
+#
+# Programs are broken into multiple files. Each one is compiled
+# separately with LTO information. The final executable is generated
+# by collecting all the generated object files using regular LTO or WHOPR.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+# Load procedures from common libraries.
+load_lib standard.exp
+load_lib obj-c++-dg.exp
+
+# Load the language-independent compabibility support procedures.
+load_lib lto.exp
+
+# If LTO has not been enabled, bail.
+if { ![check_effective_target_lto] } {
+ return
+}
+
+global LTO_OPTIONS
+
+set LTO_OPTIONS [list \
+ {-O0 -fwhopr -fgnu-runtime} \
+ {-O2 -fwhopr -fgnu-runtime} \
+ {-O0 -flto -fgnu-runtime} \
+ {-O2 -flto -fgnu-runtime} \
+]
+
+obj-c++_init
+lto_init no-mathlib
+
+# Define an identifier for use with this suite to avoid name conflicts
+# with other lto tests running at the same time.
+set sid "obj_cpp_lto"
+set tests [lsort [glob -nocomplain $srcdir/$subdir/*_0.mm]]
+
+# Main loop.
+foreach src $tests {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+ }
+ lto-execute $src $sid
+}
+
+# darwin targets can also run code with the NeXT runtime.
+if [istarget "*-*-darwin*" ] {
+set LTO_OPTIONS [list \
+ {-O0 -fwhopr -fnext-runtime} \
+ {-O2 -fwhopr -fnext-runtime} \
+ {-O0 -flto -fnext-runtime} \
+ {-O2 -flto -fnext-runtime} \
+]
+ foreach src $tests {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+ }
+ lto-execute $src $sid
+ }
+}
+
+lto_finish
diff --git a/gcc/testsuite/obj-c++.dg/lto/trivial-1_0.mm b/gcc/testsuite/obj-c++.dg/lto/trivial-1_0.mm
new file mode 100644
index 00000000000..45b6e702481
--- /dev/null
+++ b/gcc/testsuite/obj-c++.dg/lto/trivial-1_0.mm
@@ -0,0 +1,43 @@
+/* { dg-lto-do run } */
+/* { dg-skip-if "Needs OBJC2 ABI" { "*-*-darwin*" && lp64 } { "*" } { "" } } */
+extern "C" {
+extern int printf (char *,...) ;
+extern void abort (void) ;
+}
+
+typedef struct objc_class *Class;
+
+struct objc_class {
+ Class isa;
+ /* other stuff... */
+} ;
+
+@interface myRootObject {
+@public
+ Class isa;
+}
++initialize;
++(Class)class;
+
+@end
+
+@implementation myRootObject
++initialize {
+ return self;
+}
+
++(Class)class {
+ return (Class)self;
+}
+
+@end
+
+int main(void)
+{
+ Class cl = [myRootObject class];
+ if (cl != (Class)0) {
+ printf((char *)"trivial OK\n");
+ return 0;
+ }
+ abort () ;
+}
diff --git a/gcc/testsuite/obj-c++.dg/tls/static-1.mm b/gcc/testsuite/obj-c++.dg/tls/static-1.mm
index 2d20b8881f9..6d58010eb0c 100644
--- a/gcc/testsuite/obj-c++.dg/tls/static-1.mm
+++ b/gcc/testsuite/obj-c++.dg/tls/static-1.mm
@@ -1,5 +1,6 @@
// { dg-do run }
// { dg-require-effective-target tls }
+// { dg-add-options tls }
// { dg-additional-sources "static-1a.mm" }
extern "C" {
diff --git a/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm b/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm
index 056073789a5..1ec8623f3ee 100644
--- a/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm
+++ b/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-1.mm
@@ -1,5 +1,6 @@
// { dg-do run }
// { dg-require-effective-target tls }
+// { dg-add-options tls }
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
extern "C" {
extern void abort ();
diff --git a/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm b/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm
index 233cf20e132..4e5baac790d 100644
--- a/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm
+++ b/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-2.mm
@@ -1,5 +1,6 @@
// { dg-do run }
// { dg-require-effective-target tls }
+// { dg-add-options tls }
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
extern "C" {
@@ -42,4 +43,4 @@ int main (int ac, char *av[])
abort () ;
return 0;
-} \ No newline at end of file
+}
diff --git a/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-3.mm b/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-3.mm
index e106a9fe878..1515d250057 100644
--- a/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-3.mm
+++ b/gcc/testsuite/obj-c++.dg/torture/tls/thr-init-3.mm
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target tls } */
+/* { dg-add-options tls } */
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1.h b/gcc/testsuite/objc-obj-c++-shared/Object1.h
index 3c7dd9aed72..324b6807cf3 100644
--- a/gcc/testsuite/objc-obj-c++-shared/Object1.h
+++ b/gcc/testsuite/objc-obj-c++-shared/Object1.h
@@ -1 +1,150 @@
-/* Object definition taken from <objc/Object.h> */ #ifndef _OBJC_OBJECT1_H_ #define _OBJC_OBJECT1_H_ #undef DO_NEXT_M64_OBJECT_IMPLEMENTATION #ifndef __NEXT_RUNTIME__ # include <objc/Object.h> #else # include "next-abi.h" # ifndef NEXT_OBJC_USE_NEW_INTERFACE /* We are on a next system, or version, that is happy to compile V0 ABI */ # include <objc/Object.h> # else # if (NEXT_OBJC_ABI_VERSION==0) /* We are on a system that has V0 ABI implementation in libobjc.dylib. * However, we need to use the new accessors and pretend that the * structures are opaque to avoid 'deprecated' warnings */ # include <objc/Object.h> # else /* We are on a system that includes a V2 ABI Object in libobjc.dylib. */ # ifdef __OBJC2__ /* ... and we have a V2 ABI compiler .. */ # include <objc/Object.h> # else /* We can't access the Object definition in libobjc.dylib because * we can't yet generate OBJC2 code. * * So we'll roll our own Object - purely for the sake of compile * checks - the code is unlikely to run... */ # ifndef _OBJC_OBJECT_H_ # define _OBJC_OBJECT_H_ #include <stdarg.h> #import <objc/objc-runtime.h> /* This is a cut-down Object with only the methods currently required by the testsuite declared. For those executables that require an implementation (to link) this can be provided in a given test by placing: #include "path/to/objc-c++shared/Object1-implementation.h" at the end of the source for the test. */ @interface Object { Class isa; /* A pointer to the instance's class structure */ } + initialize; - init; + new; + free; - free; + alloc; //- copy; //+ allocFromZone:(void *)zone; //- copyFromZone:(void *)zone; //- (void *)zone; + class; //+ superclass; //+ (const char *) name; - class; - superclass; - (const char *) name; //- self; //- (unsigned int) hash; //-(BOOL) isEqual:anObject; /* Testing inheritance relationships */ //- (BOOL) isKindOf: aClassObject; //- (BOOL) isMemberOf: aClassObject; //- (BOOL) isKindOfClassNamed: (const char *)aClassName; //- (BOOL) isMemberOfClassNamed: (const char *)aClassName; /* Testing class functionality */ //+ (BOOL) instancesRespondTo:(SEL)aSelector; //- (BOOL) respondsTo:(SEL)aSelector; /* Testing protocol conformance */ - (BOOL) conformsTo: (Protocol *)aProtocolObject; //+ (BOOL) conformsTo: (Protocol *)aProtocolObject; /* Obtaining method descriptors from protocols */ //- (struct objc_method_description *) descriptionForMethod:(SEL)aSel; //+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel; /* Obtaining method handles */ //- (IMP) methodFor:(SEL)aSelector; //+ (IMP) instanceMethodFor:(SEL)aSelector; /* Sending messages determined at run time */ //- perform:(SEL)aSelector; //- perform:(SEL)aSelector with:anObject; //- perform:(SEL)aSelector with:object1 with:object2; /* Posing */ //+ poseAs: aClassObject; /* Enforcing intentions */ //- subclassResponsibility:(SEL)aSelector; //- notImplemented:(SEL)aSelector; /* Error handling */ //- doesNotRecognize:(SEL)aSelector; //- error:(const char *)aString, ...; /* Debugging */ //- (void) printForDebugger:(void *)stream; /* Archiving */ //- awake; //- write:(void *)stream; //- read:(void *)stream; //+ (int) version; //+ setVersion: (int) aVersion; /* Forwarding */ //- forward: (SEL)sel : (marg_list)args; //- performv: (SEL)sel : (marg_list)args; @end #define DO_NEXT_M64_OBJECT_IMPLEMENTATION # endif /* _OBJC_OBJECT_H_ */ # endif /* __OBJC2__ */ # endif /* ABI=0 */ # endif /* NEXT_OBJC_USE_NEW_INTERFACE */ # endif /* __NEXT_RUNTIME__ */ #endif /* _OBJC_OBJECT1_H_ */ \ No newline at end of file
+/* Object definition taken from <objc/Object.h>
+ */
+#ifndef _OBJC_OBJECT1_H_
+#define _OBJC_OBJECT1_H_
+
+#undef DO_NEXT_M64_OBJECT_IMPLEMENTATION
+
+#ifndef __NEXT_RUNTIME__
+# include <objc/Object.h>
+#else
+# include "next-abi.h"
+# ifndef NEXT_OBJC_USE_NEW_INTERFACE
+/* We are on a next system, or version, that is happy to compile V0 ABI */
+# include <objc/Object.h>
+# else
+# if (NEXT_OBJC_ABI_VERSION==0)
+/* We are on a system that has V0 ABI implementation in libobjc.dylib.
+ * However, we need to use the new accessors and pretend that the
+ * structures are opaque to avoid 'deprecated' warnings
+ */
+# include <objc/Object.h>
+# else
+/* We are on a system that includes a V2 ABI Object in libobjc.dylib.
+*/
+# ifdef __OBJC2__
+/* ... and we have a V2 ABI compiler .. */
+# include <objc/Object.h>
+# else
+/* We can't access the Object definition in libobjc.dylib because
+ * we can't yet generate OBJC2 code.
+ *
+ * So we'll roll our own Object - purely for the sake of compile
+ * checks - the code is unlikely to run...
+*/
+# ifndef _OBJC_OBJECT_H_
+# define _OBJC_OBJECT_H_
+
+#include <stdarg.h>
+#import <objc/objc-runtime.h>
+
+/* This is a cut-down Object with only the methods currently required
+ by the testsuite declared.
+
+ For those executables that require an implementation (to link) this
+ can be provided in a given test by placing:
+ #include "path/to/objc-c++shared/Object1-implementation.h"
+ at the end of the source for the test.
+*/
+
+@interface Object
+{
+ Class isa; /* A pointer to the instance's class structure */
+}
++ initialize;
+- init;
+
++ new;
++ free;
+- free;
++ alloc;
+//- copy;
+//+ allocFromZone:(void *)zone;
+//- copyFromZone:(void *)zone;
+//- (void *)zone;
+
++ class;
+//+ superclass;
+//+ (const char *) name;
+- class;
+- superclass;
+- (const char *) name;
+
+//- self;
+//- (unsigned int) hash;
+//-(BOOL) isEqual:anObject;
+
+/* Testing inheritance relationships */
+
+//- (BOOL) isKindOf: aClassObject;
+//- (BOOL) isMemberOf: aClassObject;
+//- (BOOL) isKindOfClassNamed: (const char *)aClassName;
+//- (BOOL) isMemberOfClassNamed: (const char *)aClassName;
+
+/* Testing class functionality */
+
+//+ (BOOL) instancesRespondTo:(SEL)aSelector;
+//- (BOOL) respondsTo:(SEL)aSelector;
+
+/* Testing protocol conformance */
+
+- (BOOL) conformsTo: (Protocol *)aProtocolObject;
+//+ (BOOL) conformsTo: (Protocol *)aProtocolObject;
+
+/* Obtaining method descriptors from protocols */
+
+//- (struct objc_method_description *) descriptionForMethod:(SEL)aSel;
+//+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;
+
+/* Obtaining method handles */
+
+//- (IMP) methodFor:(SEL)aSelector;
+//+ (IMP) instanceMethodFor:(SEL)aSelector;
+
+/* Sending messages determined at run time */
+
+//- perform:(SEL)aSelector;
+//- perform:(SEL)aSelector with:anObject;
+//- perform:(SEL)aSelector with:object1 with:object2;
+
+/* Posing */
+
+//+ poseAs: aClassObject;
+
+/* Enforcing intentions */
+
+//- subclassResponsibility:(SEL)aSelector;
+//- notImplemented:(SEL)aSelector;
+
+/* Error handling */
+
+//- doesNotRecognize:(SEL)aSelector;
+//- error:(const char *)aString, ...;
+
+/* Debugging */
+
+//- (void) printForDebugger:(void *)stream;
+
+/* Archiving */
+
+//- awake;
+//- write:(void *)stream;
+//- read:(void *)stream;
+//+ (int) version;
+//+ setVersion: (int) aVersion;
+
+/* Forwarding */
+
+//- forward: (SEL)sel : (marg_list)args;
+//- performv: (SEL)sel : (marg_list)args;
+
+@end
+
+#define DO_NEXT_M64_OBJECT_IMPLEMENTATION
+
+# endif /* _OBJC_OBJECT_H_ */
+# endif /* __OBJC2__ */
+# endif /* ABI=0 */
+# endif /* NEXT_OBJC_USE_NEW_INTERFACE */
+# endif /* __NEXT_RUNTIME__ */
+#endif /* _OBJC_OBJECT1_H_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/next-abi.h b/gcc/testsuite/objc-obj-c++-shared/next-abi.h
index 21a49d341e1..3ab9804e510 100644
--- a/gcc/testsuite/objc-obj-c++-shared/next-abi.h
+++ b/gcc/testsuite/objc-obj-c++-shared/next-abi.h
@@ -19,7 +19,7 @@
#undef NEXT_OBJC_USE_NEW_INTERFACE
#ifdef __NEXT_RUNTIME__
-# if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || __OBJC2__)
+# if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1050 || __OBJC2__)
/* We have to use an updated interface for 32bit NeXT to avoid
* 'deprecated' warnings.
* For 64bit NeXT the ABI is different (and the interfaces 'deprecated'
@@ -36,7 +36,10 @@
*/
# define NEXT_OBJC_ABI_VERSION 0
# endif
-# endif
-#endif
+# else
+ /* Pre-OSX 10.5 all is ABI 0. */
+# define NEXT_OBJC_ABI_VERSION 0
+# endif /* MAC_OS_X_VERSION_MIN_REQUIRED > 10.5 or OBJC2 */
+#endif /* __NEXT_RUNTIME__ */
#endif /* _OBJC_NEXT_ABI_H_ */
diff --git a/gcc/testsuite/objc.dg/image-info.m b/gcc/testsuite/objc.dg/image-info.m
index 0a740fa31f1..e9e9de68906 100644
--- a/gcc/testsuite/objc.dg/image-info.m
+++ b/gcc/testsuite/objc.dg/image-info.m
@@ -4,6 +4,7 @@
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do compile { target { *-*-darwin* } } } */
+/* { dg-skip-if "NeXT-only" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-freplace-objc-classes" } */
#include "../objc-obj-c++-shared/Object1.h"
diff --git a/gcc/testsuite/objc.dg/lto/lto.exp b/gcc/testsuite/objc.dg/lto/lto.exp
new file mode 100644
index 00000000000..4ea89cced6c
--- /dev/null
+++ b/gcc/testsuite/objc.dg/lto/lto.exp
@@ -0,0 +1,84 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+#
+# Based on gcc/testsuite/gcc.dg/lto/lto.exp.
+
+# Test link-time optimization across multiple files.
+#
+# Programs are broken into multiple files. Each one is compiled
+# separately with LTO information. The final executable is generated
+# by collecting all the generated object files using regular LTO or WHOPR.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+# Load procedures from common libraries.
+load_lib standard.exp
+load_lib objc-dg.exp
+
+# Load the language-independent compabibility support procedures.
+load_lib lto.exp
+
+# If LTO has not been enabled, bail.
+if { ![check_effective_target_lto] } {
+ return
+}
+
+global LTO_OPTIONS
+
+set LTO_OPTIONS [list \
+ {-O0 -fwhopr -fgnu-runtime} \
+ {-O2 -fwhopr -fgnu-runtime} \
+ {-O0 -flto -fgnu-runtime} \
+ {-O2 -flto -fgnu-runtime} \
+]
+
+objc_init
+lto_init no-mathlib
+
+# Define an identifier for use with this suite to avoid name conflicts
+# with other lto tests running at the same time.
+set sid "objc_lto"
+set tests [lsort [glob -nocomplain $srcdir/$subdir/*_0.m]]
+
+# Main loop.
+foreach src $tests {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+ }
+ lto-execute $src $sid
+}
+
+# darwin targets can also run code with the NeXT runtime.
+if [istarget "*-*-darwin*" ] {
+set LTO_OPTIONS [list \
+ {-O0 -fwhopr -fnext-runtime} \
+ {-O2 -fwhopr -fnext-runtime} \
+ {-O0 -flto -fnext-runtime} \
+ {-O2 -flto -fnext-runtime} \
+]
+ foreach src $tests {
+ # If we're only testing specific files and this isn't one of them, skip it.
+ if ![runtest_file_p $runtests $src] then {
+ continue
+ }
+ lto-execute $src $sid
+ }
+}
+
+lto_finish
diff --git a/gcc/testsuite/objc.dg/lto/trivial-1_0.m b/gcc/testsuite/objc.dg/lto/trivial-1_0.m
new file mode 100644
index 00000000000..076f2306c1b
--- /dev/null
+++ b/gcc/testsuite/objc.dg/lto/trivial-1_0.m
@@ -0,0 +1,37 @@
+/* { dg-lto-do run } */
+/* { dg-skip-if "" { "*-*-darwin*" && lp64 } { "*" } { "" } } */
+extern int printf (char *,...) ;
+
+typedef struct objc_class *Class;
+
+struct objc_class {
+ Class isa;
+ /* other stuff... */
+} ;
+
+@interface myRootObject {
+@public
+ Class isa;
+}
++initialize;
++(Class)class;
+
+@end
+
+@implementation myRootObject
++initialize {
+ return self;
+}
+
++(Class)class {
+ return (Class)self;
+}
+
+@end
+
+int main(void)
+{
+ [myRootObject class];
+ printf("trivial OK\n");
+ return 0;
+}
diff --git a/gcc/testsuite/objc.dg/symtab-1.m b/gcc/testsuite/objc.dg/symtab-1.m
index 90a79691721..100b245325e 100644
--- a/gcc/testsuite/objc.dg/symtab-1.m
+++ b/gcc/testsuite/objc.dg/symtab-1.m
@@ -22,6 +22,7 @@
-(void)checkValues { }
@end
-/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.long\t0\n\t.long\t0\n\t.word\t2\n\t.word\t0\n\t.long\tL_OBJC_CLASS_Derived.*\n\t.long\tL_OBJC_CLASS_Base.*\n" { target { i?86-*-darwin* && { ! lp64 } } } } } */
-/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.long\t0\n\t.long\t0\n\t.short\t2\n\t.short\t0\n\t.long\tL_OBJC_CLASS_Derived.*\n\t.long\tL_OBJC_CLASS_Base.*\n" { target { powerpc-*-darwin* && { ! lp64 } } } } } */
-/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.quad\t0\n\t.long\t0\n\t.space 4\n\t.word\t2\n\t.word\t0\n\t.space 4\n\t.quad\tL_OBJC_CLASS_Derived.*\n\t.quad\tL_OBJC_CLASS_Base.*\n" { target { *-*-darwin* && { lp64 } } } } } */
+/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.long\t0\n\t.long\t0\n\t.word\t2\n\t.word\t0\n\t.long\tL_OBJC_CLASS_Derived.*\n\t.long\tL_OBJC_CLASS_Base.*\n" { target { *86*-*-darwin* && { ! lp64 } } } } } */
+/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.long\t0\n\t.long\t0\n\t.short\t2\n\t.short\t0\n\t.long\tL_OBJC_CLASS_Derived.*\n\t.long\tL_OBJC_CLASS_Base.*\n" { target { powerpc*-*-darwin* && { ! lp64 } } } } } */
+/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.quad\t0\n\t.quad\t0\n\t.word\t2\n\t.word\t0\n\t.space 4\n\t.quad\tL_OBJC_CLASS_Derived.*\n\t.quad\tL_OBJC_CLASS_Base.*\n" { target { *86*-*-darwin* && { lp64 } } } } } */
+/* { dg-final { scan-assembler "L_OBJC_SYMBOLS.*:\n\t.quad\t0\n\t.quad\t0\n\t.short\t2\n\t.short\t0\n\t.space 4\n\t.quad\tL_OBJC_CLASS_Derived.*\n\t.quad\tL_OBJC_CLASS_Base.*\n" { target { powerpc*-*-darwin* && { lp64 } } } } } */
diff --git a/gcc/testsuite/objc.dg/torture/tls/thr-init-2.m b/gcc/testsuite/objc.dg/torture/tls/thr-init-2.m
index b637e2544e6..9a946bb444d 100644
--- a/gcc/testsuite/objc.dg/torture/tls/thr-init-2.m
+++ b/gcc/testsuite/objc.dg/torture/tls/thr-init-2.m
@@ -1,5 +1,6 @@
// { dg-do run }
// { dg-require-effective-target tls }
+// { dg-add-options tls }
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
extern void _exit(int);
diff --git a/gcc/testsuite/objc.dg/torture/tls/thr-init-3.m b/gcc/testsuite/objc.dg/torture/tls/thr-init-3.m
index f30315d8819..6ac977c9bae 100644
--- a/gcc/testsuite/objc.dg/torture/tls/thr-init-3.m
+++ b/gcc/testsuite/objc.dg/torture/tls/thr-init-3.m
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target tls } */
+/* { dg-add-options tls } */
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
diff --git a/gcc/testsuite/objc.dg/torture/tls/thr-init.m b/gcc/testsuite/objc.dg/torture/tls/thr-init.m
index 6c3bad1b9bb..286a4706f06 100644
--- a/gcc/testsuite/objc.dg/torture/tls/thr-init.m
+++ b/gcc/testsuite/objc.dg/torture/tls/thr-init.m
@@ -1,5 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target tls } */
+/* { dg-add-options tls } */
/* { dg-skip-if "PR44140" { *-*-* } { "-flto" "-fwhopr" } { "" } } */
extern void _exit(int);
diff --git a/gcc/testsuite/objc/execute/forward-1.m b/gcc/testsuite/objc/execute/forward-1.m
index c20f8c4934f..258a9164999 100644
--- a/gcc/testsuite/objc/execute/forward-1.m
+++ b/gcc/testsuite/objc/execute/forward-1.m
@@ -55,13 +55,12 @@ id forwarder, receiver;
receiver = theReceiver;
return self;
}
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
+#ifdef __NEXT_RUNTIME__
- forward: (SEL)theSel: (marg_list)theArgFrame
-{
#else
-(retval_t) forward: (SEL)theSel: (arglist_t)theArgFrame
-{
#endif
+{
/* If we have a reciever try to perform on that object */
if (receiver)
return [receiver performv: theSel: theArgFrame];