Merge lp:~ams-codesourcery/gcc-linaro/4.5-merge-svn172013 into lp:gcc-linaro/4.5

Proposed by Andrew Stubbs
Status: Merged
Merge reported by: Andrew Stubbs
Merged at revision: not available
Proposed branch: lp:~ams-codesourcery/gcc-linaro/4.5-merge-svn172013
Merge into: lp:gcc-linaro/4.5
Diff against target: 7080 lines (+3085/-727)
224 files modified
ChangeLog.linaro (+4/-0)
gcc/ChangeLog (+225/-0)
gcc/DATESTAMP (+1/-1)
gcc/caller-save.c (+2/-2)
gcc/cgraph.c (+1/-1)
gcc/config.gcc (+10/-0)
gcc/config/arm/predicates.md (+1/-0)
gcc/config/avr/avr.c (+67/-4)
gcc/config/freebsd-spec.h (+5/-1)
gcc/config/i386/avxintrin.h (+2/-2)
gcc/config/i386/i386.h (+1/-1)
gcc/config/i386/i386.opt (+2/-2)
gcc/config/i386/sse.md (+8/-8)
gcc/config/rs6000/rs6000.h (+10/-0)
gcc/config/rx/rx-protos.h (+2/-0)
gcc/config/rx/rx.c (+55/-10)
gcc/config/rx/rx.h (+27/-1)
gcc/config/rx/rx.md (+141/-5)
gcc/config/s390/s390.c (+12/-4)
gcc/cp/ChangeLog (+73/-0)
gcc/cp/decl.c (+1/-1)
gcc/cp/mangle.c (+4/-0)
gcc/cp/name-lookup.c (+9/-2)
gcc/cp/parser.c (+8/-2)
gcc/cp/pt.c (+28/-16)
gcc/cp/tree.c (+12/-6)
gcc/doc/cfg.texi (+1/-2)
gcc/doc/cpp.texi (+5/-4)
gcc/doc/extend.texi (+36/-36)
gcc/doc/invoke.texi (+101/-101)
gcc/fortran/ChangeLog (+24/-0)
gcc/fortran/f95-lang.c (+6/-5)
gcc/fortran/openmp.c (+1/-0)
gcc/fortran/trans-array.c (+52/-50)
gcc/stor-layout.c (+0/-5)
gcc/testsuite/ChangeLog (+165/-0)
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C (+8/-0)
gcc/testsuite/g++.dg/cpp0x/variadic105.C (+24/-0)
gcc/testsuite/g++.dg/lookup/template3.C (+35/-0)
gcc/testsuite/g++.dg/opt/pr47615.C (+711/-0)
gcc/testsuite/g++.dg/opt/pr47639.c (+17/-0)
gcc/testsuite/g++.dg/template/anon5.C (+6/-0)
gcc/testsuite/g++.dg/template/array22.C (+14/-0)
gcc/testsuite/g++.dg/template/error45.C (+22/-0)
gcc/testsuite/g++.dg/template/nontype21.C (+7/-0)
gcc/testsuite/g++.dg/template/nontype22.C (+11/-0)
gcc/testsuite/g++.dg/template/this-targ1.C (+23/-0)
gcc/testsuite/gcc.c-torture/execute/postmod-1.c (+0/-62)
gcc/testsuite/gcc.dg/torture/20090618-1.c (+1/-0)
gcc/testsuite/gcc.dg/torture/pr39074-2.c (+1/-1)
gcc/testsuite/gcc.dg/torture/pr45967-2.c (+24/-0)
gcc/testsuite/gcc.dg/torture/pr45967-3.c (+21/-0)
gcc/testsuite/gcc.dg/torture/pr45967.c (+21/-0)
gcc/testsuite/gcc.dg/torture/pr46723.c (+10/-0)
gcc/testsuite/gcc.dg/torture/pr47278-1.c (+5/-0)
gcc/testsuite/gcc.dg/torture/pr47278-2.c (+15/-0)
gcc/testsuite/gcc.dg/torture/pr47890.c (+9/-0)
gcc/testsuite/gcc.dg/torture/pta-escape-1.c (+1/-1)
gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c (+1/-1)
gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c (+1/-1)
gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c (+1/-1)
gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c (+1/-1)
gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c (+1/-1)
gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c (+1/-1)
gcc/testsuite/gcc.target/arm/neon-vld-1.c (+0/-13)
gcc/testsuite/gcc.target/powerpc/pr47862.c (+19/-0)
gcc/testsuite/gcc.target/powerpc/pr48192.c (+49/-0)
gcc/testsuite/gfortran.dg/array_constructor_36.f90 (+21/-0)
gcc/testsuite/gfortran.dg/g77/cabs.f (+2/-1)
gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90 (+8/-0)
gcc/testsuite/gfortran.dg/namelist_71.f90 (+36/-0)
gcc/testsuite/gfortran.dg/pr47878.f90 (+10/-0)
gcc/tree-inline.c (+1/-1)
gcc/tree-ssa-pre.c (+1/-1)
gcc/tree-ssa-sccvn.c (+8/-4)
gcc/tree-ssa-sccvn.h (+3/-2)
gcc/tree-ssa-structalias.c (+122/-126)
gcc/tree-vect-generic.c (+11/-4)
gcc/tree-vect-loop.c (+46/-20)
gcc/tree-vect-stmts.c (+4/-5)
gcc/tree.c (+8/-2)
gcc/tree.h (+2/-20)
gcc/varasm.c (+45/-0)
libcpp/ChangeLog (+10/-1)
libcpp/directives.c (+12/-2)
libcpp/expr.c (+6/-1)
libgcc/ChangeLog (+12/-0)
libgcc/config.host (+2/-0)
libgcc/config/rs6000/t-ppccomm (+3/-1)
libgfortran/ChangeLog (+150/-0)
libgfortran/generated/all_l1.c (+1/-1)
libgfortran/generated/all_l16.c (+1/-1)
libgfortran/generated/all_l2.c (+1/-1)
libgfortran/generated/all_l4.c (+1/-1)
libgfortran/generated/all_l8.c (+1/-1)
libgfortran/generated/any_l1.c (+1/-1)
libgfortran/generated/any_l16.c (+1/-1)
libgfortran/generated/any_l2.c (+1/-1)
libgfortran/generated/any_l4.c (+1/-1)
libgfortran/generated/any_l8.c (+1/-1)
libgfortran/generated/count_16_l.c (+1/-1)
libgfortran/generated/count_1_l.c (+1/-1)
libgfortran/generated/count_2_l.c (+1/-1)
libgfortran/generated/count_4_l.c (+1/-1)
libgfortran/generated/count_8_l.c (+1/-1)
libgfortran/generated/maxloc1_16_i1.c (+1/-1)
libgfortran/generated/maxloc1_16_i16.c (+1/-1)
libgfortran/generated/maxloc1_16_i2.c (+1/-1)
libgfortran/generated/maxloc1_16_i4.c (+1/-1)
libgfortran/generated/maxloc1_16_i8.c (+1/-1)
libgfortran/generated/maxloc1_16_r10.c (+1/-1)
libgfortran/generated/maxloc1_16_r16.c (+1/-1)
libgfortran/generated/maxloc1_16_r4.c (+1/-1)
libgfortran/generated/maxloc1_16_r8.c (+1/-1)
libgfortran/generated/maxloc1_4_i1.c (+1/-1)
libgfortran/generated/maxloc1_4_i16.c (+1/-1)
libgfortran/generated/maxloc1_4_i2.c (+1/-1)
libgfortran/generated/maxloc1_4_i4.c (+1/-1)
libgfortran/generated/maxloc1_4_i8.c (+1/-1)
libgfortran/generated/maxloc1_4_r10.c (+1/-1)
libgfortran/generated/maxloc1_4_r16.c (+1/-1)
libgfortran/generated/maxloc1_4_r4.c (+1/-1)
libgfortran/generated/maxloc1_4_r8.c (+1/-1)
libgfortran/generated/maxloc1_8_i1.c (+1/-1)
libgfortran/generated/maxloc1_8_i16.c (+1/-1)
libgfortran/generated/maxloc1_8_i2.c (+1/-1)
libgfortran/generated/maxloc1_8_i4.c (+1/-1)
libgfortran/generated/maxloc1_8_i8.c (+1/-1)
libgfortran/generated/maxloc1_8_r10.c (+1/-1)
libgfortran/generated/maxloc1_8_r16.c (+1/-1)
libgfortran/generated/maxloc1_8_r4.c (+1/-1)
libgfortran/generated/maxloc1_8_r8.c (+1/-1)
libgfortran/generated/maxval_i1.c (+1/-1)
libgfortran/generated/maxval_i16.c (+1/-1)
libgfortran/generated/maxval_i2.c (+1/-1)
libgfortran/generated/maxval_i4.c (+1/-1)
libgfortran/generated/maxval_i8.c (+1/-1)
libgfortran/generated/maxval_r10.c (+1/-1)
libgfortran/generated/maxval_r16.c (+1/-1)
libgfortran/generated/maxval_r4.c (+1/-1)
libgfortran/generated/maxval_r8.c (+1/-1)
libgfortran/generated/minloc1_16_i1.c (+1/-1)
libgfortran/generated/minloc1_16_i16.c (+1/-1)
libgfortran/generated/minloc1_16_i2.c (+1/-1)
libgfortran/generated/minloc1_16_i4.c (+1/-1)
libgfortran/generated/minloc1_16_i8.c (+1/-1)
libgfortran/generated/minloc1_16_r10.c (+1/-1)
libgfortran/generated/minloc1_16_r16.c (+1/-1)
libgfortran/generated/minloc1_16_r4.c (+1/-1)
libgfortran/generated/minloc1_16_r8.c (+1/-1)
libgfortran/generated/minloc1_4_i1.c (+1/-1)
libgfortran/generated/minloc1_4_i16.c (+1/-1)
libgfortran/generated/minloc1_4_i2.c (+1/-1)
libgfortran/generated/minloc1_4_i4.c (+1/-1)
libgfortran/generated/minloc1_4_i8.c (+1/-1)
libgfortran/generated/minloc1_4_r10.c (+1/-1)
libgfortran/generated/minloc1_4_r16.c (+1/-1)
libgfortran/generated/minloc1_4_r4.c (+1/-1)
libgfortran/generated/minloc1_4_r8.c (+1/-1)
libgfortran/generated/minloc1_8_i1.c (+1/-1)
libgfortran/generated/minloc1_8_i16.c (+1/-1)
libgfortran/generated/minloc1_8_i2.c (+1/-1)
libgfortran/generated/minloc1_8_i4.c (+1/-1)
libgfortran/generated/minloc1_8_i8.c (+1/-1)
libgfortran/generated/minloc1_8_r10.c (+1/-1)
libgfortran/generated/minloc1_8_r16.c (+1/-1)
libgfortran/generated/minloc1_8_r4.c (+1/-1)
libgfortran/generated/minloc1_8_r8.c (+1/-1)
libgfortran/generated/minval_i1.c (+1/-1)
libgfortran/generated/minval_i16.c (+1/-1)
libgfortran/generated/minval_i2.c (+1/-1)
libgfortran/generated/minval_i4.c (+1/-1)
libgfortran/generated/minval_i8.c (+1/-1)
libgfortran/generated/minval_r10.c (+1/-1)
libgfortran/generated/minval_r16.c (+1/-1)
libgfortran/generated/minval_r4.c (+1/-1)
libgfortran/generated/minval_r8.c (+1/-1)
libgfortran/generated/product_c10.c (+1/-1)
libgfortran/generated/product_c16.c (+1/-1)
libgfortran/generated/product_c4.c (+1/-1)
libgfortran/generated/product_c8.c (+1/-1)
libgfortran/generated/product_i1.c (+1/-1)
libgfortran/generated/product_i16.c (+1/-1)
libgfortran/generated/product_i2.c (+1/-1)
libgfortran/generated/product_i4.c (+1/-1)
libgfortran/generated/product_i8.c (+1/-1)
libgfortran/generated/product_r10.c (+1/-1)
libgfortran/generated/product_r16.c (+1/-1)
libgfortran/generated/product_r4.c (+1/-1)
libgfortran/generated/product_r8.c (+1/-1)
libgfortran/generated/sum_c10.c (+1/-1)
libgfortran/generated/sum_c16.c (+1/-1)
libgfortran/generated/sum_c4.c (+1/-1)
libgfortran/generated/sum_c8.c (+1/-1)
libgfortran/generated/sum_i1.c (+1/-1)
libgfortran/generated/sum_i16.c (+1/-1)
libgfortran/generated/sum_i2.c (+1/-1)
libgfortran/generated/sum_i4.c (+1/-1)
libgfortran/generated/sum_i8.c (+1/-1)
libgfortran/generated/sum_r10.c (+1/-1)
libgfortran/generated/sum_r16.c (+1/-1)
libgfortran/generated/sum_r4.c (+1/-1)
libgfortran/generated/sum_r8.c (+1/-1)
libgfortran/intrinsics/c99_functions.c (+1/-1)
libgfortran/io/fbuf.h (+6/-0)
libgfortran/io/list_read.c (+10/-1)
libgfortran/io/transfer.c (+28/-31)
libgfortran/m4/ifunction.m4 (+1/-1)
libgfortran/m4/ifunction_logical.m4 (+1/-1)
libgomp/ChangeLog (+9/-0)
libgomp/testsuite/libgomp.fortran/task3.f90 (+27/-0)
libstdc++-v3/ChangeLog (+42/-0)
libstdc++-v3/include/bits/random.tcc (+2/-2)
libstdc++-v3/include/parallel/algo.h (+7/-7)
libstdc++-v3/include/parallel/algobase.h (+2/-2)
libstdc++-v3/include/parallel/balanced_quicksort.h (+4/-4)
libstdc++-v3/include/parallel/losertree.h (+8/-4)
libstdc++-v3/include/parallel/numeric (+3/-3)
libstdc++-v3/include/parallel/partition.h (+5/-5)
libstdc++-v3/testsuite/22_locale/num_put/put/char/14220.cc (+3/-4)
libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed1.cc (+53/-1)
libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_mixed2.cc (+53/-1)
libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed1.cc (+11/-0)
libstdc++-v3/testsuite/26_numerics/headers/numeric/parallel_numeric_mixed2.cc (+11/-0)
To merge this branch: bzr merge lp:~ams-codesourcery/gcc-linaro/4.5-merge-svn172013
Reviewer Review Type Date Requested Status
Andrew Stubbs (community) Approve
Review via email: mp+56560@code.launchpad.net

Description of the change

Merge from FSF 4.5 branch svn r172013.

To post a comment you must log in.
Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild has taken a snapshot of this branch at r99490 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013.tar.xdelta3.xz

and will be built on the following builders:
 a8-builder a9-builder i686 x86_64

You can track the build queue at:
 http://ex.seabright.co.nz/helpers/scheduler

cbuild-snapshot: gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013
cbuild-ancestor: lp:gcc-linaro+bzr99489
cbuild-state: check

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :
Download full text (19.2 KiB)

cbuild successfully built this on i686-lucid-cbuild104-scorpius-i686r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013/logs/i686-lucid-cbuild104-scorpius-i686r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99489:
 -PASS: gcc.dg/torture/pr39074-2.c -O1 scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O1 scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 -flto scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 -flto scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 -fwhopr scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 -fwhopr scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O3 -fomit-frame-pointer scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O3 -fomit-frame-pointer scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O3 -g scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O3 -g scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -Os scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -Os scan-tree-dump alias "y.._., points-to vars: { i }"
 +PASS: gcc.dg/torture/pr45967-2.c -O0 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O0 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O1 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O1 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -flto execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -flto (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -fwhopr execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -fwhopr (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-loops execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-loops (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer ...

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :
Download full text (19.2 KiB)

cbuild successfully built this on x86_64-maverick-cbuild102-crucis-x86_64r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013/logs/x86_64-maverick-cbuild102-crucis-x86_64r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99489:
 -PASS: gcc.dg/torture/pr39074-2.c -O1 scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O1 scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 -flto scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 -flto scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 -fwhopr scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 -fwhopr scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O3 -fomit-frame-pointer scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O3 -fomit-frame-pointer scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O3 -g scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O3 -g scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -Os scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -Os scan-tree-dump alias "y.._., points-to vars: { i }"
 +PASS: gcc.dg/torture/pr45967-2.c -O0 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O0 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O1 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O1 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -flto execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -flto (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -fwhopr execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -fwhopr (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-loops execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-loops (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame...

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :

cbuild successfully built this on armv7l-maverick-cbuild104-ursa2-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013/logs/armv7l-maverick-cbuild104-ursa2-cortexa9r1

The test suite was not checked as the branch point lp:gcc-linaro+bzr99489 has nothing to compare against.

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013/logs/armv7l-maverick-cbuild104-ursa2-cortexa9r1/gcc-testsuite.txt

cbuild-checked: armv7l-maverick-cbuild104-ursa2-cortexa9r1

Revision history for this message
Linaro Toolchain Builder (cbuild) wrote :
Download full text (19.9 KiB)

cbuild successfully built this on armv7l-maverick-cbuild104-ursa4-cortexa8r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99490~ams-codesourcery~4.5-merge-svn172013/logs/armv7l-maverick-cbuild104-ursa4-cortexa8r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99489:
 -PASS: gcc.c-torture/compile/limits-fndefn.c -O3 -g (test for excess errors)
 +FAIL: gcc.c-torture/compile/limits-fndefn.c -O3 -g (test for excess errors)
 -PASS: gcc.dg/torture/pr39074-2.c -O1 scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O1 scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 -flto scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 -flto scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 -fwhopr scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 -fwhopr scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O2 scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O2 scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O3 -fomit-frame-pointer scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O3 -fomit-frame-pointer scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -O3 -g scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -O3 -g scan-tree-dump alias "y.._., points-to vars: { i }"
 -PASS: gcc.dg/torture/pr39074-2.c -Os scan-tree-dump alias "y.._., points-to non-local, points-to escaped, points-to vars: { i }"
 +PASS: gcc.dg/torture/pr39074-2.c -Os scan-tree-dump alias "y.._., points-to vars: { i }"
 +PASS: gcc.dg/torture/pr45967-2.c -O0 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O0 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O1 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O1 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -flto execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -flto (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -fwhopr execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O2 -fwhopr (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O2 (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions execution test
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions (test for excess errors)
 +PASS: gcc.dg/torture/pr45967-2.c -O3 -fomit-frame-pointer -funroll-loops executi...

Revision history for this message
Andrew Stubbs (ams-codesourcery) wrote :

The test have passed. (Apart from the largefile.c segmentation fault, but that's probably a blip, and not a reason not to merge from upstream.)

Therefore I'm going to merge this.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog.linaro'
2--- ChangeLog.linaro 2011-03-11 17:36:50 +0000
3+++ ChangeLog.linaro 2011-04-06 13:16:33 +0000
4@@ -1,3 +1,7 @@
5+2011-04-06 Andrew Stubbs <ams@codesourcery.com>
6+
7+ Merge from FSF 4.5 branch r172013 (pre 4.5.3).
8+
9 2011-03-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
10
11 LP:730440
12
13=== modified file 'gcc/ChangeLog'
14--- gcc/ChangeLog 2011-02-18 21:30:25 +0000
15+++ gcc/ChangeLog 2011-04-06 13:16:33 +0000
16@@ -1,3 +1,228 @@
17+2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
18+
19+ Backport from mainline
20+ 2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
21+
22+ PR target/48349
23+ * config/i386/i386.h (REG_CLASS_CONTENTS): Fix a typo in
24+ FLOAT_SSE_REGS.
25+
26+2011-03-29 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
27+
28+ * config/s390/s390.c (s390_preferred_reload_class): Return NO_REGS
29+ for invalid symbolic addresses.
30+ (s390_secondary_reload): Don't use s390_check_symref_alignment for
31+ larl operands.
32+
33+2011-03-28 Richard Sandiford <richard.sandiford@linaro.org>
34+
35+ PR target/47553
36+ * config/arm/predicates.md (neon_lane_number): Accept 0..15.
37+
38+2011-03-23 Jonathan Wakely <jwakely.gcc@gmail.com>
39+
40+ PR other/48254
41+ * doc/invoke.texi (-fipa-struct-reorg): Fix typo.
42+
43+2011-03-23 Jonathan Wakely <jwakely.gcc@gmail.com>
44+
45+ PR other/48179
46+ PR other/48234
47+ * doc/extend.texi (Alignment): Move section to match order in TOC.
48+ * doc/invoke.texi (i386 and x86-64 Windows Options): Likewise.
49+
50+2011-03-18 H.J. Lu <hongjiu.lu@intel.com>
51+
52+ Backport from mainline
53+ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com>
54+
55+ PR target/48171
56+ * config/i386/i386.opt: Add Save to -mavx and -mfma.
57+
58+2011-03-16 Pat Haugen <pthaugen@us.ibm.com>
59+
60+ PR target/47862
61+ * caller-save.c (insert_restore, insert_save): Use non-validate
62+ form of adjust_address.
63+
64+2011-03-16 Nick Clifton <nickc@redhat.com>
65+
66+ * config/rx/rx.h (JUMP_ALIGN): Define.
67+ (JUMP_ALIGN_MAX_SKIP, LABEL_ALIGN_AFTER_BARRIER, LOOP_ALIGN,
68+ (LABEL_ALIGN, LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP,
69+ (LOOP_ALIGN_MAX_SKIP, LABEL_ALIGN_MAX_SKIP): Define.
70+ * config/rx/rx-protos.h (rx_align_for_label): Prototype.
71+ (rx_max_skip_for_label): Prototype.
72+ * config/rx/rx.md (abssi3): Use CC_ZSmode.
73+ (andis3): Fix timings.
74+ (peephole): Add peephole to combine zero- and sign- extending
75+ loads with arithmetic instructions.
76+ (bset): Fix timing.
77+ (bclr): Fix timing.
78+ * config/rx/rx.c (rx_is_legitimate_address): Add checks for QImode
79+ and HImode reg+int address.
80+ (rx_print_operand): Add support for %R. Fix generation of .B and
81+ .W addressing modes.
82+ (rx_align_for_label): New function.
83+ (rx_max_skip_for_label): New function.
84+
85+2011-03-10 Jason Merrill <jason@redhat.com>
86+
87+ PR c++/48029
88+ * stor-layout.c (layout_type): Don't set structural equality
89+ on arrays of incomplete type.
90+ * tree.c (type_hash_eq): Handle comparing them properly.
91+
92+2011-03-08 Richard Guenther <rguenther@suse.de>
93+
94+ Backport from mainline
95+ 2011-02-10 Richard Guenther <rguenther@suse.de>
96+
97+ * tree-ssa-structalias.c (bitpos_of_field): Use BITS_PER_UNIT, not 8.
98+
99+ 2010-10-18 Richard Guenther <rguenther@suse.de>
100+
101+ PR tree-optimization/45967
102+ * tree-ssa-structalias.c (type_could_have_pointers): Remove.
103+ (could_have_pointers): Likewise.
104+ (handle_rhs_call, handle_const_call, handle_pure_call,
105+ find_func_aliases, intra_create_variable_infos): Remove calls to them.
106+ (struct fieldoff): Add must_have_pointers field.
107+ (type_must_have_pointers): New function.
108+ (field_must_have_pointers): Likewise.
109+ (push_fields_onto_fieldstack): Remove must_have_pointers_p argument.
110+ Adjust field merging.
111+ (create_function_info_for): May-have-pointers of varinfo is
112+ almost always true.
113+ (create_variable_info_for_1): Likewise.
114+
115+ 2010-10-12 Richard Guenther <rguenther@suse.de>
116+
117+ * tree-ssa-structalias.c (get_constraint_for_1): Constants
118+ only point to nonlocal, not anything.
119+
120+2011-03-08 Richard Guenther <rguenther@suse.de>
121+
122+ PR tree-optimization/47278
123+ * tree.h (DECL_REPLACEABLE_P): Remove.
124+ (decl_replaceable_p): Declare.
125+ (decl_binds_to_current_def_p): Likewise.
126+ * varasm.c (decl_replaceable_p): New function.
127+ (decl_binds_to_current_def_p): Likewise.
128+ * cgraph.c (cgraph_function_body_availability): Use decl_replaceable_p.
129+ * tree-inline.c (inlinable_function_p): Likewise.
130+
131+2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
132+
133+ Backport from mainline
134+ 2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
135+
136+ PR target/47862
137+ * config/rs6000/rs6000.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
138+
139+2011-03-07 Mingjie Xing <mingjie.xing@gmail.com>
140+
141+ * doc/cfg.texi: Remove "See" before @ref.
142+ * doc/invoke.texi: Likewise.
143+
144+2011-03-03 Uros Bizjak <ubizjak@gmail.com>
145+
146+ * config/i386/sse.md (*avx_pmaddubsw128): Fix mode of VEC_SELECT RTX.
147+ (ssse3_pmaddubsw128): Ditto.
148+ (ssse3_pmaddubsw): Ditto.
149+
150+2011-03-03 Denis Chertykov <chertykov@gmail.com>
151+
152+ Backport from mainline
153+ 2011-02-22 Georg-Johann Lay <avr@gjlay.de>
154+
155+ PR target/42240
156+ * config/avr/avr.c (avr_cannot_modify_jumps_p): New function.
157+ (TARGET_CANNOT_MODIFY_JUMPS_P): Define.
158+
159+2011-03-03 Richard Guenther <rguenther@suse.de>
160+
161+ * tree-vect-stmt.c (vectorizable_operation): Remove unused vars.
162+
163+2011-03-02 Richard Guenther <rguenther@suse.de>
164+
165+ Backport from mainline
166+ 2011-02-07 Richard Guenther <rguenther@suse.de>
167+
168+ PR tree-optimization/47615
169+ * tree-ssa-sccvn.h (run_scc_vn): Take a vn-walk mode argument.
170+ * tree-ssa-sccvn.c (default_vn_walk_kind): New global.
171+ (run_scc_vn): Initialize it.
172+ (visit_reference_op_load): Use it.
173+ * tree-ssa-pre.c (execute_pre): Use VN_WALK if in PRE.
174+
175+2011-03-01 Richard Guenther <rguenther@suse.de>
176+
177+ Backport from mainline
178+ 2011-02-08 Richard Guenther <rguenther@suse.de>
179+
180+ PR middle-end/47639
181+ * tree-vect-generic.c (expand_vector_operations_1): Update
182+ stmts here ...
183+ (expand_vector_operations): ... not here. Cleanup EH info
184+ and the CFG if required.
185+
186+2011-03-01 Richard Guenther <rguenther@suse.de>
187+
188+ Backport from mainline
189+ 2011-03-01 Richard Guenther <rguenther@suse.de>
190+
191+ PR tree-optimization/47890
192+ * tree-vect-loop.c (get_initial_def_for_induction): Set
193+ related stmt properly.
194+
195+ 2010-12-01 Richard Guenther <rguenther@suse.de>
196+
197+ PR tree-optimization/46723
198+ * tree-vect-loop.c (get_initial_def_for_induction): Strip
199+ conversions from the induction evolution and apply it to
200+ the result instead.
201+ * tree-vect-stmts.c (vect_get_vec_def_for_operand): Handle
202+ assigns for induction defs.
203+
204+2011-02-28 Georg-Johann Lay <avr@gjlay.de>
205+
206+ PR target/45261
207+ * config/avr/avr.c (avr_option_override): Use error on bad options.
208+ (avr_help): New function.
209+ (TARGET_HELP): Define.
210+
211+2011-02-26 Gerald Pfeifer <gerald@pfeifer.com>
212+
213+ * doc/invoke.texi (ARC Options): Use CPU instead of cpu.
214+ (ARM Options): Ditto.
215+ (i386 and x86-64 Options): Ditto.
216+ (RX Options): Ditto.
217+ (SPARC Options): Ditto.
218+
219+2011-02-26 Tijl Coosemans <tijl@coosemans.org>
220+
221+ * config.gcc (i386-*-freebsd*): Make i486 the default arch on
222+ FreeBSD 6 and later. Generally use cpu generic.
223+
224+2011-02-25 Gerald Pfeifer <gerald@pfeifer.com>
225+
226+ * doc/cpp.texi (Obsolete Features): Add background on the
227+ origin of assertions.
228+ Update copyright years.
229+
230+2011-02-25 Andriy Gapon <avg@freebsd.org>
231+
232+ PR target/45808
233+ * config/freebsd-spec.h (FBSD_LIB_SPEC): Handle the shared case.
234+ Update copyright years.
235+
236+2011-02-21 Uros Bizjak <ubizjak@gmail.com>
237+
238+ PR target/47840
239+ * config/i386/avxintrin.h (_mm256_insert_epi32): Use _mm_insert_epi32.
240+ (_mm256_insert_epi64): Use _mm_insert_epi64.
241+
242 2011-02-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
243
244 * config.gcc (hppa[12]*-*-hpux11*): Set extra_parts.
245
246=== modified file 'gcc/DATESTAMP'
247--- gcc/DATESTAMP 2011-02-21 00:18:37 +0000
248+++ gcc/DATESTAMP 2011-04-06 13:16:33 +0000
249@@ -1,1 +1,1 @@
250-20110221
251+20110406
252
253=== modified file 'gcc/caller-save.c'
254--- gcc/caller-save.c 2010-08-12 08:09:49 +0000
255+++ gcc/caller-save.c 2011-04-06 13:16:33 +0000
256@@ -1215,7 +1215,7 @@
257 /* Check that insn to restore REGNO in save_mode[regno] is
258 correct. */
259 && reg_save_code (regno, save_mode[regno]) >= 0)
260- mem = adjust_address (mem, save_mode[regno], 0);
261+ mem = adjust_address_nv (mem, save_mode[regno], 0);
262 else
263 mem = copy_rtx (mem);
264
265@@ -1296,7 +1296,7 @@
266 /* Check that insn to save REGNO in save_mode[regno] is
267 correct. */
268 && reg_save_code (regno, save_mode[regno]) >= 0)
269- mem = adjust_address (mem, save_mode[regno], 0);
270+ mem = adjust_address_nv (mem, save_mode[regno], 0);
271 else
272 mem = copy_rtx (mem);
273
274
275=== modified file 'gcc/cgraph.c'
276--- gcc/cgraph.c 2010-07-01 10:03:31 +0000
277+++ gcc/cgraph.c 2011-04-06 13:16:33 +0000
278@@ -2093,7 +2093,7 @@
279 AVAIL_AVAILABLE here? That would be good reason to preserve this
280 bit. */
281
282- else if (DECL_REPLACEABLE_P (node->decl) && !DECL_EXTERNAL (node->decl))
283+ else if (decl_replaceable_p (node->decl) && !DECL_EXTERNAL (node->decl))
284 avail = AVAIL_OVERWRITABLE;
285 else avail = AVAIL_AVAILABLE;
286
287
288=== modified file 'gcc/config.gcc'
289--- gcc/config.gcc 2011-02-18 21:30:25 +0000
290+++ gcc/config.gcc 2011-04-06 13:16:33 +0000
291@@ -2631,6 +2631,16 @@
292 arch_without_sse2=no
293 arch_without_64bit=no
294 case ${target} in
295+ i386-*-freebsd*)
296+ if test $fbsd_major -ge 6; then
297+ arch=i486
298+ else
299+ arch=i386
300+ fi
301+ cpu=generic
302+ arch_without_sse2=yes
303+ arch_without_64bit=yes
304+ ;;
305 i386-*-*)
306 arch=i386
307 cpu=i386
308
309=== modified file 'gcc/config/arm/predicates.md'
310--- gcc/config/arm/predicates.md 2011-03-02 12:28:41 +0000
311+++ gcc/config/arm/predicates.md 2011-04-06 13:16:33 +0000
312@@ -608,6 +608,7 @@
313 (define_predicate "neon_lane_number"
314 (and (match_code "const_int")
315 (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 15")))
316+
317 ;; Predicates for named expanders that overlap multiple ISAs.
318
319 (define_predicate "cmpdi_operand"
320
321=== modified file 'gcc/config/avr/avr.c'
322--- gcc/config/avr/avr.c 2010-04-02 18:54:46 +0000
323+++ gcc/config/avr/avr.c 2011-04-06 13:16:33 +0000
324@@ -73,6 +73,7 @@
325 static bool avr_legitimate_address_p (enum machine_mode, rtx, bool);
326 static void avr_asm_function_end_prologue (FILE *);
327 static void avr_asm_function_begin_epilogue (FILE *);
328+static bool avr_cannot_modify_jumps_p (void);
329 static rtx avr_function_value (const_tree, const_tree, bool);
330 static void avr_insert_attributes (tree, tree *);
331 static void avr_asm_init_sections (void);
332@@ -91,6 +92,7 @@
333 static unsigned int avr_case_values_threshold (void);
334 static bool avr_frame_pointer_required_p (void);
335 static bool avr_can_eliminate (const int, const int);
336+static void avr_help (void);
337
338 /* Allocate registers from r25 to r8 for parameters for function calls. */
339 #define FIRST_CUM_REG 26
340@@ -192,6 +194,12 @@
341 #undef TARGET_CAN_ELIMINATE
342 #define TARGET_CAN_ELIMINATE avr_can_eliminate
343
344+#undef TARGET_HELP
345+#define TARGET_HELP avr_help
346+
347+#undef TARGET_CANNOT_MODIFY_JUMPS_P
348+#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p
349+
350 struct gcc_target targetm = TARGET_INITIALIZER;
351
352
353 void
354@@ -207,10 +215,8 @@
355
356 if (!t->name)
357 {
358- fprintf (stderr, "unknown MCU '%s' specified\nKnown MCU names:\n",
359- avr_mcu_name);
360- for (t = avr_mcu_types; t->name; t++)
361- fprintf (stderr," %s\n", t->name);
362+ error ("unrecognized argument to -mmcu= option: %qs", avr_mcu_name);
363+ inform (input_location, "See --target-help for supported MCUs");
364 }
365
366 avr_current_device = t;
367@@ -223,6 +229,42 @@
368 init_machine_status = avr_init_machine_status;
369 }
370
371+/* Implement TARGET_HELP */
372+/* Report extra information for --target-help */
373+
374+static void
375+avr_help (void)
376+{
377+ const struct mcu_type_s *t;
378+ const char * const indent = " ";
379+ int len;
380+
381+ /* Give a list of MCUs that are accepted by -mmcu=* .
382+ Note that MCUs supported by the compiler might differ from
383+ MCUs supported by binutils. */
384+
385+ len = strlen (indent);
386+ printf ("Known MCU names:\n%s", indent);
387+
388+ /* Print a blank-separated list of all supported MCUs */
389+
390+ for (t = avr_mcu_types; t->name; t++)
391+ {
392+ printf ("%s ", t->name);
393+ len += 1 + strlen (t->name);
394+
395+ /* Break long lines */
396+
397+ if (len > 66 && (t+1)->name)
398+ {
399+ printf ("\n%s", indent);
400+ len = strlen (indent);
401+ }
402+ }
403+
404+ printf ("\n\n");
405+}
406+
407 /* return register class from register number. */
408
409 static const enum reg_class reg_class_tab[]={
410@@ -953,6 +995,27 @@
411 fprintf (file, "/* epilogue start */\n");
412 }
413
414+
415+/* Implement TARGET_CANNOT_MODITY_JUMPS_P */
416+
417+static bool
418+avr_cannot_modify_jumps_p (void)
419+{
420+
421+ /* Naked Functions must not have any instructions after
422+ their epilogue, see PR42240 */
423+
424+ if (reload_completed
425+ && cfun->machine
426+ && cfun->machine->is_naked)
427+ {
428+ return true;
429+ }
430+
431+ return false;
432+}
433+
434+
435 /* Return nonzero if X (an RTX) is a legitimate memory address on the target
436 machine for a memory operand of mode MODE. */
437
438
439=== modified file 'gcc/config/freebsd-spec.h'
440--- gcc/config/freebsd-spec.h 2009-09-22 15:28:26 +0000
441+++ gcc/config/freebsd-spec.h 2011-04-06 13:16:33 +0000
442@@ -1,5 +1,6 @@
443 /* Base configuration file for all FreeBSD targets.
444- Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
445+ Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007, 2009, 2011
446+ Free Software Foundation, Inc.
447
448 This file is part of GCC.
449
450@@ -139,6 +140,9 @@
451 %{!shared: \
452 %{!pg: %{pthread:-lpthread} -lc} \
453 %{pg: %{pthread:-lpthread_p} -lc_p} \
454+ } \
455+ %{shared: \
456+ %{pthread:-lpthread} -lc \
457 }"
458 #endif
459 #endif
460
461=== modified file 'gcc/config/i386/avxintrin.h'
462--- gcc/config/i386/avxintrin.h 2011-01-17 13:10:18 +0000
463+++ gcc/config/i386/avxintrin.h 2011-04-06 13:16:33 +0000
464@@ -737,7 +737,7 @@
465 _mm256_insert_epi32 (__m256i __X, int __D, int const __N)
466 {
467 __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 2);
468- __Y = _mm_insert_epi16 (__Y, __D, __N % 4);
469+ __Y = _mm_insert_epi32 (__Y, __D, __N % 4);
470 return _mm256_insertf128_si256 (__X, __Y, __N >> 2);
471 }
472
473@@ -762,7 +762,7 @@
474 _mm256_insert_epi64 (__m256i __X, int __D, int const __N)
475 {
476 __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 1);
477- __Y = _mm_insert_epi16 (__Y, __D, __N % 2);
478+ __Y = _mm_insert_epi64 (__Y, __D, __N % 2);
479 return _mm256_insertf128_si256 (__X, __Y, __N >> 1);
480 }
481 #endif
482
483=== modified file 'gcc/config/i386/i386.h'
484--- gcc/config/i386/i386.h 2010-09-01 13:29:58 +0000
485+++ gcc/config/i386/i386.h 2011-04-06 13:16:33 +0000
486@@ -1282,7 +1282,7 @@
487 { 0xe0000000, 0x1f }, /* MMX_REGS */ \
488 { 0x1fe00100,0x1fe000 }, /* FP_TOP_SSE_REG */ \
489 { 0x1fe00200,0x1fe000 }, /* FP_SECOND_SSE_REG */ \
490-{ 0x1fe0ff00,0x3fe000 }, /* FLOAT_SSE_REGS */ \
491+{ 0x1fe0ff00,0x1fe000 }, /* FLOAT_SSE_REGS */ \
492 { 0x1ffff, 0x1fe0 }, /* FLOAT_INT_REGS */ \
493 { 0x1fe100ff,0x1fffe0 }, /* INT_SSE_REGS */ \
494 { 0x1fe1ffff,0x1fffe0 }, /* FLOAT_INT_SSE_REGS */ \
495
496=== modified file 'gcc/config/i386/i386.opt'
497--- gcc/config/i386/i386.opt 2009-12-05 20:11:52 +0000
498+++ gcc/config/i386/i386.opt 2011-04-06 13:16:33 +0000
499@@ -305,11 +305,11 @@
500 Do not support SSE4.1 and SSE4.2 built-in functions and code generation
501
502 mavx
503-Target Report Mask(ISA_AVX) Var(ix86_isa_flags) VarExists
504+Target Report Mask(ISA_AVX) Var(ix86_isa_flags) VarExists Save
505 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation
506
507 mfma
508-Target Report Mask(ISA_FMA) Var(ix86_isa_flags) VarExists
509+Target Report Mask(ISA_FMA) Var(ix86_isa_flags) VarExists Save
510 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation
511
512 msse4a
513
514=== modified file 'gcc/config/i386/sse.md'
515--- gcc/config/i386/sse.md 2011-01-17 13:10:18 +0000
516+++ gcc/config/i386/sse.md 2011-04-06 13:16:33 +0000
517@@ -8932,7 +8932,7 @@
518 (ss_plus:V8HI
519 (mult:V8HI
520 (zero_extend:V8HI
521- (vec_select:V4QI
522+ (vec_select:V8QI
523 (match_operand:V16QI 1 "register_operand" "x")
524 (parallel [(const_int 0)
525 (const_int 2)
526@@ -8955,7 +8955,7 @@
527 (const_int 14)]))))
528 (mult:V8HI
529 (zero_extend:V8HI
530- (vec_select:V16QI (match_dup 1)
531+ (vec_select:V8QI (match_dup 1)
532 (parallel [(const_int 1)
533 (const_int 3)
534 (const_int 5)
535@@ -8965,7 +8965,7 @@
536 (const_int 13)
537 (const_int 15)])))
538 (sign_extend:V8HI
539- (vec_select:V16QI (match_dup 2)
540+ (vec_select:V8QI (match_dup 2)
541 (parallel [(const_int 1)
542 (const_int 3)
543 (const_int 5)
544@@ -8986,7 +8986,7 @@
545 (ss_plus:V8HI
546 (mult:V8HI
547 (zero_extend:V8HI
548- (vec_select:V4QI
549+ (vec_select:V8QI
550 (match_operand:V16QI 1 "register_operand" "0")
551 (parallel [(const_int 0)
552 (const_int 2)
553@@ -9009,7 +9009,7 @@
554 (const_int 14)]))))
555 (mult:V8HI
556 (zero_extend:V8HI
557- (vec_select:V16QI (match_dup 1)
558+ (vec_select:V8QI (match_dup 1)
559 (parallel [(const_int 1)
560 (const_int 3)
561 (const_int 5)
562@@ -9019,7 +9019,7 @@
563 (const_int 13)
564 (const_int 15)])))
565 (sign_extend:V8HI
566- (vec_select:V16QI (match_dup 2)
567+ (vec_select:V8QI (match_dup 2)
568 (parallel [(const_int 1)
569 (const_int 3)
570 (const_int 5)
571@@ -9056,13 +9056,13 @@
572 (const_int 6)]))))
573 (mult:V4HI
574 (zero_extend:V4HI
575- (vec_select:V8QI (match_dup 1)
576+ (vec_select:V4QI (match_dup 1)
577 (parallel [(const_int 1)
578 (const_int 3)
579 (const_int 5)
580 (const_int 7)])))
581 (sign_extend:V4HI
582- (vec_select:V8QI (match_dup 2)
583+ (vec_select:V4QI (match_dup 2)
584 (parallel [(const_int 1)
585 (const_int 3)
586 (const_int 5)
587
588=== modified file 'gcc/config/rs6000/rs6000.h'
589--- gcc/config/rs6000/rs6000.h 2011-02-04 16:31:48 +0000
590+++ gcc/config/rs6000/rs6000.h 2011-04-06 13:16:33 +0000
591@@ -1036,6 +1036,16 @@
592
593 #define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs[(MODE)][(REGNO)]
594
595+/* When setting up caller-save slots (MODE == VOIDmode) ensure we allocate
596+ enough space to account for vectors in FP regs. */
597+#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
598+ (TARGET_VSX \
599+ && ((MODE) == VOIDmode || VSX_VECTOR_MODE (MODE) \
600+ || ALTIVEC_VECTOR_MODE (MODE)) \
601+ && FP_REGNO_P (REGNO) \
602+ ? V2DFmode \
603+ : choose_hard_reg_mode ((REGNO), (NREGS), false))
604+
605 #define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \
606 (((TARGET_32BIT && TARGET_POWERPC64 \
607 && (GET_MODE_SIZE (MODE) > 4) \
608
609=== modified file 'gcc/config/rx/rx-protos.h'
610--- gcc/config/rx/rx-protos.h 2011-02-02 14:31:55 +0000
611+++ gcc/config/rx/rx-protos.h 2011-04-06 13:16:33 +0000
612@@ -31,6 +31,7 @@
613 extern void rx_set_optimization_options (void);
614
615 #ifdef RTX_CODE
616+extern int rx_align_for_label (rtx);
617 extern bool rx_compare_redundant (rtx);
618 extern void rx_emit_stack_popm (rtx *, bool);
619 extern void rx_emit_stack_pushm (rtx *);
620@@ -41,6 +42,7 @@
621 extern bool rx_is_mode_dependent_addr (rtx);
622 extern bool rx_is_restricted_memory_address (rtx, Mmode);
623 extern bool rx_match_ccmode (rtx, Mmode);
624+extern int rx_max_skip_for_label (rtx);
625 extern void rx_notice_update_cc (rtx body, rtx insn);
626 extern void rx_print_operand (FILE *, rtx, int);
627 extern void rx_print_operand_address (FILE *, rtx);
628
629=== modified file 'gcc/config/rx/rx.c'
630--- gcc/config/rx/rx.c 2011-02-22 11:38:56 +0000
631+++ gcc/config/rx/rx.c 2011-04-06 13:16:33 +0000
632@@ -80,7 +80,9 @@
633 /* Register Indirect. */
634 return true;
635
636- if (GET_MODE_SIZE (mode) == 4
637+ if ((GET_MODE_SIZE (mode) == 4
638+ || GET_MODE_SIZE (mode) == 2
639+ || GET_MODE_SIZE (mode) == 1)
640 && (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC))
641 /* Pre-decrement Register Indirect or
642 Post-increment Register Indirect. */
643@@ -182,7 +184,10 @@
644 base = XEXP (mem, 0);
645 index = XEXP (mem, 1);
646
647- return RX_REG_P (base) && CONST_INT_P (index);
648+ if (! RX_REG_P (base) || ! CONST_INT_P (index))
649+ return false;
650+
651+ return IN_RANGE (INTVAL (index), 0, (0x10000 * GET_MODE_SIZE (mode)) - 1);
652
653 case SYMBOL_REF:
654 /* Can happen when small data is being supported.
655@@ -447,11 +452,14 @@
656 %L Print low part of a DImode register, integer or address.
657 %N Print the negation of the immediate value.
658 %Q If the operand is a MEM, then correctly generate
659- register indirect or register relative addressing. */
660+ register indirect or register relative addressing.
661+ %R Like %Q but for zero-extending loads. */
662
663 void
664 rx_print_operand (FILE * file, rtx op, int letter)
665 {
666+ bool unsigned_load = false;
667+
668 switch (letter)
669 {
670 case 'A':
671@@ -615,10 +623,15 @@
672 rx_print_integer (file, - INTVAL (op));
673 break;
674
675+ case 'R':
676+ gcc_assert (GET_MODE_SIZE (GET_MODE (op)) < 4);
677+ unsigned_load = true;
678+ /* Fall through. */
679 case 'Q':
680 if (MEM_P (op))
681 {
682 HOST_WIDE_INT offset;
683+ rtx mem = op;
684
685 op = XEXP (op, 0);
686
687@@ -653,22 +666,24 @@
688 rx_print_operand (file, op, 0);
689 fprintf (file, "].");
690
691- switch (GET_MODE_SIZE (GET_MODE (op)))
692+ switch (GET_MODE_SIZE (GET_MODE (mem)))
693 {
694 case 1:
695- gcc_assert (offset < 65535 * 1);
696- fprintf (file, "B");
697+ gcc_assert (offset <= 65535 * 1);
698+ fprintf (file, unsigned_load ? "UB" : "B");
699 break;
700 case 2:
701 gcc_assert (offset % 2 == 0);
702- gcc_assert (offset < 65535 * 2);
703- fprintf (file, "W");
704+ gcc_assert (offset <= 65535 * 2);
705+ fprintf (file, unsigned_load ? "UW" : "W");
706 break;
707- default:
708+ case 4:
709 gcc_assert (offset % 4 == 0);
710- gcc_assert (offset < 65535 * 4);
711+ gcc_assert (offset <= 65535 * 4);
712 fprintf (file, "L");
713 break;
714+ default:
715+ gcc_unreachable ();
716 }
717 break;
718 }
719@@ -2664,6 +2679,36 @@
720 return true;
721 }
722
723
724+int
725+rx_align_for_label (rtx lab ATTRIBUTE_UNUSED)
726+{
727+ return optimize_size ? 1 : 3;
728+}
729+
730+int
731+rx_max_skip_for_label (rtx lab)
732+{
733+ int opsize;
734+ rtx op;
735+
736+ if (lab == NULL_RTX)
737+ return 0;
738+ op = lab;
739+ do
740+ {
741+ op = next_nonnote_insn (op);
742+ }
743+ while (op && (LABEL_P (op)
744+ || (INSN_P (op) && GET_CODE (PATTERN (op)) == USE)));
745+ if (!op)
746+ return 0;
747+
748+ opsize = get_attr_length (op);
749+ if (opsize >= 0 && opsize < 8)
750+ return opsize - 1;
751+ return 0;
752+}
753+
754
755 #undef TARGET_FUNCTION_VALUE
756 #define TARGET_FUNCTION_VALUE rx_function_value
757
758
759=== modified file 'gcc/config/rx/rx.h'
760--- gcc/config/rx/rx.h 2011-02-02 14:31:55 +0000
761+++ gcc/config/rx/rx.h 2011-04-06 13:16:33 +0000
762@@ -659,7 +659,33 @@
763
764 #define BRANCH_COST(SPEED, PREDICT) 1
765 #define REGISTER_MOVE_COST(MODE, FROM, TO) 2
766-#define MEMORY_MOVE_COST(MODE, REGCLASS, IN) (2 + memory_move_secondary_cost (MODE, REGCLASS, IN))
767+#define MEMORY_MOVE_COST(MODE, REGCLASS, IN) \
768+ (((IN) ? 2 : 0) + memory_move_secondary_cost (MODE, REGCLASS, IN))
769
770 #define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode ((OP), (X), (Y))
771
772+#define JUMP_ALIGN(x) rx_align_for_label (x)
773+#define JUMP_ALIGN_MAX_SKIP rx_max_skip_for_label (label)
774+#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label (x)
775+#define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP rx_max_skip_for_label (label)
776+#define LOOP_ALIGN(x) rx_align_for_label (x)
777+#define LOOP_ALIGN_MAX_SKIP rx_max_skip_for_label (label)
778+#define LABEL_ALIGN(x) rx_align_for_label (x)
779+#define LABEL_ALIGN_MAX_SKIP rx_max_skip_for_label (NULL_RTX)
780+
781+#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
782+ do \
783+ { \
784+ if ((LOG) == 0 || (MAX_SKIP) == 0) \
785+ break; \
786+ if (TARGET_AS100_SYNTAX) \
787+ { \
788+ if ((LOG) >= 2) \
789+ fprintf (STREAM, "\t.ALIGN 4\t; %d alignment actually requested\n", 1 << (LOG)); \
790+ else \
791+ fprintf (STREAM, "\t.ALIGN 2\n"); \
792+ } \
793+ else \
794+ fprintf (STREAM, "\t.balign %d,3,%d\n", 1 << (LOG), (MAX_SKIP)); \
795+ } \
796+ while (0)
797
798=== modified file 'gcc/config/rx/rx.md'
799--- gcc/config/rx/rx.md 2011-02-02 14:31:55 +0000
800+++ gcc/config/rx/rx.md 2011-04-06 13:16:33 +0000
801@@ -798,7 +798,10 @@
802 (set (reg CC_REG)
803 (compare (abs:SI (match_dup 1))
804 (const_int 0)))]
805- "reload_completed && rx_match_ccmode (insn, CC_ZSOmode)"
806+ ;; Note - although the ABS instruction does set the O bit in the processor
807+ ;; status word, it does not do so in a way that is comparable with the CMP
808+ ;; instruction. Hence we use CC_ZSmode rather than CC_ZSOmode.
809+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
810 "@
811 abs\t%0
812 abs\t%1, %0"
813@@ -1005,7 +1008,7 @@
814 and\t%1, %0
815 and\t%2, %1, %0
816 and\t%Q2, %0"
817- [(set_attr "timings" "11,11,11,11,11,11,11,33,33")
818+ [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
819 (set_attr "length" "2,2,3,4,5,6,2,5,5")]
820 )
821
822@@ -1027,7 +1030,7 @@
823 and\t%1, %0
824 and\t%2, %1, %0
825 and\t%Q2, %0"
826- [(set_attr "timings" "11,11,11,11,11,11,11,33,33")
827+ [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
828 (set_attr "length" "2,2,3,4,5,6,2,5,5")]
829 )
830
831@@ -1543,6 +1546,139 @@
832 (set_attr "length" "3,4,5,6,7,6")]
833 )
834
835
836+;; A set of peepholes to catch extending loads followed by arithmetic operations.
837+;; We use iterators where possible to reduce the amount of typing and hence the
838+;; possibilities for typos.
839+
840+(define_code_iterator extend_types [(zero_extend "") (sign_extend "")])
841+(define_code_attr letter [(zero_extend "R") (sign_extend "Q")])
842+
843+(define_code_iterator memex_commutative [(plus "") (and "") (ior "") (xor "")])
844+(define_code_iterator memex_noncomm [(div "") (udiv "") (minus "")])
845+(define_code_iterator memex_nocc [(smax "") (smin "") (mult "")])
846+
847+(define_code_attr op [(plus "add") (and "and") (div "div") (udiv "divu") (smax "max") (smin "min") (mult "mul") (ior "or") (minus "sub") (xor "xor")])
848+
849+(define_peephole2
850+ [(set (match_operand:SI 0 "register_operand")
851+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
852+ (parallel [(set (match_operand:SI 2 "register_operand")
853+ (memex_commutative:SI (match_dup 0)
854+ (match_dup 2)))
855+ (clobber (reg:CC CC_REG))])]
856+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
857+ [(parallel [(set:SI (match_dup 2)
858+ (memex_commutative:SI (match_dup 2)
859+ (extend_types:SI (match_dup 1))))
860+ (clobber (reg:CC CC_REG))])]
861+)
862+
863+(define_peephole2
864+ [(set (match_operand:SI 0 "register_operand")
865+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
866+ (parallel [(set (match_operand:SI 2 "register_operand")
867+ (memex_commutative:SI (match_dup 2)
868+ (match_dup 0)))
869+ (clobber (reg:CC CC_REG))])]
870+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
871+ [(parallel [(set:SI (match_dup 2)
872+ (memex_commutative:SI (match_dup 2)
873+ (extend_types:SI (match_dup 1))))
874+ (clobber (reg:CC CC_REG))])]
875+)
876+
877+(define_peephole2
878+ [(set (match_operand:SI 0 "register_operand")
879+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
880+ (parallel [(set (match_operand:SI 2 "register_operand")
881+ (memex_noncomm:SI (match_dup 2)
882+ (match_dup 0)))
883+ (clobber (reg:CC CC_REG))])]
884+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
885+ [(parallel [(set:SI (match_dup 2)
886+ (memex_noncomm:SI (match_dup 2)
887+ (extend_types:SI (match_dup 1))))
888+ (clobber (reg:CC CC_REG))])]
889+)
890+
891+(define_peephole2
892+ [(set (match_operand:SI 0 "register_operand")
893+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
894+ (set (match_operand:SI 2 "register_operand")
895+ (memex_nocc:SI (match_dup 0)
896+ (match_dup 2)))]
897+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
898+ [(set:SI (match_dup 2)
899+ (memex_nocc:SI (match_dup 2)
900+ (extend_types:SI (match_dup 1))))]
901+)
902+
903+(define_peephole2
904+ [(set (match_operand:SI 0 "register_operand")
905+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
906+ (set (match_operand:SI 2 "register_operand")
907+ (memex_nocc:SI (match_dup 2)
908+ (match_dup 0)))]
909+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
910+ [(set:SI (match_dup 2)
911+ (memex_nocc:SI (match_dup 2)
912+ (extend_types:SI (match_dup 1))))]
913+)
914+
915+(define_insn "*<memex_commutative:code>si3_<extend_types:code><small_int_modes:mode>"
916+ [(set (match_operand:SI 0 "register_operand" "=r")
917+ (memex_commutative:SI (match_operand:SI 1 "register_operand" "%0")
918+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
919+ (clobber (reg:CC CC_REG))]
920+ ""
921+ "<memex_commutative:op>\t%<extend_types:letter>2, %0"
922+ [(set_attr "timings" "33")
923+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
924+) ;; rather than using iterators we could specify exact sizes.
925+
926+(define_insn "*<memex_noncomm:code>si3_<extend_types:code><small_int_modes:mode>"
927+ [(set (match_operand:SI 0 "register_operand" "=r")
928+ (memex_noncomm:SI (match_operand:SI 1 "register_operand" "0")
929+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
930+ (clobber (reg:CC CC_REG))]
931+ ""
932+ "<memex_noncomm:op>\t%<extend_types:letter>2, %0"
933+ [(set_attr "timings" "33")
934+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
935+) ;; rather than using iterators we could specify exact sizes.
936+
937+(define_insn "*<memex_nocc:code>si3_<extend_types:code><small_int_modes:mode>"
938+ [(set (match_operand:SI 0 "register_operand" "=r")
939+ (memex_nocc:SI (match_operand:SI 1 "register_operand" "%0")
940+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))]
941+ ""
942+ "<memex_nocc:op>\t%<extend_types:letter>2, %0"
943+ [(set_attr "timings" "33")
944+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
945+) ;; rather than using iterators we could specify exact sizes.
946+
947+(define_peephole2
948+ [(set (match_operand:SI 0 "register_operand")
949+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
950+ (set (reg:CC CC_REG)
951+ (compare:CC (match_operand:SI 2 "register_operand")
952+ (match_dup 0)))]
953+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
954+ [(set (reg:CC CC_REG)
955+ (compare:CC (match_dup 2)
956+ (extend_types:SI (match_dup 1))))]
957+)
958+
959+(define_insn "*comparesi3_<extend_types:code><small_int_modes:mode>"
960+ [(set (reg:CC CC_REG)
961+ (compare:CC (match_operand:SI 0 "register_operand" "=r")
962+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand" "Q"))))]
963+ ""
964+ "cmp\t%<extend_types:letter>1, %0"
965+ [(set_attr "timings" "33")
966+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
967+) ;; rather than using iterators we could specify exact sizes.
968+
969
970 ;; Floating Point Instructions
971
972 (define_insn "addsf3"
973@@ -1641,7 +1777,7 @@
974 ""
975 "bset\t%1, %0.B"
976 [(set_attr "length" "3")
977- (set_attr "timings" "34")]
978+ (set_attr "timings" "33")]
979 )
980
981 (define_insn "*bitinvert"
982@@ -1687,7 +1823,7 @@
983 ""
984 "bclr\t%1, %0.B"
985 [(set_attr "length" "3")
986- (set_attr "timings" "34")]
987+ (set_attr "timings" "33")]
988 )
989
990 (define_insn "*insv_imm"
991
992=== modified file 'gcc/config/s390/s390.c'
993--- gcc/config/s390/s390.c 2011-02-08 10:51:58 +0000
994+++ gcc/config/s390/s390.c 2011-04-06 13:16:33 +0000
995@@ -2830,12 +2830,16 @@
996 it is most likely being used as an address, so
997 prefer ADDR_REGS. If 'class' is not a superset
998 of ADDR_REGS, e.g. FP_REGS, reject this reload. */
999- case PLUS:
1000 case LABEL_REF:
1001 case SYMBOL_REF:
1002 case CONST:
1003+ if (!legitimate_reload_constant_p (op))
1004+ return NO_REGS;
1005+ /* fallthrough */
1006+ case PLUS:
1007+ /* load address will be used. */
1008 if (reg_class_subset_p (ADDR_REGS, rclass))
1009- return ADDR_REGS;
1010+ return ADDR_REGS;
1011 else
1012 return NO_REGS;
1013
1014@@ -2951,12 +2955,16 @@
1015
1016 if (TARGET_Z10)
1017 {
1018+ HOST_WIDE_INT offset;
1019+ rtx symref;
1020+
1021 /* On z10 several optimizer steps may generate larl operands with
1022 an odd addend. */
1023 if (in_p
1024- && s390_symref_operand_p (x, NULL, NULL)
1025+ && s390_symref_operand_p (x, &symref, &offset)
1026 && mode == Pmode
1027- && !s390_check_symref_alignment (x, 2))
1028+ && !SYMBOL_REF_ALIGN1_P (symref)
1029+ && (offset & 1) == 1)
1030 sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
1031 : CODE_FOR_reloadsi_larl_odd_addend_z10);
1032
1033
1034=== modified file 'gcc/cp/ChangeLog'
1035--- gcc/cp/ChangeLog 2010-12-16 12:33:06 +0000
1036+++ gcc/cp/ChangeLog 2011-04-06 13:16:33 +0000
1037@@ -1,3 +1,76 @@
1038+2011-03-28 Jason Merrill <jason@redhat.com>
1039+
1040+ Revert:
1041+ PR c++/48289
1042+ * pt.c (build_non_dependent_expr): Keep dereferences outside the
1043+ NON_DEPENDENT_EXPR.
1044+
1045+2011-03-25 Jason Merrill <jason@redhat.com>
1046+
1047+ PR c++/48289
1048+ * pt.c (build_non_dependent_expr): Keep dereferences outside the
1049+ NON_DEPENDENT_EXPR.
1050+
1051+2011-03-11 Jason Merrill <jason@redhat.com>
1052+
1053+ PR c++/47125
1054+ * pt.c (tsubst) [TYPENAME_TYPE]: Only give errors if tf_error.
1055+
1056+2011-03-10 Jason Merrill <jason@redhat.com>
1057+
1058+ PR c++/48029
1059+ * pt.c (iterative_hash_template_arg): Remove special case for
1060+ ARRAY_TYPE.
1061+
1062+2011-03-09 Jason Merrill <jason@redhat.com>
1063+
1064+ PR c++/44629
1065+ * pt.c (unify): An unresolved overload is a nondeduced context.
1066+
1067+2011-03-08 Jason Merrill <jason@redhat.com>
1068+
1069+ PR c++/45651
1070+ * pt.c (instantiate_decl): Don't clear DECL_INTERFACE_KNOWN on
1071+ !TREE_PUBLIC decls.
1072+
1073+2011-03-08 Jason Merrill <jason@redhat.com>
1074+
1075+ PR c++/47289
1076+ * pt.c (coerce_template_parms): Fix error recovery.
1077+
1078+2011-03-08 Dodji Seketeli <dodji@redhat.com>
1079+
1080+ PR c++/47705
1081+ * pt.c (convert_nontype_argument): Only call decay_conversion on
1082+ arrays.
1083+
1084+2011-03-08 Dodji Seketeli <dodji@redhat.com>
1085+
1086+ * name-lookup.c (binding_to_template_parms_of_scope_p): Only
1087+ consider scopes of primary template definitions. Adjust comments.
1088+
1089+2011-03-08 Jason Merrill <jason@redhat.com>
1090+
1091+ PR c++/47488
1092+ * mangle.c (write_template_arg_literal) [STRING_CST]: Sorry.
1093+
1094+2011-03-08 Richard Guenther <rguenther@suse.de>
1095+
1096+ PR tree-optimization/47278
1097+ * decl.c (finish_function): Use decl_replaceable_p.
1098+
1099+2011-03-01 Jason Merrill <jason@redhat.com>
1100+
1101+ PR c++/46159
1102+ * parser.c (cp_parser_primary_expression): Don't warn about a
1103+ failed tentative parse.
1104+
1105+2011-02-26 Jason Merrill <jason@redhat.com>
1106+
1107+ PR c++/47904
1108+ * tree.c (cp_tree_equal) [PARM_DECL]: Don't crash on
1109+ DECL_ARTIFICIAL parms.
1110+
1111 2010-12-16 Release Manager
1112
1113 * GCC 4.5.2 released.
1114
1115=== modified file 'gcc/cp/decl.c'
1116--- gcc/cp/decl.c 2011-01-06 11:02:44 +0000
1117+++ gcc/cp/decl.c 2011-04-06 13:16:33 +0000
1118@@ -12502,7 +12502,7 @@
1119 if (!processing_template_decl
1120 && !cp_function_chain->can_throw
1121 && !flag_non_call_exceptions
1122- && !DECL_REPLACEABLE_P (fndecl))
1123+ && !decl_replaceable_p (fndecl))
1124 TREE_NOTHROW (fndecl) = 1;
1125
1126 /* This must come after expand_function_end because cleanups might
1127
1128=== modified file 'gcc/cp/mangle.c'
1129--- gcc/cp/mangle.c 2010-03-23 22:29:53 +0000
1130+++ gcc/cp/mangle.c 2011-04-06 13:16:33 +0000
1131@@ -2683,6 +2683,10 @@
1132 write_real_cst (value);
1133 break;
1134
1135+ case STRING_CST:
1136+ sorry ("string literal in function template signature");
1137+ break;
1138+
1139 default:
1140 gcc_unreachable ();
1141 }
1142
1143=== modified file 'gcc/cp/name-lookup.c'
1144--- gcc/cp/name-lookup.c 2010-04-27 22:03:06 +0000
1145+++ gcc/cp/name-lookup.c 2011-04-06 13:16:33 +0000
1146@@ -4067,8 +4067,13 @@
1147 }
1148
1149 /* Subroutine of outer_binding.
1150- Returns TRUE if BINDING is a binding to a template parameter of SCOPE,
1151- FALSE otherwise. */
1152+
1153+ Returns TRUE if BINDING is a binding to a template parameter of
1154+ SCOPE. In that case SCOPE is the scope of a primary template
1155+ parameter -- in the sense of G++, i.e, a template that has its own
1156+ template header.
1157+
1158+ Returns FALSE otherwise. */
1159
1160 static bool
1161 binding_to_template_parms_of_scope_p (cxx_binding *binding,
1162@@ -4084,6 +4089,8 @@
1163 return (scope
1164 && scope->this_entity
1165 && get_template_info (scope->this_entity)
1166+ && PRIMARY_TEMPLATE_P (TI_TEMPLATE
1167+ (get_template_info (scope->this_entity)))
1168 && parameter_of_template_p (binding_value,
1169 TI_TEMPLATE (get_template_info \
1170 (scope->this_entity))));
1171
1172=== modified file 'gcc/cp/parser.c'
1173--- gcc/cp/parser.c 2010-08-30 19:33:31 +0000
1174+++ gcc/cp/parser.c 2011-04-06 13:16:33 +0000
1175@@ -3341,8 +3341,14 @@
1176 if (c_dialect_objc ())
1177 /* We have an Objective-C++ message. */
1178 return cp_parser_objc_expression (parser);
1179- maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
1180- return cp_parser_lambda_expression (parser);
1181+ {
1182+ tree lam = cp_parser_lambda_expression (parser);
1183+ /* Don't warn about a failed tentative parse. */
1184+ if (cp_parser_error_occurred (parser))
1185+ return error_mark_node;
1186+ maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
1187+ return lam;
1188+ }
1189
1190 case CPP_OBJC_STRING:
1191 if (c_dialect_objc ())
1192
1193=== modified file 'gcc/cp/pt.c'
1194--- gcc/cp/pt.c 2010-07-02 09:15:10 +0000
1195+++ gcc/cp/pt.c 2011-04-06 13:16:33 +0000
1196@@ -1556,13 +1556,6 @@
1197 val = iterative_hash_object (code, val);
1198 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1199
1200- case ARRAY_TYPE:
1201- /* layout_type sets structural equality for arrays of
1202- incomplete type, so we can't rely on the canonical type
1203- for hashing. */
1204- val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1205- return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
1206-
1207 case LAMBDA_EXPR:
1208 /* A lambda can't appear in a template arg, but don't crash on
1209 erroneous input. */
1210@@ -4951,7 +4944,8 @@
1211
1212 /* Add the ADDR_EXPR now for the benefit of
1213 value_dependent_expression_p. */
1214- if (TYPE_PTROBV_P (type))
1215+ if (TYPE_PTROBV_P (type)
1216+ && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
1217 expr = decay_conversion (expr);
1218
1219 /* If we are in a template, EXPR may be non-dependent, but still
1220@@ -6043,7 +6037,7 @@
1221 sorry ("cannot expand %<%T%> into a fixed-length "
1222 "argument list", arg);
1223 }
1224- return error_mark_node;
1225+ ++lost;
1226 }
1227 }
1228 else if (require_all_args)
1229@@ -6071,7 +6065,7 @@
1230 reported) that we are trying to recover from, e.g., a class
1231 template with a parameter list such as
1232 template<typename..., typename>. */
1233- return error_mark_node;
1234+ ++lost;
1235 else
1236 arg = convert_template_argument (TREE_VALUE (parm),
1237 arg, new_args, complain,
1238@@ -10555,11 +10549,21 @@
1239 if (TREE_CODE (f) != TYPENAME_TYPE)
1240 {
1241 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
1242- error ("%qT resolves to %qT, which is not an enumeration type",
1243- t, f);
1244+ {
1245+ if (complain & tf_error)
1246+ error ("%qT resolves to %qT, which is not an enumeration type",
1247+ t, f);
1248+ else
1249+ return error_mark_node;
1250+ }
1251 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
1252- error ("%qT resolves to %qT, which is is not a class type",
1253- t, f);
1254+ {
1255+ if (complain & tf_error)
1256+ error ("%qT resolves to %qT, which is is not a class type",
1257+ t, f);
1258+ else
1259+ return error_mark_node;
1260+ }
1261 }
1262
1263 /* cv-quals from the template are discarded when
1264@@ -15193,6 +15197,9 @@
1265 return 1;
1266
1267 default:
1268+ /* An unresolved overload is a nondeduced context. */
1269+ if (type_unknown_p (parm))
1270+ return 0;
1271 gcc_assert (EXPR_P (parm));
1272
1273 /* We must be looking at an expression. This can happen with
1274@@ -16720,8 +16727,13 @@
1275 if (!pattern_defined && expl_inst_class_mem_p
1276 && DECL_EXPLICIT_INSTANTIATION (d))
1277 {
1278- DECL_NOT_REALLY_EXTERN (d) = 0;
1279- DECL_INTERFACE_KNOWN (d) = 0;
1280+ /* Leave linkage flags alone on instantiations with anonymous
1281+ visibility. */
1282+ if (TREE_PUBLIC (d))
1283+ {
1284+ DECL_NOT_REALLY_EXTERN (d) = 0;
1285+ DECL_INTERFACE_KNOWN (d) = 0;
1286+ }
1287 SET_DECL_IMPLICIT_INSTANTIATION (d);
1288 }
1289
1290
1291=== modified file 'gcc/cp/tree.c'
1292--- gcc/cp/tree.c 2010-12-03 18:44:04 +0000
1293+++ gcc/cp/tree.c 2011-04-06 13:16:33 +0000
1294@@ -2089,12 +2089,18 @@
1295
1296 case PARM_DECL:
1297 /* For comparing uses of parameters in late-specified return types
1298- with an out-of-class definition of the function. */
1299- if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
1300- && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))
1301- return true;
1302- else
1303- return false;
1304+ with an out-of-class definition of the function, but can also come
1305+ up for expressions that involve 'this' in a member function
1306+ template. */
1307+ if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
1308+ {
1309+ if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
1310+ return false;
1311+ if (DECL_ARTIFICIAL (t1)
1312+ || DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))
1313+ return true;
1314+ }
1315+ return false;
1316
1317 case VAR_DECL:
1318 case CONST_DECL:
1319
1320=== modified file 'gcc/doc/cfg.texi'
1321--- gcc/doc/cfg.texi 2009-04-27 19:23:51 +0000
1322+++ gcc/doc/cfg.texi 2011-04-06 13:16:33 +0000
1323@@ -559,8 +559,7 @@
1324 In the RTL representation, the macros @code{BB_HEAD} and @code{BB_END}
1325 may be used to get the head and end @code{rtx} of a basic block. No
1326 abstract iterators are defined for traversing the insn chain, but you
1327-can just use @code{NEXT_INSN} and @code{PREV_INSN} instead. See
1328-@xref{Insns}.
1329+can just use @code{NEXT_INSN} and @code{PREV_INSN} instead. @xref{Insns}.
1330
1331 @findex purge_dead_edges
1332 Usually a code manipulating pass simplifies the instruction stream and
1333
1334=== modified file 'gcc/doc/cpp.texi'
1335--- gcc/doc/cpp.texi 2010-04-02 18:54:46 +0000
1336+++ gcc/doc/cpp.texi 2011-04-06 13:16:33 +0000
1337@@ -12,7 +12,7 @@
1338 @c man begin COPYRIGHT
1339 Copyright @copyright{} 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
1340 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
1341-2008, 2009, 2010
1342+2008, 2009, 2010, 2011
1343 Free Software Foundation, Inc.
1344
1345 Permission is granted to copy, distribute and/or modify this document
1346@@ -4161,9 +4161,10 @@
1347 define them with preprocessing directives or command-line options.
1348
1349 Assertions were intended to provide a more systematic way to describe
1350-the compiler's target system. However, in practice they are just as
1351-unpredictable as the system-specific predefined macros. In addition, they
1352-are not part of any standard, and only a few compilers support them.
1353+the compiler's target system and we added them for compatibility with
1354+existing compilers. In practice they are just as unpredictable as the
1355+system-specific predefined macros. In addition, they are not part of
1356+any standard, and only a few compilers support them.
1357 Therefore, the use of assertions is @strong{less} portable than the use
1358 of system-specific predefined macros. We recommend you do not use them at
1359 all.
1360
1361=== modified file 'gcc/doc/extend.texi'
1362--- gcc/doc/extend.texi 2011-02-04 16:31:48 +0000
1363+++ gcc/doc/extend.texi 2011-04-06 13:16:33 +0000
1364@@ -3855,42 +3855,6 @@
1365 You can use the sequence @samp{\e} in a string or character constant to
1366 stand for the ASCII character @key{ESC}.
1367
1368-@node Alignment
1369-@section Inquiring on Alignment of Types or Variables
1370-@cindex alignment
1371-@cindex type alignment
1372-@cindex variable alignment
1373-
1374-The keyword @code{__alignof__} allows you to inquire about how an object
1375-is aligned, or the minimum alignment usually required by a type. Its
1376-syntax is just like @code{sizeof}.
1377-
1378-For example, if the target machine requires a @code{double} value to be
1379-aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
1380-This is true on many RISC machines. On more traditional machine
1381-designs, @code{__alignof__ (double)} is 4 or even 2.
1382-
1383-Some machines never actually require alignment; they allow reference to any
1384-data type even at an odd address. For these machines, @code{__alignof__}
1385-reports the smallest alignment that GCC will give the data type, usually as
1386-mandated by the target ABI.
1387-
1388-If the operand of @code{__alignof__} is an lvalue rather than a type,
1389-its value is the required alignment for its type, taking into account
1390-any minimum alignment specified with GCC's @code{__attribute__}
1391-extension (@pxref{Variable Attributes}). For example, after this
1392-declaration:
1393-
1394-@smallexample
1395-struct foo @{ int x; char y; @} foo1;
1396-@end smallexample
1397-
1398-@noindent
1399-the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
1400-alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
1401-
1402-It is an error to ask for the alignment of an incomplete type.
1403-
1404 @node Variable Attributes
1405 @section Specifying Attributes of Variables
1406 @cindex attribute of variables
1407@@ -4899,6 +4863,42 @@
1408 Language Extensions Specification. It is intended to support the
1409 @code{__vector} keyword.
1410
1411+@node Alignment
1412+@section Inquiring on Alignment of Types or Variables
1413+@cindex alignment
1414+@cindex type alignment
1415+@cindex variable alignment
1416+
1417+The keyword @code{__alignof__} allows you to inquire about how an object
1418+is aligned, or the minimum alignment usually required by a type. Its
1419+syntax is just like @code{sizeof}.
1420+
1421+For example, if the target machine requires a @code{double} value to be
1422+aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
1423+This is true on many RISC machines. On more traditional machine
1424+designs, @code{__alignof__ (double)} is 4 or even 2.
1425+
1426+Some machines never actually require alignment; they allow reference to any
1427+data type even at an odd address. For these machines, @code{__alignof__}
1428+reports the smallest alignment that GCC will give the data type, usually as
1429+mandated by the target ABI.
1430+
1431+If the operand of @code{__alignof__} is an lvalue rather than a type,
1432+its value is the required alignment for its type, taking into account
1433+any minimum alignment specified with GCC's @code{__attribute__}
1434+extension (@pxref{Variable Attributes}). For example, after this
1435+declaration:
1436+
1437+@smallexample
1438+struct foo @{ int x; char y; @} foo1;
1439+@end smallexample
1440+
1441+@noindent
1442+the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
1443+alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
1444+
1445+It is an error to ask for the alignment of an incomplete type.
1446+
1447
1448 @node Inline
1449 @section An Inline Function is As Fast As a Macro
1450
1451=== modified file 'gcc/doc/invoke.texi'
1452--- gcc/doc/invoke.texi 2011-02-08 10:51:58 +0000
1453+++ gcc/doc/invoke.texi 2011-04-06 13:16:33 +0000
1454@@ -607,6 +607,11 @@
1455 -m32 -m64 -mlarge-data-threshold=@var{num} @gol
1456 -msse2avx}
1457
1458+@emph{i386 and x86-64 Windows Options}
1459+@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
1460+-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
1461+-fno-set-stack-executable}
1462+
1463 @emph{IA-64 Options}
1464 @gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
1465 -mvolatile-asm-stop -mregister-names -msdata -mno-sdata @gol
1466@@ -883,11 +888,6 @@
1467 @emph{x86-64 Options}
1468 See i386 and x86-64 Options.
1469
1470-@emph{i386 and x86-64 Windows Options}
1471-@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
1472--mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
1473--fno-set-stack-executable}
1474-
1475 @emph{Xstormy16 Options}
1476 @gccoptlist{-msim}
1477
1478@@ -2420,7 +2420,7 @@
1479 @cindex Objective-C and Objective-C++ options, command line
1480 @cindex options, Objective-C and Objective-C++
1481 (NOTE: This manual does not describe the Objective-C and Objective-C++
1482-languages themselves. See @xref{Standards,,Language Standards
1483+languages themselves. @xref{Standards,,Language Standards
1484 Supported by GCC}, for references.)
1485
1486 This section describes the command-line options that are only meaningful
1487@@ -6581,7 +6581,7 @@
1488 @opindex fipa-struct-reorg
1489 Perform structure reorganization optimization, that change C-like structures
1490 layout in order to better utilize spatial locality. This transformation is
1491-affective for programs containing arrays of structures. Available in two
1492+effective for programs containing arrays of structures. Available in two
1493 compilation modes: profile-based (enabled with @option{-fprofile-generate})
1494 or static (which uses built-in heuristics). Require @option{-fipa-type-escape}
1495 to provide the safety of this transformation. It works only in whole program
1496@@ -9729,10 +9729,10 @@
1497
1498 @item -mmangle-cpu
1499 @opindex mmangle-cpu
1500-Prepend the name of the cpu to all public symbol names.
1501+Prepend the name of the CPU to all public symbol names.
1502 In multiple-processor systems, there are many ARC variants with different
1503 instruction and register set characteristics. This flag prevents code
1504-compiled for one cpu to be linked with code compiled for another.
1505+compiled for one CPU to be linked with code compiled for another.
1506 No facility exists for handling variants that are ``almost identical''.
1507 This is an all or nothing option.
1508
1509@@ -9912,7 +9912,7 @@
1510 restricting which instructions can be used, it specifies that GCC should
1511 tune the performance of the code as if the target were of the type
1512 specified in this option, but still choosing the instructions that it
1513-will generate based on the cpu specified by a @option{-mcpu=} option.
1514+will generate based on the CPU specified by a @option{-mcpu=} option.
1515 For some ARM implementations better performance can be obtained by using
1516 this option.
1517
1518@@ -11969,7 +11969,7 @@
1519 @code{sqrt} instructions for the 387. Specify this option to avoid
1520 generating those instructions. This option is the default on FreeBSD,
1521 OpenBSD and NetBSD@. This option is overridden when @option{-march}
1522-indicates that the target cpu will always have an FPU and so the
1523+indicates that the target CPU will always have an FPU and so the
1524 instruction will not need emulation. As of revision 2.6.1, these
1525 instructions are not generated unless you also use the
1526 @option{-funsafe-math-optimizations} switch.
1527@@ -12429,6 +12429,94 @@
1528 about addresses and sizes of sections.
1529 @end table
1530
1531+@node i386 and x86-64 Windows Options
1532+@subsection i386 and x86-64 Windows Options
1533+@cindex i386 and x86-64 Windows Options
1534+
1535+These additional options are available for Windows targets:
1536+
1537+@table @gcctabopt
1538+@item -mconsole
1539+@opindex mconsole
1540+This option is available for Cygwin and MinGW targets. It
1541+specifies that a console application is to be generated, by
1542+instructing the linker to set the PE header subsystem type
1543+required for console applications.
1544+This is the default behavior for Cygwin and MinGW targets.
1545+
1546+@item -mcygwin
1547+@opindex mcygwin
1548+This option is available for Cygwin targets. It specifies that
1549+the Cygwin internal interface is to be used for predefined
1550+preprocessor macros, C runtime libraries and related linker
1551+paths and options. For Cygwin targets this is the default behavior.
1552+This option is deprecated and will be removed in a future release.
1553+
1554+@item -mno-cygwin
1555+@opindex mno-cygwin
1556+This option is available for Cygwin targets. It specifies that
1557+the MinGW internal interface is to be used instead of Cygwin's, by
1558+setting MinGW-related predefined macros and linker paths and default
1559+library options.
1560+This option is deprecated and will be removed in a future release.
1561+
1562+@item -mdll
1563+@opindex mdll
1564+This option is available for Cygwin and MinGW targets. It
1565+specifies that a DLL - a dynamic link library - is to be
1566+generated, enabling the selection of the required runtime
1567+startup object and entry point.
1568+
1569+@item -mnop-fun-dllimport
1570+@opindex mnop-fun-dllimport
1571+This option is available for Cygwin and MinGW targets. It
1572+specifies that the dllimport attribute should be ignored.
1573+
1574+@item -mthread
1575+@opindex mthread
1576+This option is available for MinGW targets. It specifies
1577+that MinGW-specific thread support is to be used.
1578+
1579+@item -municode
1580+@opindex municode
1581+This option is available for mingw-w64 targets. It specifies
1582+that the UNICODE macro is getting pre-defined and that the
1583+unicode capable runtime startup code is chosen.
1584+
1585+@item -mwin32
1586+@opindex mwin32
1587+This option is available for Cygwin and MinGW targets. It
1588+specifies that the typical Windows pre-defined macros are to
1589+be set in the pre-processor, but does not influence the choice
1590+of runtime library/startup code.
1591+
1592+@item -mwindows
1593+@opindex mwindows
1594+This option is available for Cygwin and MinGW targets. It
1595+specifies that a GUI application is to be generated by
1596+instructing the linker to set the PE header subsystem type
1597+appropriately.
1598+
1599+@item -fno-set-stack-executable
1600+@opindex fno-set-stack-executable
1601+This option is available for MinGW targets. It specifies that
1602+the executable flag for stack used by nested functions isn't
1603+set. This is necessary for binaries running in kernel mode of
1604+Windows, as there the user32 API, which is used to set executable
1605+privileges, isn't available.
1606+
1607+@item -mpe-aligned-commons
1608+@opindex mpe-aligned-commons
1609+This option is available for Cygwin and MinGW targets. It
1610+specifies that the GNU extension to the PE file format that
1611+permits the correct alignment of COMMON variables should be
1612+used when generating code. It will be enabled by default if
1613+GCC detects that the target assembler found during configuration
1614+supports the feature.
1615+@end table
1616+
1617+See also under @ref{i386 and x86-64 Options} for standard options.
1618+
1619 @node IA-64 Options
1620 @subsection IA-64 Options
1621 @cindex IA-64 Options
1622@@ -15644,7 +15732,7 @@
1623 @opindex -patch
1624 Selects the type of RX CPU to be targeted. Currently three types are
1625 supported, the generic @var{RX600} and @var{RX200} series hardware and
1626-the specific @var{RX610} cpu. The default is @var{RX600}.
1627+the specific @var{RX610} CPU. The default is @var{RX600}.
1628
1629 The only difference between @var{RX600} and @var{RX610} is that the
1630 @var{RX610} does not support the @code{MVTIPL} instruction.
1631@@ -16462,7 +16550,7 @@
1632
1633 The same values for @option{-mcpu=@var{cpu_type}} can be used for
1634 @option{-mtune=@var{cpu_type}}, but the only useful values are those
1635-that select a particular cpu implementation. Those are @samp{cypress},
1636+that select a particular CPU implementation. Those are @samp{cypress},
1637 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
1638 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
1639 @samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.
1640@@ -16902,94 +16990,6 @@
1641
1642 These are listed under @xref{i386 and x86-64 Options}.
1643
1644-@node i386 and x86-64 Windows Options
1645-@subsection i386 and x86-64 Windows Options
1646-@cindex i386 and x86-64 Windows Options
1647-
1648-These additional options are available for Windows targets:
1649-
1650-@table @gcctabopt
1651-@item -mconsole
1652-@opindex mconsole
1653-This option is available for Cygwin and MinGW targets. It
1654-specifies that a console application is to be generated, by
1655-instructing the linker to set the PE header subsystem type
1656-required for console applications.
1657-This is the default behavior for Cygwin and MinGW targets.
1658-
1659-@item -mcygwin
1660-@opindex mcygwin
1661-This option is available for Cygwin targets. It specifies that
1662-the Cygwin internal interface is to be used for predefined
1663-preprocessor macros, C runtime libraries and related linker
1664-paths and options. For Cygwin targets this is the default behavior.
1665-This option is deprecated and will be removed in a future release.
1666-
1667-@item -mno-cygwin
1668-@opindex mno-cygwin
1669-This option is available for Cygwin targets. It specifies that
1670-the MinGW internal interface is to be used instead of Cygwin's, by
1671-setting MinGW-related predefined macros and linker paths and default
1672-library options.
1673-This option is deprecated and will be removed in a future release.
1674-
1675-@item -mdll
1676-@opindex mdll
1677-This option is available for Cygwin and MinGW targets. It
1678-specifies that a DLL - a dynamic link library - is to be
1679-generated, enabling the selection of the required runtime
1680-startup object and entry point.
1681-
1682-@item -mnop-fun-dllimport
1683-@opindex mnop-fun-dllimport
1684-This option is available for Cygwin and MinGW targets. It
1685-specifies that the dllimport attribute should be ignored.
1686-
1687-@item -mthread
1688-@opindex mthread
1689-This option is available for MinGW targets. It specifies
1690-that MinGW-specific thread support is to be used.
1691-
1692-@item -municode
1693-@opindex municode
1694-This option is available for mingw-w64 targets. It specifies
1695-that the UNICODE macro is getting pre-defined and that the
1696-unicode capable runtime startup code is chosen.
1697-
1698-@item -mwin32
1699-@opindex mwin32
1700-This option is available for Cygwin and MinGW targets. It
1701-specifies that the typical Windows pre-defined macros are to
1702-be set in the pre-processor, but does not influence the choice
1703-of runtime library/startup code.
1704-
1705-@item -mwindows
1706-@opindex mwindows
1707-This option is available for Cygwin and MinGW targets. It
1708-specifies that a GUI application is to be generated by
1709-instructing the linker to set the PE header subsystem type
1710-appropriately.
1711-
1712-@item -fno-set-stack-executable
1713-@opindex fno-set-stack-executable
1714-This option is available for MinGW targets. It specifies that
1715-the executable flag for stack used by nested functions isn't
1716-set. This is necessary for binaries running in kernel mode of
1717-Windows, as there the user32 API, which is used to set executable
1718-privileges, isn't available.
1719-
1720-@item -mpe-aligned-commons
1721-@opindex mpe-aligned-commons
1722-This option is available for Cygwin and MinGW targets. It
1723-specifies that the GNU extension to the PE file format that
1724-permits the correct alignment of COMMON variables should be
1725-used when generating code. It will be enabled by default if
1726-GCC detects that the target assembler found during configuration
1727-supports the feature.
1728-@end table
1729-
1730-See also under @ref{i386 and x86-64 Options} for standard options.
1731-
1732 @node Xstormy16 Options
1733 @subsection Xstormy16 Options
1734 @cindex Xstormy16 Options
1735
1736=== modified file 'gcc/fortran/ChangeLog'
1737--- gcc/fortran/ChangeLog 2011-02-19 08:57:10 +0000
1738+++ gcc/fortran/ChangeLog 2011-04-06 13:16:33 +0000
1739@@ -1,3 +1,27 @@
1740+2011-04-05 Duncan Sands <baldrick@free.fr>
1741+
1742+ * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter
1743+ types.
1744+
1745+2011-03-13 Paul Thomas <pault@gcc.gnu.org>
1746+
1747+ PR fortran/47348
1748+ * trans-array.c (get_array_ctor_all_strlen): Move up in file.
1749+ (get_array_ctor_var_strlen): Add block dummy and add call to
1750+ get_array_ctor_all_strlen instead of giving up on substrings.
1751+ Call gcc_unreachable for default case.
1752+ (get_array_ctor_strlen): Add extra argument to in call to
1753+ get_array_ctor_var_strlen.
1754+
1755+2011-01-27 Tobias Burnus <burnus@net-b.de>
1756+
1757+ Backport from mainline
1758+ 2011-02-26 Tobias Burnus <burnus@net-b.de>
1759+
1760+ PR fortran/47886
1761+ * openmp.c (gfc_resolve_omp_directive): Resolve if()
1762+ condition of OpenMP's task.
1763+
1764 2011-02-19 Tobias Burnus
1765
1766 PR fortran/47775
1767
1768=== modified file 'gcc/fortran/f95-lang.c'
1769--- gcc/fortran/f95-lang.c 2010-06-15 11:17:16 +0000
1770+++ gcc/fortran/f95-lang.c 2011-04-06 13:16:33 +0000
1771@@ -646,19 +646,20 @@
1772 /* type (*) (type, type) */
1773 tmp = tree_cons (NULL_TREE, type, tmp);
1774 fntype[1] = build_function_type (type, tmp);
1775- /* type (*) (int, type) */
1776+ /* type (*) (type, int) */
1777 tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
1778 tmp = tree_cons (NULL_TREE, type, tmp);
1779 fntype[2] = build_function_type (type, tmp);
1780 /* type (*) (void) */
1781 fntype[3] = build_function_type (type, void_list_node);
1782 /* type (*) (type, &int) */
1783- tmp = tree_cons (NULL_TREE, type, void_list_node);
1784- tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node), tmp);
1785+ tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node),
1786+ void_list_node);
1787+ tmp = tree_cons (NULL_TREE, type, tmp);
1788 fntype[4] = build_function_type (type, tmp);
1789 /* type (*) (type, int) */
1790- tmp = tree_cons (NULL_TREE, type, void_list_node);
1791- tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
1792+ tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
1793+ tmp = tree_cons (NULL_TREE, type, tmp);
1794 fntype[5] = build_function_type (type, tmp);
1795 }
1796
1797
1798=== modified file 'gcc/fortran/openmp.c'
1799--- gcc/fortran/openmp.c 2011-01-25 17:01:06 +0000
1800+++ gcc/fortran/openmp.c 2011-04-06 13:16:33 +0000
1801@@ -1546,6 +1546,7 @@
1802 case EXEC_OMP_PARALLEL_SECTIONS:
1803 case EXEC_OMP_SECTIONS:
1804 case EXEC_OMP_SINGLE:
1805+ case EXEC_OMP_TASK:
1806 if (code->ext.omp_clauses)
1807 resolve_omp_clauses (code);
1808 break;
1809
1810=== modified file 'gcc/fortran/trans-array.c'
1811--- gcc/fortran/trans-array.c 2011-01-16 11:46:55 +0000
1812+++ gcc/fortran/trans-array.c 2011-04-06 13:16:33 +0000
1813@@ -1483,11 +1483,55 @@
1814 }
1815
1816
1817+/* A catch-all to obtain the string length for anything that is not a
1818+ a substring of non-constant length, a constant, array or variable. */
1819+
1820+static void
1821+get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len)
1822+{
1823+ gfc_se se;
1824+ gfc_ss *ss;
1825+
1826+ /* Don't bother if we already know the length is a constant. */
1827+ if (*len && INTEGER_CST_P (*len))
1828+ return;
1829+
1830+ if (!e->ref && e->ts.u.cl && e->ts.u.cl->length
1831+ && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1832+ {
1833+ /* This is easy. */
1834+ gfc_conv_const_charlen (e->ts.u.cl);
1835+ *len = e->ts.u.cl->backend_decl;
1836+ }
1837+ else
1838+ {
1839+ /* Otherwise, be brutal even if inefficient. */
1840+ ss = gfc_walk_expr (e);
1841+ gfc_init_se (&se, NULL);
1842+
1843+ /* No function call, in case of side effects. */
1844+ se.no_function_call = 1;
1845+ if (ss == gfc_ss_terminator)
1846+ gfc_conv_expr (&se, e);
1847+ else
1848+ gfc_conv_expr_descriptor (&se, e, ss);
1849+
1850+ /* Fix the value. */
1851+ *len = gfc_evaluate_now (se.string_length, &se.pre);
1852+
1853+ gfc_add_block_to_block (block, &se.pre);
1854+ gfc_add_block_to_block (block, &se.post);
1855+
1856+ e->ts.u.cl->backend_decl = *len;
1857+ }
1858+}
1859+
1860+
1861 /* Figure out the string length of a variable reference expression.
1862 Used by get_array_ctor_strlen. */
1863
1864 static void
1865-get_array_ctor_var_strlen (gfc_expr * expr, tree * len)
1866+get_array_ctor_var_strlen (stmtblock_t *block, gfc_expr * expr, tree * len)
1867 {
1868 gfc_ref *ref;
1869 gfc_typespec *ts;
1870@@ -1514,7 +1558,11 @@
1871 case REF_SUBSTRING:
1872 if (ref->u.ss.start->expr_type != EXPR_CONSTANT
1873 || ref->u.ss.end->expr_type != EXPR_CONSTANT)
1874- break;
1875+ {
1876+ /* Note that this might evaluate expr. */
1877+ get_array_ctor_all_strlen (block, expr, len);
1878+ return;
1879+ }
1880 mpz_init_set_ui (char_len, 1);
1881 mpz_add (char_len, char_len, ref->u.ss.end->value.integer);
1882 mpz_sub (char_len, char_len, ref->u.ss.start->value.integer);
1883@@ -1524,10 +1572,7 @@
1884 return;
1885
1886 default:
1887- /* TODO: Substrings are tricky because we can't evaluate the
1888- expression more than once. For now we just give up, and hope
1889- we can figure it out elsewhere. */
1890- return;
1891+ gcc_unreachable ();
1892 }
1893 }
1894
1895@@ -1535,49 +1580,6 @@
1896 }
1897
1898
1899-/* A catch-all to obtain the string length for anything that is not a
1900- constant, array or variable. */
1901-static void
1902-get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len)
1903-{
1904- gfc_se se;
1905- gfc_ss *ss;
1906-
1907- /* Don't bother if we already know the length is a constant. */
1908- if (*len && INTEGER_CST_P (*len))
1909- return;
1910-
1911- if (!e->ref && e->ts.u.cl && e->ts.u.cl->length
1912- && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1913- {
1914- /* This is easy. */
1915- gfc_conv_const_charlen (e->ts.u.cl);
1916- *len = e->ts.u.cl->backend_decl;
1917- }
1918- else
1919- {
1920- /* Otherwise, be brutal even if inefficient. */
1921- ss = gfc_walk_expr (e);
1922- gfc_init_se (&se, NULL);
1923-
1924- /* No function call, in case of side effects. */
1925- se.no_function_call = 1;
1926- if (ss == gfc_ss_terminator)
1927- gfc_conv_expr (&se, e);
1928- else
1929- gfc_conv_expr_descriptor (&se, e, ss);
1930-
1931- /* Fix the value. */
1932- *len = gfc_evaluate_now (se.string_length, &se.pre);
1933-
1934- gfc_add_block_to_block (block, &se.pre);
1935- gfc_add_block_to_block (block, &se.post);
1936-
1937- e->ts.u.cl->backend_decl = *len;
1938- }
1939-}
1940-
1941-
1942 /* Figure out the string length of a character array constructor.
1943 If len is NULL, don't calculate the length; this happens for recursive calls
1944 when a sub-array-constructor is an element but not at the first position,
1945@@ -1619,7 +1621,7 @@
1946 case EXPR_VARIABLE:
1947 is_const = false;
1948 if (len)
1949- get_array_ctor_var_strlen (c->expr, len);
1950+ get_array_ctor_var_strlen (block, c->expr, len);
1951 break;
1952
1953 default:
1954
1955=== modified file 'gcc/stor-layout.c'
1956--- gcc/stor-layout.c 2010-12-10 15:34:19 +0000
1957+++ gcc/stor-layout.c 2011-04-06 13:16:33 +0000
1958@@ -2033,11 +2033,6 @@
1959 #else
1960 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
1961 #endif
1962- if (!TYPE_SIZE (element))
1963- /* We don't know the size of the underlying element type, so
1964- our alignment calculations will be wrong, forcing us to
1965- fall back on structural equality. */
1966- SET_TYPE_STRUCTURAL_EQUALITY (type);
1967 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
1968 SET_TYPE_MODE (type, BLKmode);
1969 if (TYPE_SIZE (type) != 0
1970
1971=== modified file 'gcc/testsuite/ChangeLog'
1972--- gcc/testsuite/ChangeLog 2011-02-19 21:08:40 +0000
1973+++ gcc/testsuite/ChangeLog 2011-04-06 13:16:33 +0000
1974@@ -1,3 +1,168 @@
1975+2011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
1976+
1977+ PR target/16292
1978+ * gfortran.dg/g77/cabs.f: Only xfail execution on mips-sgi-irix6*
1979+ with -O0 except with -mabi=32.
1980+
1981+2011-03-28 Jason Merrill <jason@redhat.com>
1982+
1983+ Revert:
1984+ * g++.dg/cpp0x/move1.C: New.
1985+
1986+2011-03-28 Richard Sandiford <richard.sandiford@linaro.org>
1987+
1988+ PR target/47553
1989+ * gcc.target/arm/neon-vld-1.c: New test.
1990+
1991+2011-03-25 Jason Merrill <jason@redhat.com>
1992+
1993+ * g++.dg/cpp0x/move1.C: New.
1994+
1995+2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
1996+
1997+ PR preprocessor/48192
1998+ Backport from trunk
1999+ * gcc.target/powerpc/pr48192.c: New file.
2000+
2001+2011-03-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2002+
2003+ PR middle-end/47405
2004+ * gcc.dg/torture/20090618-1.c: Skip on mips-sgi-irix*.
2005+
2006+2011-03-14 Richard Sandiford <richard.sandiford@linaro.org>
2007+
2008+ PR rtl-optimization/47166
2009+ * gcc.c-torture/execute/postmod-1.c: New test.
2010+
2011+2011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
2012+
2013+ PR libfortran/48066
2014+ Backport from trunk
2015+ * gfortran.dg/intrinsic_ifunction_2.f90: Correct PR number.
2016+
2017+2011-03-13 Paul Thomas <pault@gcc.gnu.org>
2018+
2019+ PR fortran/47348
2020+ * gfortran.dg/array_constructor_36.f90 : New test.
2021+ * gfortran.dg/bounds_check_10.f90 : Change dg-output message to
2022+ allow for comparison between different elements of the array
2023+ constructor at different levels of optimization.
2024+
2025+2011-03-11 Jason Merrill <jason@redhat.com>
2026+
2027+ * g++.dg/template/error45.C: New.
2028+
2029+2011-03-10 Jason Merrill <jason@redhat.com>
2030+
2031+ * g++.dg/template/array22.C: New.
2032+
2033+2011-03-11 Richard Guenther <rguenther@suse.de>
2034+
2035+ PR tree-optimization/47278
2036+ * gcc.dg/torture/pr47278-1.c: Require visibility support.
2037+ * gcc.dg/torture/pr47278-2.c: Likewise.
2038+
2039+2011-03-09 Jason Merrill <jason@redhat.com>
2040+
2041+ * g++.dg/template/nontype22.C: New.
2042+
2043+2011-03-08 Jason Merrill <jason@redhat.com>
2044+
2045+ * g++.dg/template/anon5.C: New.
2046+
2047+2011-03-08 Jason Merrill <jason@redhat.com>
2048+
2049+ * g++.dg/cpp0x/variadic105.C: New.
2050+
2051+2011-03-08 Jason Merrill <jason@redhat.com>
2052+
2053+ * g++.dg/template/nontype21.C: New.
2054+
2055+2011-03-08 Dodji Seketeli <dodji@redhat.com>
2056+
2057+ * g++.dg/lookup/template3.C: New test.
2058+
2059+2011-03-08 Richard Guenther <rguenther@suse.de>
2060+
2061+ Backport from mainline
2062+ 2010-10-18 Richard Guenther <rguenther@suse.de>
2063+
2064+ PR tree-optimization/45967
2065+ * gcc.dg/torture/pr45967.c: New testcase.
2066+ * gcc.dg/torture/pr45967-2.c: Likewise.
2067+ * gcc.dg/torture/pr45967-3.c: Likewise.
2068+ * gcc.dg/torture/pr39074-2.c: Adjust.
2069+ * gcc.dg/torture/pta-escape-1.c: Likewise
2070+ * gcc.dg/torture/pta-ptrarith-1.c: Likewise
2071+ * gcc.dg/tree-ssa/pta-callused.c: Likewise
2072+ * gcc.dg/tree-ssa/pta-escape-1.c: Likewise
2073+ * gcc.dg/tree-ssa/pta-escape-2.c: Likewise
2074+ * gcc.dg/tree-ssa/pta-escape-3.c: Likewise
2075+ * gcc.dg/tree-ssa/ssa-pre-21.c: Likewise
2076+
2077+2011-03-08 Richard Guenther <rguenther@suse.de>
2078+
2079+ PR tree-optimization/47278
2080+ * gcc.dg/torture/pr47278-1.c: New testcase.
2081+ * gcc.dg/torture/pr47278-2.c: Likewise.
2082+
2083+2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
2084+
2085+ Backport from mainline
2086+ 2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
2087+
2088+ PR target/47862
2089+ * gcc.target/powerpc/pr47862.c: New.
2090+
2091+2011-03-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
2092+
2093+ Backport from mainline
2094+ PR libgfortran/47778
2095+ * gfortran.dg/namelist_71.f90: New test.
2096+
2097+2011-03-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
2098+
2099+ Backport from mainline
2100+ PR libgfortran/47878
2101+ * gfortran.dg/pr47878.f90: New test.
2102+
2103+2011-03-01 Jason Merrill <jason@redhat.com>
2104+
2105+ * g++.dg/cpp0x/lambda/lambda-98.C: New.
2106+
2107+2011-03-02 Richard Guenther <rguenther@suse.de>
2108+
2109+ Backport from mainline
2110+ 2011-02-07 Richard Guenther <rguenther@suse.de>
2111+
2112+ PR tree-optimization/47615
2113+ * g++.dg/opt/pr47615.C: New testcase.
2114+
2115+2011-03-01 Richard Guenther <rguenther@suse.de>
2116+
2117+ Backport from mainline
2118+ 2011-02-08 Richard Guenther <rguenther@suse.de>
2119+
2120+ PR middle-end/47639
2121+ * g++.dg/opt/pr47639.c: New testcase.
2122+
2123+2011-03-01 Richard Guenther <rguenther@suse.de>
2124+
2125+ Backport from mainline
2126+ 2011-03-01 Richard Guenther <rguenther@suse.de>
2127+
2128+ PR tree-optimization/47890
2129+ * gcc.dg/torture/pr47890.c: New testcase.
2130+
2131+ 2010-12-01 Richard Guenther <rguenther@suse.de>
2132+
2133+ PR tree-optimization/46723
2134+ * gcc.dg/torture/pr46723.c: New testcase.
2135+
2136+2011-02-26 Jason Merrill <jason@redhat.com>
2137+
2138+ * g++.dg/template/this-targ1.C: New.
2139+
2140 2011-02-19 Alexandre Oliva <aoliva@redhat.com>
2141
2142 PR tree-optimization/46620
2143
2144=== added file 'gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C'
2145--- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C 1970-01-01 00:00:00 +0000
2146+++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C 2011-04-06 13:16:33 +0000
2147@@ -0,0 +1,8 @@
2148+// PR c++/46159
2149+// { dg-options -std=c++98 }
2150+
2151+void
2152+f()
2153+{
2154+ int **p = new(int(*[2]));
2155+}
2156
2157=== added file 'gcc/testsuite/g++.dg/cpp0x/variadic105.C'
2158--- gcc/testsuite/g++.dg/cpp0x/variadic105.C 1970-01-01 00:00:00 +0000
2159+++ gcc/testsuite/g++.dg/cpp0x/variadic105.C 2011-04-06 13:16:33 +0000
2160@@ -0,0 +1,24 @@
2161+// PR c++/47289
2162+// { dg-options -std=c++0x }
2163+// { dg-prune-output "note" }
2164+
2165+template <template <typename... __ARGS> class _F, typename... _ARGS>
2166+auto reverse (_ARGS... args) -> decltype(_F<_ARGS...>::call_function(args...)) {
2167+ return _F<_ARGS...>::call_function(args...);
2168+}
2169+
2170+template <typename _T>
2171+_T sum(_T x) { return x; }
2172+
2173+template <typename _T, typename... _ARGS>
2174+_T sum(_T x, _ARGS... args) { return x + sum(args...); }
2175+
2176+template <typename _T, typename... _ARGS>
2177+struct call_sum {
2178+ static _T call_function(_T x1, _ARGS... args) { return sum(x1, args...); }
2179+};
2180+
2181+int main() {
2182+ // This shouldn't be an error; this is bug 35722.
2183+ reverse<call_sum>(1,2); // { dg-bogus "no match" "" { xfail *-*-* } }
2184+}
2185
2186=== added file 'gcc/testsuite/g++.dg/lookup/template3.C'
2187--- gcc/testsuite/g++.dg/lookup/template3.C 1970-01-01 00:00:00 +0000
2188+++ gcc/testsuite/g++.dg/lookup/template3.C 2011-04-06 13:16:33 +0000
2189@@ -0,0 +1,35 @@
2190+// Origin PR c++/47957
2191+// { dg-do compile }
2192+
2193+struct S
2194+{
2195+ int m;
2196+
2197+ S()
2198+ : m(0)
2199+ {
2200+ }
2201+};
2202+
2203+struct Base
2204+{
2205+ typedef S T;
2206+};
2207+
2208+template<class T>
2209+struct Derived : public Base
2210+{
2211+ int
2212+ foo()
2213+ {
2214+ T a; // This is Base::T, not the template parameter.
2215+ return a.m;
2216+ }
2217+};
2218+
2219+int
2220+main()
2221+{
2222+ Derived<char> d;
2223+ return d.foo();
2224+}
2225
2226=== added file 'gcc/testsuite/g++.dg/opt/pr47615.C'
2227--- gcc/testsuite/g++.dg/opt/pr47615.C 1970-01-01 00:00:00 +0000
2228+++ gcc/testsuite/g++.dg/opt/pr47615.C 2011-04-06 13:16:33 +0000
2229@@ -0,0 +1,711 @@
2230+// { dg-do compile }
2231+// { dg-options "-O -fstrict-aliasing -ftree-pre -fno-tree-fre -fno-tree-sra" }
2232+
2233+typedef __SIZE_TYPE__ size_t;
2234+namespace std
2235+{
2236+ template < class _T1, class > struct pair
2237+ {
2238+ _T1 first;
2239+ };
2240+}
2241+namespace __gnu_cxx
2242+{
2243+ template < typename _Tp > class new_allocator
2244+ {
2245+ public:
2246+ typedef size_t size_type;
2247+ typedef _Tp * pointer;
2248+ typedef _Tp const_pointer;
2249+ typedef _Tp & reference;
2250+ typedef const _Tp & const_reference;
2251+ template < typename _Tp1 > struct rebind
2252+ {
2253+ typedef new_allocator < _Tp1 > other;
2254+ };
2255+ };
2256+}
2257+namespace std
2258+{
2259+template < typename _Tp > class allocator:
2260+ public __gnu_cxx::new_allocator < _Tp >
2261+ {};
2262+ template < typename, typename, typename > struct binary_function;
2263+ template < typename _Tp > struct less:binary_function < _Tp, _Tp, bool >
2264+ {};
2265+}
2266+namespace __gnu_cxx
2267+{
2268+ namespace typelist
2269+ {
2270+ struct null_type;
2271+ template < typename Root > struct node
2272+ {
2273+ typedef Root root;
2274+ };
2275+ template < typename, typename > struct chain;
2276+ namespace detail
2277+ {
2278+ template < typename, int >struct chain_at_index_;
2279+ template
2280+ <
2281+ typename
2282+ Hd, typename Tl > struct chain_at_index_ <chain < Hd, Tl >, 0 >
2283+ {
2284+ typedef Hd type;
2285+ };
2286+ template
2287+ <
2288+ typename
2289+ Hd, typename Tl, int i > struct chain_at_index_ <chain < Hd, Tl >, i >
2290+ {
2291+ typedef typename chain_at_index_ < Tl, i - 1 >::type type;
2292+ };
2293+ }
2294+ template < typename Typelist, int i > struct at_index
2295+ {
2296+ typedef typename Typelist::root root_type;
2297+ typedef detail::chain_at_index_ < root_type, i > index_type;
2298+ typedef typename index_type::type type;
2299+ };
2300+ template < typename T1, typename T2 > struct create2
2301+ {
2302+ typedef node < chain < T1, chain < T2, null_type > > >type;
2303+ };
2304+ }
2305+}
2306+namespace std
2307+{
2308+ namespace tr1
2309+ {
2310+ template < typename _Tp, _Tp __v > struct integral_constant
2311+ {
2312+ static const _Tp value = __v;
2313+ };
2314+ typedef integral_constant < bool, false > false_type;
2315+ template < typename, typename > struct is_same:false_type
2316+ {};
2317+ }
2318+}
2319+using std::tr1::is_same;
2320+namespace __gnu_pbds
2321+{
2322+ struct null_mapped_type;
2323+ struct rb_tree_tag;
2324+ namespace detail
2325+ {
2326+ template < typename, typename, typename > struct basic_tree_policy_base;
2327+ template
2328+ <
2329+ typename
2330+ Const_Node_Iterator,
2331+ typename
2332+ Allocator
2333+ >
2334+ struct
2335+ basic_tree_policy_base
2336+ <Const_Node_Iterator, Const_Node_Iterator, Allocator >
2337+ {};
2338+ }
2339+ template
2340+ < typename, typename, typename, typename > struct null_tree_node_update;
2341+template < typename Const_Node_Iterator, typename Node_Iterator, typename, typename Allocator > class tree_order_statistics_node_update:
2342+ detail::basic_tree_policy_base
2343+ < Const_Node_Iterator, Node_Iterator, Allocator >
2344+ {
2345+ public:
2346+ typedef Allocator allocator_type;
2347+ typedef typename allocator_type::size_type size_type;
2348+ typedef size_type metadata_type;
2349+ typedef Const_Node_Iterator const_node_iterator;
2350+ typedef Node_Iterator node_iterator;
2351+ typedef
2352+ typename
2353+ allocator_type::template
2354+ rebind < metadata_type >::other::reference metadata_reference;
2355+ void operator () (node_iterator, const_node_iterator) const;
2356+ };
2357+ template
2358+ <
2359+ typename
2360+ Const_Node_Iterator,
2361+ class
2362+ Node_Iterator,
2363+ class
2364+ Cmp_Fn,
2365+ class
2366+ Allocator
2367+ >
2368+ inline
2369+ void
2370+ tree_order_statistics_node_update
2371+ <
2372+ Const_Node_Iterator,
2373+ Node_Iterator,
2374+ Cmp_Fn,
2375+ Allocator
2376+ >::operator
2377+ () (node_iterator node_it, const_node_iterator end_nd_it) const
2378+ {
2379+ node_iterator l_child_it;
2380+ size_type
2381+ l_rank = (l_child_it == end_nd_it) ? : l_child_it.get_metadata ();
2382+ node_iterator r_child_it = node_it.get_r_child ();
2383+ size_type
2384+ r_rank = (r_child_it == end_nd_it) ? : r_child_it.get_metadata ();
2385+ const_cast
2386+ < metadata_reference > (node_it.get_metadata ()) = l_rank + r_rank;
2387+ }
2388+ namespace
2389+ {
2390+ template < typename, typename, typename, bool > struct value_type_base;
2391+ template
2392+ <
2393+ typename
2394+ Key,
2395+ typename
2396+ Allocator
2397+ > struct value_type_base <Key, null_mapped_type, Allocator, false >
2398+ {
2399+ typedef Key value_type;
2400+ typedef
2401+ typename
2402+ Allocator::template rebind < value_type >::other value_type_allocator;
2403+ typedef typename value_type_allocator::pointer pointer;
2404+ typedef typename value_type_allocator::const_pointer const_pointer;
2405+ typedef typename value_type_allocator::reference reference;
2406+ typedef typename value_type_allocator::const_reference const_reference;
2407+ };
2408+ template
2409+ <
2410+ typename
2411+ Key,
2412+ typename
2413+ Mapped, typename Alloc, bool Store_Extra > struct vt_base_selector
2414+ {
2415+ typedef value_type_base < Key, Mapped, Alloc, Store_Extra > type;
2416+ };
2417+ template
2418+ <
2419+ typename
2420+ Key,
2421+ typename
2422+ Mapped,
2423+ typename
2424+ Alloc,
2425+ bool
2426+ Store_Extra
2427+ >
2428+ struct
2429+ types_traits:vt_base_selector < Key, Mapped, Alloc, Store_Extra >::type
2430+ {};
2431+ template < typename, class, class > struct dumconst_node_iterator;
2432+ template
2433+ <
2434+ typename
2435+ Key,
2436+ typename
2437+ Mapped,
2438+ class,
2439+ class
2440+ Node_And_It_Traits, class Allocator > class bin_search_tree_no_data_
2441+ {
2442+ protected:
2443+ typedef
2444+ typename
2445+ Allocator::template
2446+ rebind
2447+ < typename Node_And_It_Traits::node >::other::pointer node_pointer;
2448+ typedef
2449+ typename
2450+ types_traits
2451+ < Key, Mapped, Allocator, false >::const_reference const_reference;
2452+ typedef typename Node_And_It_Traits::point_iterator point_iterator;
2453+ typedef typename Node_And_It_Traits::node_update node_update;
2454+ void rotate_right (node_pointer);
2455+ template
2456+ <
2457+ typename
2458+ Node_Update_ > void apply_update (node_pointer, Node_Update_ *);
2459+ };
2460+ template
2461+ <
2462+ typename
2463+ Key,
2464+ typename
2465+ Mapped,
2466+ class
2467+ Cmp_Fn,
2468+ class
2469+ Node_And_It_Traits,
2470+ class
2471+ Allocator
2472+ >
2473+ void
2474+ bin_search_tree_no_data_
2475+ <
2476+ Key,
2477+ Mapped,
2478+ Cmp_Fn, Node_And_It_Traits, Allocator >::rotate_right (node_pointer p_x)
2479+ {
2480+ node_pointer p_y = p_x->m_p_parent;
2481+ p_y->m_p_right = p_x;
2482+ apply_update (p_x, this);
2483+ apply_update (p_x->m_p_parent, (node_update *) this);
2484+ }
2485+ template
2486+ <
2487+ typename
2488+ Key,
2489+ typename
2490+ Mapped,
2491+ class
2492+ Cmp_Fn,
2493+ class
2494+ Node_And_It_Traits,
2495+ class
2496+ Allocator
2497+ >
2498+ template
2499+ <
2500+ typename
2501+ Node_Update_
2502+ >
2503+ void
2504+ bin_search_tree_no_data_
2505+ <
2506+ Key,
2507+ Mapped,
2508+ Cmp_Fn,
2509+ Node_And_It_Traits,
2510+ Allocator >::apply_update (node_pointer p_nd, Node_Update_ *)
2511+ {
2512+ node_update ()((p_nd), ((0)));
2513+ }
2514+ }
2515+ namespace detail
2516+ {
2517+ template < typename Key, typename Mapped, typename Cmp_Fn, typename Node_And_It_Traits, typename Allocator > class rb_tree_no_data_:
2518+ bin_search_tree_no_data_
2519+ < Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator >
2520+ {
2521+ typedef
2522+ bin_search_tree_no_data_
2523+ < Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator > base_type;
2524+ typedef typename base_type::node_pointer node_pointer;
2525+ public:
2526+ typedef typename base_type::const_reference const_reference;
2527+ typedef typename base_type::point_iterator point_iterator;
2528+ std::pair < point_iterator, bool > insert (const_reference);
2529+ void insert_fixup (node_pointer);
2530+ };
2531+ template
2532+ <
2533+ typename
2534+ Key,
2535+ typename
2536+ Mapped,
2537+ typename
2538+ Cmp_Fn,
2539+ typename
2540+ Node_And_It_Traits,
2541+ typename
2542+ Allocator
2543+ >
2544+ std::pair
2545+ <
2546+ typename
2547+ rb_tree_no_data_
2548+ <
2549+ Key,
2550+ Mapped,
2551+ Cmp_Fn,
2552+ Node_And_It_Traits,
2553+ Allocator
2554+ >::point_iterator,
2555+ bool
2556+ >
2557+ rb_tree_no_data_
2558+ <
2559+ Key,
2560+ Mapped,
2561+ Cmp_Fn, Node_And_It_Traits, Allocator >::insert (const_reference)
2562+ {
2563+ std::pair < point_iterator, bool > ins_pair;
2564+{
2565+ insert_fixup (ins_pair.first.m_p_nd);
2566+ }
2567+ }
2568+ template
2569+ <
2570+ typename
2571+ Key,
2572+ typename
2573+ Mapped,
2574+ typename
2575+ Cmp_Fn,
2576+ typename
2577+ Node_And_It_Traits,
2578+ typename
2579+ Allocator
2580+ >
2581+ void
2582+ rb_tree_no_data_
2583+ <
2584+ Key,
2585+ Mapped,
2586+ Cmp_Fn,
2587+ Node_And_It_Traits, Allocator >::insert_fixup (node_pointer p_nd)
2588+ {
2589+{
2590+{
2591+{
2592+ rotate_right (p_nd);
2593+ }
2594+ }
2595+ }
2596+ }
2597+ template
2598+ <
2599+ typename,
2600+ typename, typename, typename, typename > struct container_base_dispatch;
2601+ template
2602+ <
2603+ typename
2604+ Key,
2605+ typename
2606+ Policy_Tl,
2607+ typename
2608+ Alloc
2609+ >
2610+ struct
2611+ container_base_dispatch
2612+ <Key, null_mapped_type, rb_tree_tag, Policy_Tl, Alloc >
2613+ {
2614+ typedef __gnu_cxx::typelist::at_index < Policy_Tl, 0 > at0;
2615+ typedef typename at0::type at0t;
2616+ typedef __gnu_cxx::typelist::at_index < Policy_Tl, 1 > at1;
2617+ typedef typename at1::type at1t;
2618+ typedef
2619+ rb_tree_no_data_ < Key, null_mapped_type, at0t, at1t, Alloc > type;
2620+ };
2621+ template
2622+ <
2623+ typename
2624+ Node_Pointer,
2625+ typename,
2626+ typename,
2627+ typename,
2628+ typename, typename, bool, class > class bin_search_tree_const_it_
2629+ {
2630+ public:
2631+ Node_Pointer m_p_nd;
2632+ };
2633+ template
2634+ <
2635+ typename
2636+ Node,
2637+ class
2638+ Const_Iterator,
2639+ class Iterator, class Allocator > class bin_search_tree_const_node_it_
2640+ {
2641+ typedef
2642+ typename
2643+ Allocator::template rebind < Node >::other::pointer node_pointer;
2644+ public:
2645+ typedef typename Node::metadata_type metadata_type;
2646+ typedef
2647+ typename
2648+ Allocator::template
2649+ rebind
2650+ < metadata_type >::other::const_reference const_metadata_reference;
2651+ bin_search_tree_const_node_it_ (node_pointer p_nd):
2652+ m_p_nd ((p_nd))
2653+ {}
2654+ const_metadata_reference get_metadata ()
2655+ {
2656+ return (m_p_nd->get_metadata ());
2657+ }
2658+ bin_search_tree_const_node_it_ ()
2659+ {}
2660+ bin_search_tree_const_node_it_
2661+ < Node, Const_Iterator, Iterator, Allocator > get_r_child ()
2662+ {
2663+ return ((m_p_nd->m_p_right));
2664+ }
2665+ bool operator == (bin_search_tree_const_node_it_)
2666+ {}
2667+ node_pointer m_p_nd;
2668+ };
2669+ template
2670+ <
2671+ typename,
2672+ typename,
2673+ class,
2674+ template
2675+ <
2676+ typename,
2677+ class,
2678+ class, class > class, class, class > struct bin_search_tree_traits;
2679+ template
2680+ <
2681+ typename
2682+ Key,
2683+ class
2684+ Cmp_Fn,
2685+ template
2686+ <
2687+ typename,
2688+ class,
2689+ class,
2690+ class
2691+ >
2692+ class
2693+ Node_Update,
2694+ class
2695+ Node,
2696+ class
2697+ Allocator
2698+ >
2699+ struct
2700+ bin_search_tree_traits
2701+ <Key, null_mapped_type, Cmp_Fn, Node_Update, Node, Allocator >
2702+ {
2703+ typedef
2704+ types_traits < Key, null_mapped_type, Allocator, false > type_traits;
2705+ typedef Node node;
2706+ typedef
2707+ bin_search_tree_const_it_
2708+ <
2709+ typename
2710+ Allocator::template
2711+ rebind
2712+ <
2713+ node
2714+ >::other::pointer,
2715+ typename
2716+ type_traits::value_type,
2717+ typename
2718+ type_traits::pointer,
2719+ typename
2720+ type_traits::const_pointer,
2721+ typename
2722+ type_traits::reference,
2723+ typename
2724+ type_traits::const_reference, true, Allocator > const_point_iterator;
2725+ typedef const_point_iterator point_iterator;
2726+ typedef
2727+ bin_search_tree_const_node_it_
2728+ <
2729+ Node,
2730+ const_point_iterator, point_iterator, Allocator > const_node_iterator;
2731+ typedef const_node_iterator node_iterator;
2732+ typedef
2733+ Node_Update
2734+ < const_node_iterator, node_iterator, Cmp_Fn, Allocator > node_update;
2735+ };
2736+ template < typename Node_Update, bool > struct tree_metadata_helper
2737+ {
2738+ typedef typename Node_Update::metadata_type type;
2739+ };
2740+ template
2741+ <
2742+ typename
2743+ Key,
2744+ typename
2745+ Data,
2746+ class
2747+ Cmp_Fn,
2748+ template
2749+ <
2750+ typename,
2751+ class,
2752+ class,
2753+ class
2754+ >
2755+ class Node_Update, class Allocator > struct tree_node_metadata_selector
2756+ {
2757+ typedef
2758+ dumconst_node_iterator < Key, Data, Allocator > dumconst_node_it;
2759+ enum
2760+ {
2761+ null_update = is_same < Node_Update < dumconst_node_it,
2762+ dumconst_node_it,
2763+ Cmp_Fn,
2764+ Allocator >,
2765+ null_tree_node_update < dumconst_node_it,
2766+ dumconst_node_it,
2767+ Cmp_Fn,
2768+ Allocator > >::value
2769+ };
2770+ typedef
2771+ typename
2772+ tree_metadata_helper
2773+ <
2774+ Node_Update
2775+ <
2776+ dumconst_node_it,
2777+ dumconst_node_it, Cmp_Fn, Allocator >, null_update >::type type;
2778+ };
2779+ template
2780+ <
2781+ typename,
2782+ typename,
2783+ class,
2784+ template
2785+ <
2786+ typename,
2787+ class, class, class > class, class, class > struct tree_traits;
2788+ template < typename Value_Type, class Metadata, class Allocator > struct rb_tree_node_
2789+ {
2790+ typedef Metadata metadata_type;
2791+ typedef
2792+ typename
2793+ Allocator::template
2794+ rebind
2795+ <
2796+ rb_tree_node_
2797+ < Value_Type, Metadata, Allocator > >::other::pointer node_pointer;
2798+ typedef
2799+ typename
2800+ Allocator::template
2801+ rebind < metadata_type >::other::reference metadata_reference;
2802+ metadata_reference get_metadata ()
2803+ {
2804+ return m_metadata;
2805+ }
2806+ node_pointer m_p_right;
2807+ node_pointer m_p_parent;
2808+ metadata_type m_metadata;
2809+ };
2810+ template
2811+ <
2812+ typename
2813+ Key,
2814+ typename
2815+ Mapped,
2816+ typename
2817+ Cmp_Fn,
2818+ template
2819+ <
2820+ typename,
2821+ class,
2822+ class,
2823+ class
2824+ >
2825+ class
2826+ Node_Update,
2827+ typename
2828+ Allocator
2829+ >
2830+ struct
2831+ tree_traits
2832+ <Key,
2833+ Mapped,
2834+ Cmp_Fn,
2835+ Node_Update,
2836+ rb_tree_tag,
2837+ Allocator
2838+ >:bin_search_tree_traits
2839+ <
2840+ Key,
2841+ Mapped,
2842+ Cmp_Fn,
2843+ Node_Update,
2844+ rb_tree_node_
2845+ <
2846+ typename
2847+ types_traits
2848+ <
2849+ Key,
2850+ Mapped,
2851+ Allocator,
2852+ false
2853+ >::value_type,
2854+ typename
2855+ tree_node_metadata_selector
2856+ <
2857+ Key,
2858+ Mapped, Cmp_Fn, Node_Update, Allocator >::type, Allocator >, Allocator >
2859+ {};
2860+ }
2861+template < typename Key, typename Mapped, typename Tag, typename Policy_Tl, typename Allocator > class container_base:
2862+ public
2863+ detail::container_base_dispatch
2864+ < Key, Mapped, Tag, Policy_Tl, Allocator >::type
2865+ {};
2866+template < typename Key, typename Mapped, typename Tag, typename, typename Policy_Tl, typename Allocator > class basic_tree:
2867+ public
2868+ container_base < Key, Mapped, Tag, Policy_Tl, Allocator >
2869+ {};
2870+ template
2871+ <
2872+ typename
2873+ Key,
2874+ typename
2875+ Mapped,
2876+ typename
2877+ Cmp_Fn
2878+ =
2879+ std::less
2880+ <
2881+ Key
2882+ >,
2883+ typename
2884+ Tag
2885+ =
2886+ rb_tree_tag,
2887+ template
2888+ <
2889+ typename,
2890+ typename,
2891+ typename,
2892+ typename
2893+ >
2894+ class
2895+ Node_Update
2896+ =
2897+ null_tree_node_update,
2898+ typename
2899+ Allocator
2900+ =
2901+ std::allocator
2902+ <
2903+ char
2904+ > >class
2905+ tree:public
2906+ basic_tree
2907+ <
2908+ Key,
2909+ Mapped,
2910+ Tag,
2911+ detail::tree_traits
2912+ <
2913+ Key,
2914+ Mapped,
2915+ Cmp_Fn,
2916+ Node_Update,
2917+ Tag,
2918+ Allocator
2919+ >,
2920+ typename
2921+ __gnu_cxx::typelist::create2
2922+ <
2923+ Cmp_Fn,
2924+ detail::tree_traits
2925+ < Key, Mapped, Cmp_Fn, Node_Update, Tag, Allocator > >::type, Allocator >
2926+ {};
2927+}
2928+using namespace std;
2929+using namespace __gnu_pbds;
2930+typedef
2931+ tree
2932+ <
2933+ int,
2934+ null_mapped_type,
2935+ less < int >, rb_tree_tag, tree_order_statistics_node_update > set_t;
2936+main ()
2937+{
2938+ set_t s;
2939+ s.insert (12);
2940+}
2941
2942=== added file 'gcc/testsuite/g++.dg/opt/pr47639.c'
2943--- gcc/testsuite/g++.dg/opt/pr47639.c 1970-01-01 00:00:00 +0000
2944+++ gcc/testsuite/g++.dg/opt/pr47639.c 2011-04-06 13:16:33 +0000
2945@@ -0,0 +1,17 @@
2946+// { dg-do compile }
2947+// { dg-options "-fnon-call-exceptions" }
2948+
2949+typedef int __attribute__ ((vector_size (8))) vec;
2950+
2951+vec foo (vec v1, vec v2)
2952+{
2953+ try
2954+ {
2955+ return v1 / v2;
2956+ }
2957+ catch (...)
2958+ {
2959+ throw;
2960+ }
2961+}
2962+
2963
2964=== added file 'gcc/testsuite/g++.dg/template/anon5.C'
2965--- gcc/testsuite/g++.dg/template/anon5.C 1970-01-01 00:00:00 +0000
2966+++ gcc/testsuite/g++.dg/template/anon5.C 2011-04-06 13:16:33 +0000
2967@@ -0,0 +1,6 @@
2968+// PR c++/45651
2969+
2970+namespace { template <int T> struct A {}; }
2971+template <int T> struct B { void f(A<T>); };
2972+template struct B<1>;
2973+template<int T> void B<T>::f(A<T>) {}
2974
2975=== added file 'gcc/testsuite/g++.dg/template/array22.C'
2976--- gcc/testsuite/g++.dg/template/array22.C 1970-01-01 00:00:00 +0000
2977+++ gcc/testsuite/g++.dg/template/array22.C 2011-04-06 13:16:33 +0000
2978@@ -0,0 +1,14 @@
2979+// PR c++/48029
2980+
2981+template <class T> struct A { };
2982+template <class T, class U> struct B
2983+{
2984+ struct N { };
2985+ typedef U u;
2986+};
2987+
2988+typedef B<int, A<int>(*)[2]> btype;
2989+A<int> v1[2];
2990+btype v2;
2991+
2992+
2993
2994=== added file 'gcc/testsuite/g++.dg/template/error45.C'
2995--- gcc/testsuite/g++.dg/template/error45.C 1970-01-01 00:00:00 +0000
2996+++ gcc/testsuite/g++.dg/template/error45.C 2011-04-06 13:16:33 +0000
2997@@ -0,0 +1,22 @@
2998+// PR c++/47125
2999+
3000+template < bool, typename >
3001+struct enable_if {};
3002+
3003+template < typename T >
3004+struct enable_if< true, T >
3005+{
3006+ typedef T type;
3007+};
3008+
3009+template < typename T >
3010+struct enable_if< true, T >::type
3011+f( T x );
3012+
3013+void
3014+g( void )
3015+{
3016+ f< int >( 0 ); // { dg-error "no match" }
3017+}
3018+
3019+// { dg-prune-output "note" }
3020
3021=== added file 'gcc/testsuite/g++.dg/template/nontype21.C'
3022--- gcc/testsuite/g++.dg/template/nontype21.C 1970-01-01 00:00:00 +0000
3023+++ gcc/testsuite/g++.dg/template/nontype21.C 2011-04-06 13:16:33 +0000
3024@@ -0,0 +1,7 @@
3025+// PR c++/47705
3026+
3027+template<char const * const x> class Something { };
3028+
3029+extern char const xyz;
3030+
3031+class SomethingElse:public Something<xyz> { }; // { dg-error "xyz. is a variable" }
3032
3033=== added file 'gcc/testsuite/g++.dg/template/nontype22.C'
3034--- gcc/testsuite/g++.dg/template/nontype22.C 1970-01-01 00:00:00 +0000
3035+++ gcc/testsuite/g++.dg/template/nontype22.C 2011-04-06 13:16:33 +0000
3036@@ -0,0 +1,11 @@
3037+// PR c++/44629
3038+// The proper mangling is unclear.
3039+
3040+template<typename T> int cmp1(T a, T b);
3041+template<typename T, int (*cmp)(T, T) = cmp1> struct A { };
3042+template <typename T> void f (A<T> &); // { dg-bogus "" "" { xfail *-*-* } }
3043+void g()
3044+{
3045+ A<char> a;
3046+ f(a);
3047+}
3048
3049=== added file 'gcc/testsuite/g++.dg/template/this-targ1.C'
3050--- gcc/testsuite/g++.dg/template/this-targ1.C 1970-01-01 00:00:00 +0000
3051+++ gcc/testsuite/g++.dg/template/this-targ1.C 2011-04-06 13:16:33 +0000
3052@@ -0,0 +1,23 @@
3053+// PR c++/47904
3054+
3055+template <bool>
3056+struct S
3057+{
3058+};
3059+
3060+template <class T>
3061+class U
3062+{
3063+ T t;
3064+ int foo () const
3065+ {
3066+ S <sizeof (t) == 1> s;
3067+ return 1;
3068+ }
3069+ int bar () const
3070+ {
3071+ S <sizeof (t) == 1> s;
3072+ return 1;
3073+ }
3074+};
3075+
3076
3077=== added file 'gcc/testsuite/gcc.c-torture/execute/postmod-1.c'
3078--- gcc/testsuite/gcc.c-torture/execute/postmod-1.c 1970-01-01 00:00:00 +0000
3079+++ gcc/testsuite/gcc.c-torture/execute/postmod-1.c 2011-04-06 13:16:33 +0000
3080@@ -0,0 +1,62 @@
3081+#define DECLARE_ARRAY(A) array##A[0x10]
3082+#define DECLARE_COUNTER(A) counter##A = 0
3083+#define DECLARE_POINTER(A) *pointer##A = array##A + x
3084+/* Create a loop that allows post-modification of pointerA, followed by
3085+ a use of the post-modified address. */
3086+#define BEFORE(A) counter##A += *pointer##A, pointer##A += 3
3087+#define AFTER(A) counter##A += pointer##A[x]
3088+
3089+/* Set up the arrays so that one iteration of the loop sets the counter
3090+ to 3.0f. */
3091+#define INIT_ARRAY(A) array##A[1] = 1.0f, array##A[5] = 2.0f
3092+
3093+/* Check that the loop worked correctly for all values. */
3094+#define CHECK_ARRAY(A) exit_code |= (counter##A != 3.0f)
3095+
3096+/* Having 6 copies triggered the bug for ARM and Thumb. */
3097+#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
3098+
3099+/* Each addendA should be allocated a register. */
3100+#define INIT_VOLATILE(A) addend##A = vol
3101+#define ADD_VOLATILE(A) vol += addend##A
3102+
3103+/* Having 5 copies triggered the bug for ARM and Thumb. */
3104+#define MANY2(A) A (0), A (1), A (2), A (3), A (4)
3105+
3106+float MANY (DECLARE_ARRAY);
3107+float MANY (DECLARE_COUNTER);
3108+
3109+volatile int stop = 1;
3110+volatile int vol;
3111+
3112+void __attribute__((noinline))
3113+foo (int x)
3114+{
3115+ float MANY (DECLARE_POINTER);
3116+ int i;
3117+
3118+ do
3119+ {
3120+ MANY (BEFORE);
3121+ MANY (AFTER);
3122+ /* Create an inner loop that should ensure the code above
3123+ has registers free for reload inheritance. */
3124+ {
3125+ int MANY2 (INIT_VOLATILE);
3126+ for (i = 0; i < 10; i++)
3127+ MANY2 (ADD_VOLATILE);
3128+ }
3129+ }
3130+ while (!stop);
3131+}
3132+
3133+int
3134+main (void)
3135+{
3136+ int exit_code = 0;
3137+
3138+ MANY (INIT_ARRAY);
3139+ foo (1);
3140+ MANY (CHECK_ARRAY);
3141+ return exit_code;
3142+}
3143
3144=== removed file 'gcc/testsuite/gcc.c-torture/execute/postmod-1.c'
3145--- gcc/testsuite/gcc.c-torture/execute/postmod-1.c 2011-02-02 14:23:10 +0000
3146+++ gcc/testsuite/gcc.c-torture/execute/postmod-1.c 1970-01-01 00:00:00 +0000
3147@@ -1,62 +0,0 @@
3148-#define DECLARE_ARRAY(A) array##A[0x10]
3149-#define DECLARE_COUNTER(A) counter##A = 0
3150-#define DECLARE_POINTER(A) *pointer##A = array##A + x
3151-/* Create a loop that allows post-modification of pointerA, followed by
3152- a use of the post-modified address. */
3153-#define BEFORE(A) counter##A += *pointer##A, pointer##A += 3
3154-#define AFTER(A) counter##A += pointer##A[x]
3155-
3156-/* Set up the arrays so that one iteration of the loop sets the counter
3157- to 3.0f. */
3158-#define INIT_ARRAY(A) array##A[1] = 1.0f, array##A[5] = 2.0f
3159-
3160-/* Check that the loop worked correctly for all values. */
3161-#define CHECK_ARRAY(A) exit_code |= (counter##A != 3.0f)
3162-
3163-/* Having 6 copies triggered the bug for ARM and Thumb. */
3164-#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
3165-
3166-/* Each addendA should be allocated a register. */
3167-#define INIT_VOLATILE(A) addend##A = vol
3168-#define ADD_VOLATILE(A) vol += addend##A
3169-
3170-/* Having 5 copies triggered the bug for ARM and Thumb. */
3171-#define MANY2(A) A (0), A (1), A (2), A (3), A (4)
3172-
3173-float MANY (DECLARE_ARRAY);
3174-float MANY (DECLARE_COUNTER);
3175-
3176-volatile int stop = 1;
3177-volatile int vol;
3178-
3179-void __attribute__((noinline))
3180-foo (int x)
3181-{
3182- float MANY (DECLARE_POINTER);
3183- int i;
3184-
3185- do
3186- {
3187- MANY (BEFORE);
3188- MANY (AFTER);
3189- /* Create an inner loop that should ensure the code above
3190- has registers free for reload inheritance. */
3191- {
3192- int MANY2 (INIT_VOLATILE);
3193- for (i = 0; i < 10; i++)
3194- MANY2 (ADD_VOLATILE);
3195- }
3196- }
3197- while (!stop);
3198-}
3199-
3200-int
3201-main (void)
3202-{
3203- int exit_code = 0;
3204-
3205- MANY (INIT_ARRAY);
3206- foo (1);
3207- MANY (CHECK_ARRAY);
3208- return exit_code;
3209-}
3210
3211=== modified file 'gcc/testsuite/gcc.dg/torture/20090618-1.c'
3212--- gcc/testsuite/gcc.dg/torture/20090618-1.c 2009-09-30 02:01:30 +0000
3213+++ gcc/testsuite/gcc.dg/torture/20090618-1.c 2011-04-06 13:16:33 +0000
3214@@ -1,5 +1,6 @@
3215 /* { dg-do run } */
3216 /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
3217+/* { dg-skip-if "PR middle-end/47405" { mips-sgi-irix* } } */
3218
3219 extern void abort (void);
3220
3221
3222=== modified file 'gcc/testsuite/gcc.dg/torture/pr39074-2.c'
3223--- gcc/testsuite/gcc.dg/torture/pr39074-2.c 2010-10-13 11:33:51 +0000
3224+++ gcc/testsuite/gcc.dg/torture/pr39074-2.c 2011-04-06 13:16:33 +0000
3225@@ -30,5 +30,5 @@
3226 return 0;
3227 }
3228
3229-/* { dg-final { scan-tree-dump "y.._., points-to non-local, points-to escaped, points-to vars: { i }" "alias" } } */
3230+/* { dg-final { scan-tree-dump "y.._., points-to vars: { i }" "alias" } } */
3231 /* { dg-final { cleanup-tree-dump "alias" } } */
3232
3233=== added file 'gcc/testsuite/gcc.dg/torture/pr45967-2.c'
3234--- gcc/testsuite/gcc.dg/torture/pr45967-2.c 1970-01-01 00:00:00 +0000
3235+++ gcc/testsuite/gcc.dg/torture/pr45967-2.c 2011-04-06 13:16:33 +0000
3236@@ -0,0 +1,24 @@
3237+/* { dg-do run } */
3238+
3239+extern void abort (void);
3240+int b;
3241+void
3242+foo (void *p_, int *q)
3243+{
3244+ int *p;
3245+ int i;
3246+ for (i = 0; i < sizeof(int *); ++i)
3247+ ((char *)&p)[i] = ((char *)p_)[i];
3248+ if (b)
3249+ p = q;
3250+ *p = 1;
3251+}
3252+int main()
3253+{
3254+ int i = 0, j;
3255+ int *p = &i;
3256+ foo (&p, &j);
3257+ if (i != 1)
3258+ abort ();
3259+ return 0;
3260+}
3261
3262=== added file 'gcc/testsuite/gcc.dg/torture/pr45967-3.c'
3263--- gcc/testsuite/gcc.dg/torture/pr45967-3.c 1970-01-01 00:00:00 +0000
3264+++ gcc/testsuite/gcc.dg/torture/pr45967-3.c 2011-04-06 13:16:33 +0000
3265@@ -0,0 +1,21 @@
3266+/* { dg-do run } */
3267+
3268+extern void abort (void);
3269+void
3270+foo (void *p_)
3271+{
3272+ int *p;
3273+ int i;
3274+ for (i = 0; i < sizeof(int *); ++i)
3275+ ((char *)&p)[i] = ((char *)p_)[i];
3276+ *p = 1;
3277+}
3278+int main()
3279+{
3280+ int i = 0;
3281+ int *p = &i;
3282+ foo (&p);
3283+ if (i != 1)
3284+ abort ();
3285+ return 0;
3286+}
3287
3288=== added file 'gcc/testsuite/gcc.dg/torture/pr45967.c'
3289--- gcc/testsuite/gcc.dg/torture/pr45967.c 1970-01-01 00:00:00 +0000
3290+++ gcc/testsuite/gcc.dg/torture/pr45967.c 2011-04-06 13:16:33 +0000
3291@@ -0,0 +1,21 @@
3292+/* { dg-do run } */
3293+
3294+extern void abort (void);
3295+void __attribute__((noinline,noclone))
3296+foo (void *p_)
3297+{
3298+ int *p;
3299+ int i;
3300+ for (i = 0; i < sizeof(int *); ++i)
3301+ ((char *)&p)[i] = ((char *)p_)[i];
3302+ *p = 1;
3303+}
3304+int main()
3305+{
3306+ int i = 0;
3307+ int *p = &i;
3308+ foo (&p);
3309+ if (i != 1)
3310+ abort ();
3311+ return 0;
3312+}
3313
3314=== added file 'gcc/testsuite/gcc.dg/torture/pr46723.c'
3315--- gcc/testsuite/gcc.dg/torture/pr46723.c 1970-01-01 00:00:00 +0000
3316+++ gcc/testsuite/gcc.dg/torture/pr46723.c 2011-04-06 13:16:33 +0000
3317@@ -0,0 +1,10 @@
3318+/* { dg-do compile } */
3319+
3320+short *m;
3321+void test()
3322+{
3323+ short x = 128;
3324+ unsigned int i;
3325+ for (i = 0; i < 128; ++i, x = (unsigned short)x + 1)
3326+ m[i] = x;
3327+}
3328
3329=== added file 'gcc/testsuite/gcc.dg/torture/pr47278-1.c'
3330--- gcc/testsuite/gcc.dg/torture/pr47278-1.c 1970-01-01 00:00:00 +0000
3331+++ gcc/testsuite/gcc.dg/torture/pr47278-1.c 2011-04-06 13:16:33 +0000
3332@@ -0,0 +1,5 @@
3333+/* { dg-do run } */
3334+/* { dg-require-visibility "" } */
3335+/* { dg-additional-sources "pr47278-2.c" } */
3336+
3337+int foo (void) { return 1; }
3338
3339=== added file 'gcc/testsuite/gcc.dg/torture/pr47278-2.c'
3340--- gcc/testsuite/gcc.dg/torture/pr47278-2.c 1970-01-01 00:00:00 +0000
3341+++ gcc/testsuite/gcc.dg/torture/pr47278-2.c 2011-04-06 13:16:33 +0000
3342@@ -0,0 +1,15 @@
3343+/* { dg-require-visibility "" } */
3344+
3345+extern void abort (void);
3346+
3347+int __attribute__((weak,visibility("hidden"))) foo (void)
3348+{
3349+ return 0;
3350+}
3351+
3352+int main()
3353+{
3354+ if (foo() != 1)
3355+ abort ();
3356+ return 0;
3357+}
3358
3359=== added file 'gcc/testsuite/gcc.dg/torture/pr47890.c'
3360--- gcc/testsuite/gcc.dg/torture/pr47890.c 1970-01-01 00:00:00 +0000
3361+++ gcc/testsuite/gcc.dg/torture/pr47890.c 2011-04-06 13:16:33 +0000
3362@@ -0,0 +1,9 @@
3363+/* { dg-do compile } */
3364+
3365+void f(char *s)
3366+{
3367+ signed short i;
3368+
3369+ for (i = 0; i < 19; i = i + 1)
3370+ s[i] = i;
3371+}
3372
3373=== modified file 'gcc/testsuite/gcc.dg/torture/pta-escape-1.c'
3374--- gcc/testsuite/gcc.dg/torture/pta-escape-1.c 2010-05-19 13:48:24 +0000
3375+++ gcc/testsuite/gcc.dg/torture/pta-escape-1.c 2011-04-06 13:16:33 +0000
3376@@ -30,5 +30,5 @@
3377 return 0;
3378 }
3379
3380-/* { dg-final { scan-tree-dump "ESCAPED = { ESCAPED NONLOCAL i }" "alias" } } */
3381+/* { dg-final { scan-tree-dump "ESCAPED = {\[^\n\}\]* i \[^\n\}\]*}" "alias" } } */
3382 /* { dg-final { cleanup-tree-dump "alias" } } */
3383
3384=== modified file 'gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c'
3385--- gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c 2008-07-07 14:48:23 +0000
3386+++ gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c 2011-04-06 13:16:33 +0000
3387@@ -29,5 +29,5 @@
3388 return 0;
3389 }
3390
3391-/* { dg-final { scan-tree-dump "ESCAPED = { ESCAPED NONLOCAL f .* i }" "alias" } } */
3392+/* { dg-final { scan-tree-dump "ESCAPED = {\[^\n\}\]* i f \[^\n\}\]*}" "alias" } } */
3393 /* { dg-final { cleanup-tree-dump "alias" } } */
3394
3395=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c'
3396--- gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c 2010-10-13 11:33:51 +0000
3397+++ gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c 2011-04-06 13:16:33 +0000
3398@@ -22,6 +22,6 @@
3399 return *foo (&q);
3400 }
3401
3402-/* { dg-final { scan-tree-dump "CALLUSED = { f.* i q }" "alias" } } */
3403+/* { dg-final { scan-tree-dump "CALLUSED = { ESCAPED NONLOCAL f.* i q }" "alias" } } */
3404 /* { dg-final { cleanup-tree-dump "alias" } } */
3405
3406
3407=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c'
3408--- gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c 2010-05-19 13:48:24 +0000
3409+++ gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c 2011-04-06 13:16:33 +0000
3410@@ -33,5 +33,5 @@
3411 return 0;
3412 }
3413
3414-/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to vars: { x }" "alias" } } */
3415+/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to NULL, points-to vars: { x }" "alias" } } */
3416 /* { dg-final { cleanup-tree-dump "alias" } } */
3417
3418=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c'
3419--- gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c 2010-05-19 13:48:24 +0000
3420+++ gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c 2011-04-06 13:16:33 +0000
3421@@ -34,5 +34,5 @@
3422 return 0;
3423 }
3424
3425-/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to vars: { x }" "alias" } } */
3426+/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to NULL, points-to vars: { x }" "alias" } } */
3427 /* { dg-final { cleanup-tree-dump "alias" } } */
3428
3429=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c'
3430--- gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c 2010-05-19 13:48:24 +0000
3431+++ gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c 2011-04-06 13:16:33 +0000
3432@@ -38,5 +38,5 @@
3433 return 0;
3434 }
3435
3436-/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to vars: { x }" "alias" } } */
3437+/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to NULL, points-to vars: { x }" "alias" } } */
3438 /* { dg-final { cleanup-tree-dump "alias" } } */
3439
3440=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c'
3441--- gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c 2008-10-04 13:19:48 +0000
3442+++ gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c 2011-04-06 13:16:33 +0000
3443@@ -11,5 +11,5 @@
3444
3445 /* There should be only two loads left. */
3446
3447-/* { dg-final { scan-tree-dump-times "= \\\*D" 2 "pre" } } */
3448+/* { dg-final { scan-tree-dump-times "= \\\*D\[^\n;\]*;" 2 "pre" } } */
3449 /* { dg-final { cleanup-tree-dump "pre" } } */
3450
3451=== added file 'gcc/testsuite/gcc.target/arm/neon-vld-1.c'
3452--- gcc/testsuite/gcc.target/arm/neon-vld-1.c 1970-01-01 00:00:00 +0000
3453+++ gcc/testsuite/gcc.target/arm/neon-vld-1.c 2011-04-06 13:16:33 +0000
3454@@ -0,0 +1,13 @@
3455+/* { dg-do compile } */
3456+/* { dg-require-effective-target arm_neon_ok } */
3457+/* { dg-options "-O1" } */
3458+/* { dg-add-options arm_neon } */
3459+
3460+#include <arm_neon.h>
3461+
3462+uint8x16_t
3463+foo (uint8_t *a, uint8x16_t b)
3464+{
3465+ vst1q_lane_u8 (a, b, 14);
3466+ return vld1q_lane_u8 (a + 0x100, b, 15);
3467+}
3468
3469=== removed file 'gcc/testsuite/gcc.target/arm/neon-vld-1.c'
3470--- gcc/testsuite/gcc.target/arm/neon-vld-1.c 2011-02-02 13:57:54 +0000
3471+++ gcc/testsuite/gcc.target/arm/neon-vld-1.c 1970-01-01 00:00:00 +0000
3472@@ -1,13 +0,0 @@
3473-/* { dg-do compile } */
3474-/* { dg-require-effective-target arm_neon_ok } */
3475-/* { dg-options "-O1" } */
3476-/* { dg-add-options arm_neon } */
3477-
3478-#include <arm_neon.h>
3479-
3480-uint8x16_t
3481-foo (uint8_t *a, uint8x16_t b)
3482-{
3483- vst1q_lane_u8 (a, b, 14);
3484- return vld1q_lane_u8 (a + 0x100, b, 15);
3485-}
3486
3487=== added file 'gcc/testsuite/gcc.target/powerpc/pr47862.c'
3488--- gcc/testsuite/gcc.target/powerpc/pr47862.c 1970-01-01 00:00:00 +0000
3489+++ gcc/testsuite/gcc.target/powerpc/pr47862.c 2011-04-06 13:16:33 +0000
3490@@ -0,0 +1,19 @@
3491+/* { dg-do compile { target { powerpc*-*-* } } } */
3492+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3493+/* { dg-require-effective-target powerpc_vsx_ok } */
3494+/* { dg-options "-O2 -mcpu=power7" } */
3495+/* { dg-final { scan-assembler-not "stfd" } } */
3496+
3497+/* PR 47862: Verify caller-save spill of vectors in FP regs do not use
3498+ legacy FP insns, which spill only half the vector. */
3499+extern vector double dd[15];
3500+
3501+vector double foo() {
3502+ vector double a,b,c,d,e,f,g,h,i,j,k,l,m,n;
3503+
3504+ a=dd[1]; b=dd[2]; c=dd[3]; d=dd[4]; e=dd[5]; f=dd[6]; g=dd[7]; h=dd[8]; i=dd[9];
3505+ j=dd[10]; k=dd[11]; l=dd[12]; m=dd[13]; n=dd[14];
3506+ bar();
3507+ return (a+b+c+d+e+f+g+h+i+j+k+l+m+n);
3508+}
3509+
3510
3511=== added file 'gcc/testsuite/gcc.target/powerpc/pr48192.c'
3512--- gcc/testsuite/gcc.target/powerpc/pr48192.c 1970-01-01 00:00:00 +0000
3513+++ gcc/testsuite/gcc.target/powerpc/pr48192.c 2011-04-06 13:16:33 +0000
3514@@ -0,0 +1,49 @@
3515+/* { dg-do compile } */
3516+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3517+/* { dg-require-effective-target powerpc_vsx_ok } */
3518+/* { dg-options "-O3 -mcpu=power7 -std=gnu89" } */
3519+
3520+/* Make sure that the conditional macros vector, bool, and pixel are not
3521+ considered as being defined. */
3522+
3523+#ifdef bool
3524+#error "bool is considered defined"
3525+#endif
3526+
3527+#ifdef vector
3528+#error "vector is considered defined"
3529+#endif
3530+
3531+#ifdef pixel
3532+#error "pixel is condsidered defined"
3533+#endif
3534+
3535+#if defined(bool)
3536+#error "bool is considered defined"
3537+#endif
3538+
3539+#if defined(vector)
3540+#error "vector is considered defined"
3541+#endif
3542+
3543+#if defined(pixel)
3544+#error "pixel is condsidered defined"
3545+#endif
3546+
3547+#ifndef bool
3548+#else
3549+#error "bool is considered defined"
3550+#endif
3551+
3552+#ifndef vector
3553+#else
3554+#error "vector is considered defined"
3555+#endif
3556+
3557+#ifndef pixel
3558+#else
3559+#error "pixel is condsidered defined"
3560+#endif
3561+
3562+#define bool long double
3563+bool pixel = 0;
3564
3565=== added file 'gcc/testsuite/gfortran.dg/array_constructor_36.f90'
3566--- gcc/testsuite/gfortran.dg/array_constructor_36.f90 1970-01-01 00:00:00 +0000
3567+++ gcc/testsuite/gfortran.dg/array_constructor_36.f90 2011-04-06 13:16:33 +0000
3568@@ -0,0 +1,21 @@
3569+! { dg-do run }
3570+! Test the fix for PR47348, in which the substring length
3571+! in the array constructor at line 19 would be missed and
3572+! the length of q used instead.
3573+!
3574+! Contributed by Thomas Koenig <tkoenig@netcologne.de>
3575+!
3576+program main
3577+ implicit none
3578+ character(len = *), parameter :: fmt='(2(A,"|"))'
3579+ character(len = *), parameter :: test='xyc|aec|'
3580+ integer :: i
3581+ character(len = 4) :: q
3582+ character(len = 8) :: buffer
3583+ q = 'xy'
3584+ i = 2
3585+ write (buffer, fmt) (/ trim(q), 'ae' /)//'c'
3586+ if (buffer .ne. test) Call abort
3587+ write (buffer, FMT) (/ q(1:i), 'ae' /)//'c'
3588+ if (buffer .ne. test) Call abort
3589+end program main
3590
3591=== modified file 'gcc/testsuite/gfortran.dg/g77/cabs.f'
3592--- gcc/testsuite/gfortran.dg/g77/cabs.f 2005-12-17 15:41:15 +0000
3593+++ gcc/testsuite/gfortran.dg/g77/cabs.f 2011-04-06 13:16:33 +0000
3594@@ -1,4 +1,5 @@
3595-c { dg-do run { xfail mips-sgi-irix6* } } PR 16292
3596+c { dg-do run }
3597+c { dg-xfail-run-if "PR target/16292" { mips-sgi-irix6* } { -O0 } { -mabi=32 } }
3598 program cabs_1
3599 complex z0
3600 real r0
3601
3602=== added file 'gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90'
3603--- gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90 1970-01-01 00:00:00 +0000
3604+++ gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90 2011-04-06 13:16:33 +0000
3605@@ -0,0 +1,8 @@
3606+! { dg-do run }
3607+! PR 48066 - this used to segfault.
3608+program p
3609+ real(8) :: empty(0, 3), square(0)
3610+ logical :: lempty(0, 3), lsquare(0)
3611+ square = sum(empty * empty, 2)
3612+ lsquare = any(lempty .and. lempty, 2)
3613+end
3614
3615=== added file 'gcc/testsuite/gfortran.dg/namelist_71.f90'
3616--- gcc/testsuite/gfortran.dg/namelist_71.f90 1970-01-01 00:00:00 +0000
3617+++ gcc/testsuite/gfortran.dg/namelist_71.f90 2011-04-06 13:16:33 +0000
3618@@ -0,0 +1,36 @@
3619+! { dg-do run }
3620+! PR47778 Reading array of structures from namelist
3621+! Test case derived from the reporters test case.
3622+program test_nml
3623+type field_descr
3624+ integer number
3625+end type
3626+type fsetup
3627+ type (field_descr), dimension(3) :: vel ! 3 velocity components
3628+ type (field_descr), dimension(3) :: scal ! 3 scalars
3629+end type
3630+type (fsetup) field_setup
3631+namelist /nl_setup/ field_setup
3632+field_setup%vel%number = 0
3633+field_setup%scal%number = 0
3634+! write(*,nml=nl_setup)
3635+open(10, status="scratch")
3636+write(10,'(a)') "&nl_setup"
3637+write(10,'(a)') " field_setup%vel(1)%number= 3,"
3638+write(10,'(a)') " field_setup%vel(2)%number= 9,"
3639+write(10,'(a)') " field_setup%vel(3)%number= 27,"
3640+write(10,'(a)') " field_setup%scal(1)%number= 2,"
3641+write(10,'(a)') " field_setup%scal(2)%number= 4,"
3642+write(10,'(a)') " field_setup%scal(3)%number= 8,"
3643+write(10,'(a)') "/"
3644+rewind(10)
3645+read(10,nml=nl_setup)
3646+if (field_setup%vel(1)%number .ne. 3) call abort
3647+if (field_setup%vel(2)%number .ne. 9) call abort
3648+if (field_setup%vel(3)%number .ne. 27) call abort
3649+if (field_setup%scal(1)%number .ne. 2) call abort
3650+if (field_setup%scal(2)%number .ne. 4) call abort
3651+if (field_setup%scal(3)%number .ne. 8) call abort
3652+!write(*,nml=nl_setup)
3653+end program test_nml
3654+
3655
3656=== added file 'gcc/testsuite/gfortran.dg/pr47878.f90'
3657--- gcc/testsuite/gfortran.dg/pr47878.f90 1970-01-01 00:00:00 +0000
3658+++ gcc/testsuite/gfortran.dg/pr47878.f90 2011-04-06 13:16:33 +0000
3659@@ -0,0 +1,10 @@
3660+! PR fortran/47878
3661+! { dg-do run }
3662+ integer :: a(5)
3663+ open (99, recl = 40)
3664+ write (99, '(5i3)') 1, 2, 3
3665+ rewind (99)
3666+ read (99, '(5i3)') a
3667+ if (any (a.ne.(/1, 2, 3, 0, 0/))) call abort
3668+ close (99, status = 'delete')
3669+end
3670
3671=== modified file 'gcc/tree-inline.c'
3672--- gcc/tree-inline.c 2010-10-04 00:50:43 +0000
3673+++ gcc/tree-inline.c 2011-04-06 13:16:33 +0000
3674@@ -3068,7 +3068,7 @@
3675 /* Don't auto-inline anything that might not be bound within
3676 this unit of translation. */
3677 else if (!DECL_DECLARED_INLINE_P (fn)
3678- && DECL_REPLACEABLE_P (fn))
3679+ && decl_replaceable_p (fn))
3680 inlinable = false;
3681
3682 else if (!function_attribute_inlinable_p (fn))
3683
3684=== modified file 'gcc/tree-ssa-pre.c'
3685--- gcc/tree-ssa-pre.c 2011-01-21 14:05:00 +0000
3686+++ gcc/tree-ssa-pre.c 2011-04-06 13:16:33 +0000
3687@@ -4759,7 +4759,7 @@
3688 if (!do_fre)
3689 loop_optimizer_init (LOOPS_NORMAL);
3690
3691- if (!run_scc_vn (do_fre))
3692+ if (!run_scc_vn (do_fre, do_fre ? VN_WALKREWRITE : VN_WALK))
3693 {
3694 if (!do_fre)
3695 {
3696
3697=== modified file 'gcc/tree-ssa-sccvn.c'
3698--- gcc/tree-ssa-sccvn.c 2011-02-22 11:38:56 +0000
3699+++ gcc/tree-ssa-sccvn.c 2011-04-06 13:16:33 +0000
3700@@ -989,6 +989,7 @@
3701
3702 static tree *last_vuse_ptr;
3703 static vn_lookup_kind vn_walk_kind;
3704+static vn_lookup_kind default_vn_walk_kind;
3705
3706 /* Callback for walk_non_aliased_vuses. Adjusts the vn_reference_t VR_
3707 with the current VUSE and performs the expression lookup. */
3708@@ -1987,14 +1988,15 @@
3709
3710 last_vuse = gimple_vuse (stmt);
3711 last_vuse_ptr = &last_vuse;
3712- result = vn_reference_lookup (op, gimple_vuse (stmt), VN_WALKREWRITE, NULL);
3713+ result = vn_reference_lookup (op, gimple_vuse (stmt),
3714+ default_vn_walk_kind, NULL);
3715 last_vuse_ptr = NULL;
3716
3717 /* If we have a VCE, try looking up its operand as it might be stored in
3718 a different type. */
3719 if (!result && TREE_CODE (op) == VIEW_CONVERT_EXPR)
3720 result = vn_reference_lookup (TREE_OPERAND (op, 0), gimple_vuse (stmt),
3721- VN_WALKREWRITE, NULL);
3722+ default_vn_walk_kind, NULL);
3723
3724 /* We handle type-punning through unions by value-numbering based
3725 on offset and size of the access. Be prepared to handle a
3726@@ -3197,16 +3199,18 @@
3727 }
3728
3729 /* Do SCCVN. Returns true if it finished, false if we bailed out
3730- due to resource constraints. */
3731+ due to resource constraints. DEFAULT_VN_WALK_KIND_ specifies
3732+ how we use the alias oracle walking during the VN process. */
3733
3734 bool
3735-run_scc_vn (bool may_insert_arg)
3736+run_scc_vn (bool may_insert_arg, vn_lookup_kind default_vn_walk_kind_)
3737 {
3738 size_t i;
3739 tree param;
3740 bool changed = true;
3741
3742 may_insert = may_insert_arg;
3743+ default_vn_walk_kind = default_vn_walk_kind_;
3744
3745 init_scc_vn ();
3746 current_info = valid_info;
3747
3748=== modified file 'gcc/tree-ssa-sccvn.h'
3749--- gcc/tree-ssa-sccvn.h 2011-01-21 14:05:00 +0000
3750+++ gcc/tree-ssa-sccvn.h 2011-04-06 13:16:33 +0000
3751@@ -163,11 +163,13 @@
3752 unsigned needs_insertion : 1;
3753 } *vn_ssa_aux_t;
3754
3755+typedef enum { VN_NOWALK, VN_WALK, VN_WALKREWRITE } vn_lookup_kind;
3756+
3757 /* Return the value numbering info for an SSA_NAME. */
3758 extern vn_ssa_aux_t VN_INFO (tree);
3759 extern vn_ssa_aux_t VN_INFO_GET (tree);
3760 tree vn_get_expr_for (tree);
3761-bool run_scc_vn (bool);
3762+bool run_scc_vn (bool, vn_lookup_kind);
3763 void free_scc_vn (void);
3764 tree vn_nary_op_lookup (tree, vn_nary_op_t *);
3765 tree vn_nary_op_lookup_stmt (gimple, vn_nary_op_t *);
3766@@ -185,7 +187,6 @@
3767 void copy_reference_ops_from_call (gimple, VEC(vn_reference_op_s, heap) **);
3768 bool ao_ref_init_from_vn_reference (ao_ref *, alias_set_type, tree,
3769 VEC (vn_reference_op_s, heap) *);
3770-typedef enum { VN_NOWALK, VN_WALK, VN_WALKREWRITE } vn_lookup_kind;
3771 tree vn_reference_lookup_pieces (tree, alias_set_type, tree,
3772 VEC (vn_reference_op_s, heap) *,
3773 vn_reference_t *, vn_lookup_kind);
3774
3775=== modified file 'gcc/tree-ssa-structalias.c'
3776--- gcc/tree-ssa-structalias.c 2011-02-01 11:27:04 +0000
3777+++ gcc/tree-ssa-structalias.c 2011-04-06 13:16:33 +0000
3778@@ -2788,33 +2788,6 @@
3779 }
3780 }
3781
3782-/* Return true if T is a type that could contain pointers. */
3783-
3784-static bool
3785-type_could_have_pointers (tree type)
3786-{
3787- if (POINTER_TYPE_P (type))
3788- return true;
3789-
3790- if (TREE_CODE (type) == ARRAY_TYPE)
3791- return type_could_have_pointers (TREE_TYPE (type));
3792-
3793- return AGGREGATE_TYPE_P (type);
3794-}
3795-
3796-/* Return true if T is a variable of a type that could contain
3797- pointers. */
3798-
3799-static bool
3800-could_have_pointers (tree t)
3801-{
3802- return (((TREE_CODE (t) == VAR_DECL
3803- || TREE_CODE (t) == PARM_DECL
3804- || TREE_CODE (t) == RESULT_DECL)
3805- && (TREE_PUBLIC (t) || DECL_EXTERNAL (t) || TREE_ADDRESSABLE (t)))
3806- || type_could_have_pointers (TREE_TYPE (t)));
3807-}
3808-
3809 /* Return the position, in bits, of FIELD_DECL from the beginning of its
3810 structure. */
3811
3812@@ -2826,7 +2799,7 @@
3813 || !host_integerp (DECL_FIELD_BIT_OFFSET (fdecl), 0))
3814 return -1;
3815
3816- return (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (fdecl)) * 8
3817+ return (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (fdecl)) * BITS_PER_UNIT
3818 + TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (fdecl)));
3819 }
3820
3821@@ -3167,14 +3140,18 @@
3822 in that case *NULL does not fail, so it _should_ alias *anything.
3823 It is not worth adding a new option or renaming the existing one,
3824 since this case is relatively obscure. */
3825- if (flag_delete_null_pointer_checks
3826- && ((TREE_CODE (t) == INTEGER_CST
3827- && integer_zerop (t))
3828- /* The only valid CONSTRUCTORs in gimple with pointer typed
3829- elements are zero-initializer. */
3830- || TREE_CODE (t) == CONSTRUCTOR))
3831+ if ((TREE_CODE (t) == INTEGER_CST
3832+ && integer_zerop (t))
3833+ /* The only valid CONSTRUCTORs in gimple with pointer typed
3834+ elements are zero-initializer. But in IPA mode we also
3835+ process global initializers, so verify at least. */
3836+ || (TREE_CODE (t) == CONSTRUCTOR
3837+ && CONSTRUCTOR_NELTS (t) == 0))
3838 {
3839- temp.var = nothing_id;
3840+ if (flag_delete_null_pointer_checks)
3841+ temp.var = nothing_id;
3842+ else
3843+ temp.var = nonlocal_id;
3844 temp.type = ADDRESSOF;
3845 temp.offset = 0;
3846 VEC_safe_push (ce_s, heap, *results, &temp);
3847@@ -3247,6 +3224,15 @@
3848 get_constraint_for_ssa_var (t, results, address_p);
3849 return;
3850 }
3851+ case tcc_constant:
3852+ {
3853+ /* We cannot refer to automatic variables through constants. */
3854+ temp.type = ADDRESSOF;
3855+ temp.var = nonlocal_id;
3856+ temp.offset = 0;
3857+ VEC_safe_push (ce_s, heap, *results, &temp);
3858+ return;
3859+ }
3860 default:;
3861 }
3862
3863@@ -3502,8 +3488,7 @@
3864
3865 /* Find those pointers being passed, and make sure they end up
3866 pointing to anything. */
3867- if (could_have_pointers (arg))
3868- make_escape_constraint (arg);
3869+ make_escape_constraint (arg);
3870 }
3871
3872 /* The static chain escapes as well. */
3873@@ -3603,17 +3588,13 @@
3874 for (k = 0; k < gimple_call_num_args (stmt); ++k)
3875 {
3876 tree arg = gimple_call_arg (stmt, k);
3877-
3878- if (could_have_pointers (arg))
3879- {
3880- VEC(ce_s, heap) *argc = NULL;
3881- unsigned i;
3882- struct constraint_expr *argp;
3883- get_constraint_for_rhs (arg, &argc);
3884- for (i = 0; VEC_iterate (ce_s, argc, i, argp); ++i)
3885- VEC_safe_push (ce_s, heap, *results, argp);
3886- VEC_free(ce_s, heap, argc);
3887- }
3888+ VEC(ce_s, heap) *argc = NULL;
3889+ unsigned i;
3890+ struct constraint_expr *argp;
3891+ get_constraint_for_rhs (arg, &argc);
3892+ for (i = 0; VEC_iterate (ce_s, argc, i, argp); ++i)
3893+ VEC_safe_push (ce_s, heap, *results, argp);
3894+ VEC_free(ce_s, heap, argc);
3895 }
3896
3897 /* May return addresses of globals. */
3898@@ -3637,12 +3618,8 @@
3899 for (i = 0; i < gimple_call_num_args (stmt); ++i)
3900 {
3901 tree arg = gimple_call_arg (stmt, i);
3902-
3903- if (could_have_pointers (arg))
3904- {
3905- make_constraint_to (callused_id, arg);
3906- need_callused = true;
3907- }
3908+ make_constraint_to (callused_id, arg);
3909+ need_callused = true;
3910 }
3911
3912 /* The static chain is used as well. */
3913@@ -3682,34 +3659,27 @@
3914 /* Now build constraints expressions. */
3915 if (gimple_code (t) == GIMPLE_PHI)
3916 {
3917- gcc_assert (!AGGREGATE_TYPE_P (TREE_TYPE (gimple_phi_result (t))));
3918+ size_t i;
3919+ unsigned int j;
3920
3921- /* Only care about pointers and structures containing
3922- pointers. */
3923- if (could_have_pointers (gimple_phi_result (t)))
3924+ /* For a phi node, assign all the arguments to
3925+ the result. */
3926+ get_constraint_for (gimple_phi_result (t), &lhsc);
3927+ for (i = 0; i < gimple_phi_num_args (t); i++)
3928 {
3929- size_t i;
3930- unsigned int j;
3931-
3932- /* For a phi node, assign all the arguments to
3933- the result. */
3934- get_constraint_for (gimple_phi_result (t), &lhsc);
3935- for (i = 0; i < gimple_phi_num_args (t); i++)
3936+ tree strippedrhs = PHI_ARG_DEF (t, i);
3937+
3938+ STRIP_NOPS (strippedrhs);
3939+ get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc);
3940+
3941+ for (j = 0; VEC_iterate (ce_s, lhsc, j, c); j++)
3942 {
3943- tree strippedrhs = PHI_ARG_DEF (t, i);
3944-
3945- STRIP_NOPS (strippedrhs);
3946- get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc);
3947-
3948- for (j = 0; VEC_iterate (ce_s, lhsc, j, c); j++)
3949+ struct constraint_expr *c2;
3950+ while (VEC_length (ce_s, rhsc) > 0)
3951 {
3952- struct constraint_expr *c2;
3953- while (VEC_length (ce_s, rhsc) > 0)
3954- {
3955- c2 = VEC_last (ce_s, rhsc);
3956- process_constraint (new_constraint (*c, *c2));
3957- VEC_pop (ce_s, rhsc);
3958- }
3959+ c2 = VEC_last (ce_s, rhsc);
3960+ process_constraint (new_constraint (*c, *c2));
3961+ VEC_pop (ce_s, rhsc);
3962 }
3963 }
3964 }
3965@@ -3858,16 +3828,7 @@
3966 else
3967 handle_rhs_call (t, &rhsc);
3968 if (gimple_call_lhs (t))
3969- {
3970- if (could_have_pointers (gimple_call_lhs (t)))
3971- handle_lhs_call (gimple_call_lhs (t), flags, rhsc, fndecl);
3972- /* Similar to conversions a result that is not a pointer
3973- is an escape point for any pointer the function might
3974- return. */
3975- else if (flags & (ECF_CONST|ECF_PURE
3976- |ECF_NOVOPS|ECF_LOOPING_CONST_OR_PURE))
3977- make_constraints_to (escaped_id, rhsc);
3978- }
3979+ handle_lhs_call (gimple_call_lhs (t), flags, rhsc, fndecl);
3980 VEC_free (ce_s, heap, rhsc);
3981 }
3982 else
3983@@ -3950,8 +3911,7 @@
3984 /* Otherwise, just a regular assignment statement. Only care about
3985 operations with pointer result, others are dealt with as escape
3986 points if they have pointer operands. */
3987- else if (is_gimple_assign (t)
3988- && type_could_have_pointers (TREE_TYPE (gimple_assign_lhs (t))))
3989+ else if (is_gimple_assign (t))
3990 {
3991 /* Otherwise, just a regular assignment statement. */
3992 tree lhsop = gimple_assign_lhs (t);
3993@@ -3961,23 +3921,45 @@
3994 do_structure_copy (lhsop, rhsop);
3995 else
3996 {
3997- struct constraint_expr temp;
3998+ enum tree_code code = gimple_assign_rhs_code (t);
3999+
4000 get_constraint_for (lhsop, &lhsc);
4001
4002- if (gimple_assign_rhs_code (t) == POINTER_PLUS_EXPR)
4003+ if (code == POINTER_PLUS_EXPR)
4004 get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),
4005 gimple_assign_rhs2 (t), &rhsc);
4006- else if ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (t))
4007+ else if (code == BIT_AND_EXPR
4008+ && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST)
4009+ {
4010+ /* Aligning a pointer via a BIT_AND_EXPR is offsetting
4011+ the pointer. Handle it by offsetting it by UNKNOWN. */
4012+ get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),
4013+ NULL_TREE, &rhsc);
4014+ }
4015+ else if ((CONVERT_EXPR_CODE_P (code)
4016 && !(POINTER_TYPE_P (gimple_expr_type (t))
4017 && !POINTER_TYPE_P (TREE_TYPE (rhsop))))
4018 || gimple_assign_single_p (t))
4019 get_constraint_for_rhs (rhsop, &rhsc);
4020+ else if (truth_value_p (code))
4021+ /* Truth value results are not pointer (parts). Or at least
4022+ very very unreasonable obfuscation of a part. */
4023+ ;
4024 else
4025 {
4026- temp.type = ADDRESSOF;
4027- temp.var = anything_id;
4028- temp.offset = 0;
4029- VEC_safe_push (ce_s, heap, rhsc, &temp);
4030+ /* All other operations are merges. */
4031+ VEC (ce_s, heap) *tmp = NULL;
4032+ struct constraint_expr *rhsp;
4033+ unsigned i, j;
4034+ get_constraint_for_rhs (gimple_assign_rhs1 (t), &rhsc);
4035+ for (i = 2; i < gimple_num_ops (t); ++i)
4036+ {
4037+ get_constraint_for_rhs (gimple_op (t, i), &tmp);
4038+ for (j = 0; VEC_iterate (ce_s, tmp, j, rhsp); ++j)
4039+ VEC_safe_push (ce_s, heap, rhsc, rhsp);
4040+ VEC_truncate (ce_s, tmp, 0);
4041+ }
4042+ VEC_free (ce_s, heap, tmp);
4043 }
4044 process_all_all_constraints (lhsc, rhsc);
4045 }
4046@@ -3996,17 +3978,9 @@
4047 make_constraint_from_restrict (get_vi_for_tree (lhsop),
4048 "CAST_RESTRICT");
4049 }
4050- /* For conversions of pointers to non-pointers the pointer escapes. */
4051- else if (gimple_assign_cast_p (t)
4052- && POINTER_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (t)))
4053- && !POINTER_TYPE_P (TREE_TYPE (gimple_assign_lhs (t))))
4054- {
4055- make_escape_constraint (gimple_assign_rhs1 (t));
4056- }
4057 /* Handle escapes through return. */
4058 else if (gimple_code (t) == GIMPLE_RETURN
4059- && gimple_return_retval (t) != NULL_TREE
4060- && could_have_pointers (gimple_return_retval (t)))
4061+ && gimple_return_retval (t) != NULL_TREE)
4062 {
4063 make_escape_constraint (gimple_return_retval (t));
4064 }
4065@@ -4037,7 +4011,7 @@
4066
4067 /* The asm may read global memory, so outputs may point to
4068 any global memory. */
4069- if (op && could_have_pointers (op))
4070+ if (op)
4071 {
4072 VEC(ce_s, heap) *lhsc = NULL;
4073 struct constraint_expr rhsc, *lhsp;
4074@@ -4067,7 +4041,7 @@
4075 /* Strictly we'd only need the constraint to ESCAPED if
4076 the asm clobbers memory, otherwise using CALLUSED
4077 would be enough. */
4078- else if (op && could_have_pointers (op))
4079+ else if (op)
4080 make_escape_constraint (op);
4081 }
4082 }
4083@@ -4192,6 +4166,8 @@
4084
4085 unsigned has_unknown_size : 1;
4086
4087+ unsigned must_have_pointers : 1;
4088+
4089 unsigned may_have_pointers : 1;
4090
4091 unsigned only_restrict_pointers : 1;
4092@@ -4256,6 +4232,33 @@
4093 return false;
4094 }
4095
4096+/* Return true if T is a type that does contain pointers. */
4097+
4098+static bool
4099+type_must_have_pointers (tree type)
4100+{
4101+ if (POINTER_TYPE_P (type))
4102+ return true;
4103+
4104+ if (TREE_CODE (type) == ARRAY_TYPE)
4105+ return type_must_have_pointers (TREE_TYPE (type));
4106+
4107+ /* A function or method can have pointers as arguments, so track
4108+ those separately. */
4109+ if (TREE_CODE (type) == FUNCTION_TYPE
4110+ || TREE_CODE (type) == METHOD_TYPE)
4111+ return true;
4112+
4113+ return false;
4114+}
4115+
4116+static bool
4117+field_must_have_pointers (tree t)
4118+{
4119+ return type_must_have_pointers (TREE_TYPE (t));
4120+}
4121+
4122+
4123 /* Given a TYPE, and a vector of field offsets FIELDSTACK, push all
4124 the fields of TYPE onto fieldstack, recording their offsets along
4125 the way.
4126@@ -4266,7 +4269,7 @@
4127
4128 static int
4129 push_fields_onto_fieldstack (tree type, VEC(fieldoff_s,heap) **fieldstack,
4130- HOST_WIDE_INT offset, bool must_have_pointers_p)
4131+ HOST_WIDE_INT offset)
4132 {
4133 tree field;
4134 int count = 0;
4135@@ -4292,8 +4295,7 @@
4136 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
4137 push = true;
4138 else if (!(pushed = push_fields_onto_fieldstack
4139- (TREE_TYPE (field), fieldstack, offset + foff,
4140- must_have_pointers_p))
4141+ (TREE_TYPE (field), fieldstack, offset + foff))
4142 && (DECL_SIZE (field)
4143 && !integer_zerop (DECL_SIZE (field))))
4144 /* Empty structures may have actual size, like in C++. So
4145@@ -4305,6 +4307,7 @@
4146 {
4147 fieldoff_s *pair = NULL;
4148 bool has_unknown_size = false;
4149+ bool must_have_pointers_p;
4150
4151 if (!VEC_empty (fieldoff_s, *fieldstack))
4152 pair = VEC_last (fieldoff_s, *fieldstack);
4153@@ -4325,15 +4328,14 @@
4154 has_unknown_size = true;
4155
4156 /* If adjacent fields do not contain pointers merge them. */
4157+ must_have_pointers_p = field_must_have_pointers (field);
4158 if (pair
4159- && !pair->may_have_pointers
4160- && !pair->has_unknown_size
4161 && !has_unknown_size
4162- && pair->offset + (HOST_WIDE_INT)pair->size == offset + foff
4163 && !must_have_pointers_p
4164- && !could_have_pointers (field))
4165+ && !pair->must_have_pointers
4166+ && !pair->has_unknown_size
4167+ && pair->offset + (HOST_WIDE_INT)pair->size == offset + foff)
4168 {
4169- pair = VEC_last (fieldoff_s, *fieldstack);
4170 pair->size += TREE_INT_CST_LOW (DECL_SIZE (field));
4171 }
4172 else
4173@@ -4345,8 +4347,8 @@
4174 pair->size = TREE_INT_CST_LOW (DECL_SIZE (field));
4175 else
4176 pair->size = -1;
4177- pair->may_have_pointers
4178- = must_have_pointers_p || could_have_pointers (field);
4179+ pair->must_have_pointers = must_have_pointers_p;
4180+ pair->may_have_pointers = true;
4181 pair->only_restrict_pointers
4182 = (!has_unknown_size
4183 && POINTER_TYPE_P (TREE_TYPE (field))
4184@@ -4512,17 +4514,14 @@
4185 VEC (fieldoff_s,heap) *fieldstack = NULL;
4186
4187 if (var_can_have_subvars (decl) && use_field_sensitive)
4188- push_fields_onto_fieldstack (decl_type, &fieldstack, 0,
4189- TREE_PUBLIC (decl)
4190- || DECL_EXTERNAL (decl)
4191- || TREE_ADDRESSABLE (decl));
4192+ push_fields_onto_fieldstack (decl_type, &fieldstack, 0);
4193
4194 /* If the variable doesn't have subvars, we may end up needing to
4195 sort the field list and create fake variables for all the
4196 fields. */
4197 vi = new_var_info (decl, name);
4198 vi->offset = 0;
4199- vi->may_have_pointers = could_have_pointers (decl);
4200+ vi->may_have_pointers = true;
4201 if (!declsize
4202 || !host_integerp (declsize, 1))
4203 {
4204@@ -4695,9 +4694,6 @@
4205 {
4206 varinfo_t p;
4207
4208- if (!could_have_pointers (t))
4209- continue;
4210-
4211 /* For restrict qualified pointers to objects passed by
4212 reference build a real representative for the pointed-to object. */
4213 if (DECL_BY_REFERENCE (t)
4214
4215=== modified file 'gcc/tree-vect-generic.c'
4216--- gcc/tree-vect-generic.c 2009-11-25 10:55:54 +0000
4217+++ gcc/tree-vect-generic.c 2011-04-06 13:16:33 +0000
4218@@ -518,8 +518,7 @@
4219 way to do it is change expand_vector_operation and its callees to
4220 return a tree_code, RHS1 and RHS2 instead of a tree. */
4221 gimple_assign_set_rhs_from_tree (gsi, new_rhs);
4222-
4223- gimple_set_modified (gsi_stmt (*gsi), true);
4224+ update_stmt (gsi_stmt (*gsi));
4225 }
4226
4227
4228 /* Use this to lower vector operations introduced by the vectorizer,
4229@@ -536,16 +535,24 @@
4230 {
4231 gimple_stmt_iterator gsi;
4232 basic_block bb;
4233+ bool cfg_changed = false;
4234
4235 FOR_EACH_BB (bb)
4236 {
4237 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
4238 {
4239 expand_vector_operations_1 (&gsi);
4240- update_stmt_if_modified (gsi_stmt (gsi));
4241+ /* ??? If we do not cleanup EH then we will ICE in
4242+ verification. But in reality we have created wrong-code
4243+ as we did not properly transition EH info and edges to
4244+ the piecewise computations. */
4245+ if (maybe_clean_eh_stmt (gsi_stmt (gsi))
4246+ && gimple_purge_dead_eh_edges (bb))
4247+ cfg_changed = true;
4248 }
4249 }
4250- return 0;
4251+
4252+ return cfg_changed ? TODO_cleanup_cfg : 0;
4253 }
4254
4255 struct gimple_opt_pass pass_lower_vector =
4256
4257=== modified file 'gcc/tree-vect-loop.c'
4258--- gcc/tree-vect-loop.c 2010-06-14 12:43:24 +0000
4259+++ gcc/tree-vect-loop.c 2011-04-06 13:16:33 +0000
4260@@ -2363,7 +2363,7 @@
4261 stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
4262 loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
4263 struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
4264- tree scalar_type = TREE_TYPE (gimple_phi_result (iv_phi));
4265+ tree scalar_type;
4266 tree vectype;
4267 int nunits;
4268 edge pe = loop_preheader_edge (loop);
4269@@ -2392,24 +2392,7 @@
4270 gimple_stmt_iterator si;
4271 basic_block bb = gimple_bb (iv_phi);
4272 tree stepvectype;
4273-
4274- vectype = get_vectype_for_scalar_type (scalar_type);
4275- gcc_assert (vectype);
4276- nunits = TYPE_VECTOR_SUBPARTS (vectype);
4277- ncopies = vf / nunits;
4278-
4279- gcc_assert (phi_info);
4280- gcc_assert (ncopies >= 1);
4281-
4282- /* Find the first insertion point in the BB. */
4283- si = gsi_after_labels (bb);
4284-
4285- if (INTEGRAL_TYPE_P (scalar_type))
4286- step_expr = build_int_cst (scalar_type, 0);
4287- else if (POINTER_TYPE_P (scalar_type))
4288- step_expr = build_int_cst (sizetype, 0);
4289- else
4290- step_expr = build_real (scalar_type, dconst0);
4291+ tree resvectype;
4292
4293 /* Is phi in an inner-loop, while vectorizing an enclosing outer-loop? */
4294 if (nested_in_vect_loop_p (loop, iv_phi))
4295@@ -2426,11 +2409,25 @@
4296
4297 access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
4298 gcc_assert (access_fn);
4299+ STRIP_NOPS (access_fn);
4300 ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
4301 &init_expr, &step_expr);
4302 gcc_assert (ok);
4303 pe = loop_preheader_edge (iv_loop);
4304
4305+ scalar_type = TREE_TYPE (init_expr);
4306+ vectype = get_vectype_for_scalar_type (scalar_type);
4307+ resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
4308+ gcc_assert (vectype);
4309+ nunits = TYPE_VECTOR_SUBPARTS (vectype);
4310+ ncopies = vf / nunits;
4311+
4312+ gcc_assert (phi_info);
4313+ gcc_assert (ncopies >= 1);
4314+
4315+ /* Find the first insertion point in the BB. */
4316+ si = gsi_after_labels (bb);
4317+
4318 /* Create the vector that holds the initial_value of the induction. */
4319 if (nested_in_vect_loop)
4320 {
4321@@ -2456,7 +2453,7 @@
4322 }
4323
4324 t = NULL_TREE;
4325- t = tree_cons (NULL_TREE, init_expr, t);
4326+ t = tree_cons (NULL_TREE, new_name, t);
4327 for (i = 1; i < nunits; i++)
4328 {
4329 /* Create: new_name_i = new_name + step_expr */
4330@@ -2575,6 +2572,19 @@
4331 gimple_assign_set_lhs (new_stmt, vec_def);
4332
4333 gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);
4334+ if (!useless_type_conversion_p (resvectype, vectype))
4335+ {
4336+ new_stmt = gimple_build_assign_with_ops
4337+ (VIEW_CONVERT_EXPR,
4338+ vect_get_new_vect_var (resvectype, vect_simple_var,
4339+ "vec_iv_"),
4340+ build1 (VIEW_CONVERT_EXPR, resvectype,
4341+ gimple_assign_lhs (new_stmt)), NULL_TREE);
4342+ gimple_assign_set_lhs (new_stmt,
4343+ make_ssa_name
4344+ (gimple_assign_lhs (new_stmt), new_stmt));
4345+ gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);
4346+ }
4347 set_vinfo_for_stmt (new_stmt,
4348 new_stmt_vec_info (new_stmt, loop_vinfo, NULL));
4349 STMT_VINFO_RELATED_STMT (prev_stmt_vinfo) = new_stmt;
4350@@ -2622,6 +2632,22 @@
4351 }
4352
4353 STMT_VINFO_VEC_STMT (phi_info) = induction_phi;
4354+ if (!useless_type_conversion_p (resvectype, vectype))
4355+ {
4356+ new_stmt = gimple_build_assign_with_ops
4357+ (VIEW_CONVERT_EXPR,
4358+ vect_get_new_vect_var (resvectype, vect_simple_var, "vec_iv_"),
4359+ build1 (VIEW_CONVERT_EXPR, resvectype, induc_def), NULL_TREE);
4360+ induc_def = make_ssa_name (gimple_assign_lhs (new_stmt), new_stmt);
4361+ gimple_assign_set_lhs (new_stmt, induc_def);
4362+ si = gsi_start_bb (bb);
4363+ gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);
4364+ set_vinfo_for_stmt (new_stmt,
4365+ new_stmt_vec_info (new_stmt, loop_vinfo, NULL));
4366+ STMT_VINFO_RELATED_STMT (vinfo_for_stmt (new_stmt))
4367+ = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (induction_phi));
4368+ }
4369+
4370 return induc_def;
4371 }
4372
4373
4374=== modified file 'gcc/tree-vect-stmts.c'
4375--- gcc/tree-vect-stmts.c 2010-11-26 12:03:32 +0000
4376+++ gcc/tree-vect-stmts.c 2011-04-06 13:16:33 +0000
4377@@ -1014,8 +1014,10 @@
4378 /* Get the def from the vectorized stmt. */
4379 def_stmt_info = vinfo_for_stmt (def_stmt);
4380 vec_stmt = STMT_VINFO_VEC_STMT (def_stmt_info);
4381- gcc_assert (vec_stmt && gimple_code (vec_stmt) == GIMPLE_PHI);
4382- vec_oprnd = PHI_RESULT (vec_stmt);
4383+ if (gimple_code (vec_stmt) == GIMPLE_PHI)
4384+ vec_oprnd = PHI_RESULT (vec_stmt);
4385+ else
4386+ vec_oprnd = gimple_get_lhs (vec_stmt);
4387 return vec_oprnd;
4388 }
4389
4390@@ -2236,7 +2238,6 @@
4391 int op_type;
4392 optab optab;
4393 int icode;
4394- enum machine_mode optab_op2_mode;
4395 tree def;
4396 gimple def_stmt;
4397 enum vect_def_type dt[2] = {vect_unknown_def_type, vect_unknown_def_type};
4398@@ -2249,8 +2250,6 @@
4399 int j, i;
4400 VEC(tree,heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL;
4401 tree vop0, vop1;
4402- unsigned int k;
4403- bool scalar_shift_arg = false;
4404 bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
4405 int vf;
4406
4407
4408=== modified file 'gcc/tree.c'
4409--- gcc/tree.c 2010-09-16 09:15:46 +0000
4410+++ gcc/tree.c 2011-04-06 13:16:33 +0000
4411@@ -5797,12 +5797,18 @@
4412 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
4413 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
4414 TYPE_ATTRIBUTES (b->type))
4415- || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
4416- || TYPE_MODE (a->type) != TYPE_MODE (b->type)
4417 || (TREE_CODE (a->type) != COMPLEX_TYPE
4418 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
4419 return 0;
4420
4421+ /* Be careful about comparing arrays before and after the element type
4422+ has been completed; don't compare TYPE_ALIGN unless both types are
4423+ complete. */
4424+ if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
4425+ && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
4426+ || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
4427+ return 0;
4428+
4429 switch (TREE_CODE (a->type))
4430 {
4431 case VOID_TYPE:
4432
4433=== modified file 'gcc/tree.h'
4434--- gcc/tree.h 2010-11-26 12:03:32 +0000
4435+++ gcc/tree.h 2011-04-06 13:16:33 +0000
4436@@ -2913,26 +2913,6 @@
4437
4438 #define DECL_COMDAT_GROUP(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group)
4439
4440-/* A replaceable function is one which may be replaced at link-time
4441- with an entirely different definition, provided that the
4442- replacement has the same type. For example, functions declared
4443- with __attribute__((weak)) on most systems are replaceable.
4444-
4445- COMDAT functions are not replaceable, since all definitions of the
4446- function must be equivalent. It is important that COMDAT functions
4447- not be treated as replaceable so that use of C++ template
4448- instantiations is not penalized.
4449-
4450- For example, DECL_REPLACEABLE is used to determine whether or not a
4451- function (including a template instantiation) which is not
4452- explicitly declared "inline" can be inlined. If the function is
4453- DECL_REPLACEABLE then it is not safe to do the inlining, since the
4454- implementation chosen at link-time may be different. However, a
4455- function that is not DECL_REPLACEABLE can be inlined, since all
4456- versions of the function will be functionally identical. */
4457-#define DECL_REPLACEABLE_P(NODE) \
4458- (!DECL_COMDAT (NODE) && !targetm.binds_local_p (NODE))
4459-
4460 /* The name of the object as the assembler will see it (but before any
4461 translations made by ASM_OUTPUT_LABELREF). Often this is the same
4462 as DECL_NAME. It is an IDENTIFIER_NODE. */
4463@@ -5148,6 +5128,8 @@
4464 extern void finish_aliases_2 (void);
4465 extern tree emutls_decl (tree);
4466 extern void remove_unreachable_alias_pairs (void);
4467+extern bool decl_replaceable_p (tree);
4468+extern bool decl_binds_to_current_def_p (tree);
4469
4470 /* In stmt.c */
4471 extern void expand_computed_goto (tree);
4472
4473=== modified file 'gcc/varasm.c'
4474--- gcc/varasm.c 2010-08-13 11:53:46 +0000
4475+++ gcc/varasm.c 2011-04-06 13:16:33 +0000
4476@@ -6721,6 +6721,51 @@
4477 return local_p;
4478 }
4479
4480+/* Return true when references to DECL must bind to current definition in
4481+ final executable.
4482+
4483+ The condition is usually equivalent to whether the function binds to the
4484+ current module (shared library or executable), that is to binds_local_p.
4485+ We use this fact to avoid need for another target hook and implement
4486+ the logic using binds_local_p and just special cases where
4487+ decl_binds_to_current_def_p is stronger than binds local_p. In particular
4488+ the weak definitions (that can be overwritten at linktime by other
4489+ definition from different object file) and when resolution info is available
4490+ we simply use the knowledge passed to us by linker plugin. */
4491+bool
4492+decl_binds_to_current_def_p (tree decl)
4493+{
4494+ gcc_assert (DECL_P (decl));
4495+ if (!TREE_PUBLIC (decl))
4496+ return true;
4497+ if (!targetm.binds_local_p (decl))
4498+ return false;
4499+ /* Otherwise we have to assume the worst for DECL_WEAK (hidden weaks
4500+ binds localy but still can be overwritten).
4501+ This rely on fact that binds_local_p behave as decl_replaceable_p
4502+ for all other declaration types. */
4503+ return !DECL_WEAK (decl);
4504+}
4505+
4506+/* A replaceable function or variable is one which may be replaced
4507+ at link-time with an entirely different definition, provided that the
4508+ replacement has the same type. For example, functions declared
4509+ with __attribute__((weak)) on most systems are replaceable.
4510+
4511+ COMDAT functions are not replaceable, since all definitions of the
4512+ function must be equivalent. It is important that COMDAT functions
4513+ not be treated as replaceable so that use of C++ template
4514+ instantiations is not penalized. */
4515+
4516+bool
4517+decl_replaceable_p (tree decl)
4518+{
4519+ gcc_assert (DECL_P (decl));
4520+ if (!TREE_PUBLIC (decl) || DECL_COMDAT (decl))
4521+ return false;
4522+ return !decl_binds_to_current_def_p (decl);
4523+}
4524+
4525 /* Default function to output code that will globalize a label. A
4526 target must define GLOBAL_ASM_OP or provide its own function to
4527 globalize a label. */
4528
4529=== modified file 'libcpp/ChangeLog'
4530--- libcpp/ChangeLog 2011-01-04 23:18:29 +0000
4531+++ libcpp/ChangeLog 2011-04-06 13:16:33 +0000
4532@@ -1,4 +1,13 @@
4533-2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
4534+2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
4535+
4536+ PR preprocessor/48192
4537+ Backport from trunk
4538+ * directives.c (do_ifdef): Do not consider conditional macros as
4539+ being defined.
4540+ (do_ifndef): Ditto.
4541+ * expr.c (parse_defined): Ditto.
4542+
4543+2011-01-04 Eric Botcazou <ebotcazou@adacore.com>
4544 Jakub Jelinek <jakub@redhat.com>
4545
4546 PR preprocessor/39213
4547
4548=== modified file 'libcpp/directives.c'
4549--- libcpp/directives.c 2011-01-04 23:18:29 +0000
4550+++ libcpp/directives.c 2011-04-06 13:16:33 +0000
4551@@ -1793,7 +1793,12 @@
4552
4553 if (node)
4554 {
4555- skip = node->type != NT_MACRO;
4556+ /* Do not treat conditional macros as being defined. This is due to
4557+ the powerpc and spu ports using conditional macros for 'vector',
4558+ 'bool', and 'pixel' to act as conditional keywords. This messes
4559+ up tests like #ifndef bool. */
4560+ skip = (node->type != NT_MACRO
4561+ || ((node->flags & NODE_CONDITIONAL) != 0));
4562 _cpp_mark_macro_used (node);
4563 if (!(node->flags & NODE_USED))
4564 {
4565@@ -1831,7 +1836,12 @@
4566
4567 if (node)
4568 {
4569- skip = node->type == NT_MACRO;
4570+ /* Do not treat conditional macros as being defined. This is due to
4571+ the powerpc and spu ports using conditional macros for 'vector',
4572+ 'bool', and 'pixel' to act as conditional keywords. This messes
4573+ up tests like #ifndef bool. */
4574+ skip = (node->type == NT_MACRO
4575+ && ((node->flags & NODE_CONDITIONAL) == 0));
4576 _cpp_mark_macro_used (node);
4577 if (!(node->flags & NODE_USED))
4578 {
4579
4580=== modified file 'libcpp/expr.c'
4581--- libcpp/expr.c 2010-01-01 18:08:17 +0000
4582+++ libcpp/expr.c 2011-04-06 13:16:33 +0000
4583@@ -711,10 +711,15 @@
4584
4585 pfile->state.prevent_expansion--;
4586
4587+ /* Do not treat conditional macros as being defined. This is due to the
4588+ powerpc and spu ports using conditional macros for 'vector', 'bool', and
4589+ 'pixel' to act as conditional keywords. This messes up tests like #ifndef
4590+ bool. */
4591 result.unsignedp = false;
4592 result.high = 0;
4593 result.overflow = false;
4594- result.low = node && node->type == NT_MACRO;
4595+ result.low = (node && node->type == NT_MACRO
4596+ && (node->flags & NODE_CONDITIONAL) == 0);
4597 return result;
4598 }
4599
4600
4601=== modified file 'libgcc/ChangeLog'
4602--- libgcc/ChangeLog 2010-12-16 12:32:01 +0000
4603+++ libgcc/ChangeLog 2011-04-06 13:16:33 +0000
4604@@ -1,3 +1,15 @@
4605+2011-02-23 Nathan Froyd <froydnj@codesourcery.com>
4606+
4607+ PR target/43810
4608+
4609+ Backport from mainline:
4610+ 2010-07-23 Nathan Froyd <froydnj@codesourcery.com>
4611+
4612+ * config.host (powerpc*-eabispe*): Set tmake_file.
4613+ (powerpc*-eabi*): Likewise.
4614+ * config/rs6000/t-ppccomm (EXTRA_PARTS): Add crtbegin, crtend,
4615+ crtbeginS, crtendS, crtbeginT.
4616+
4617 2010-12-16 Release Manager
4618
4619 * GCC 4.5.2 released.
4620
4621=== modified file 'libgcc/config.host'
4622--- libgcc/config.host 2010-10-04 00:50:43 +0000
4623+++ libgcc/config.host 2011-04-06 13:16:33 +0000
4624@@ -459,6 +459,7 @@
4625 powerpc-*-netbsd*)
4626 ;;
4627 powerpc-*-eabispe*)
4628+ tmake_file="${tmake_file} rs6000/t-ppccomm"
4629 ;;
4630 powerpc-*-eabisimaltivec*)
4631 ;;
4632@@ -469,6 +470,7 @@
4633 powerpc-*-eabialtivec*)
4634 ;;
4635 powerpc-*-eabi*)
4636+ tmake_file="${tmake_file} rs6000/t-ppccomm"
4637 ;;
4638 powerpc-*-rtems*)
4639 ;;
4640
4641=== modified file 'libgcc/config/rs6000/t-ppccomm'
4642--- libgcc/config/rs6000/t-ppccomm 2008-06-26 13:15:49 +0000
4643+++ libgcc/config/rs6000/t-ppccomm 2011-04-06 13:16:33 +0000
4644@@ -15,7 +15,9 @@
4645 e500crtsavg64gpr.S \
4646 e500crtsavg64gprctr.S
4647
4648-EXTRA_PARTS += ecrti$(objext) ecrtn$(objext) ncrti$(objext) ncrtn$(objext)
4649+EXTRA_PARTS += crtbegin$(objext) crtend$(objext) \
4650+ crtbeginS$(objext) crtendS$(objext) crtbeginT$(objext) \
4651+ ecrti$(objext) ecrtn$(objext) ncrti$(objext) ncrtn$(objext)
4652
4653 # We build {e,n}crti.o and {e,n}crtn.o, which serve to add begin and
4654 # end labels to all of the special sections used when we link using gcc.
4655
4656=== modified file 'libgfortran/ChangeLog'
4657--- libgfortran/ChangeLog 2010-12-16 12:30:06 +0000
4658+++ libgfortran/ChangeLog 2011-04-06 13:16:33 +0000
4659@@ -1,3 +1,153 @@
4660+2011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
4661+
4662+ PR libfortran/48066
4663+ Backport from trunk
4664+ * m4/ifunction.m4: If return array is empty, return.
4665+ * m4/ifunction_logical.m4: Likewise.
4666+ * generated/all_l16.c: Regenerated.
4667+ * generated/all_l1.c: Regenerated.
4668+ * generated/all_l2.c: Regenerated.
4669+ * generated/all_l4.c: Regenerated.
4670+ * generated/all_l8.c: Regenerated.
4671+ * generated/any_l16.c: Regenerated.
4672+ * generated/any_l1.c: Regenerated.
4673+ * generated/any_l2.c: Regenerated.
4674+ * generated/any_l4.c: Regenerated.
4675+ * generated/any_l8.c: Regenerated.
4676+ * generated/count_16_l.c: Regenerated.
4677+ * generated/count_1_l.c: Regenerated.
4678+ * generated/count_2_l.c: Regenerated.
4679+ * generated/count_4_l.c: Regenerated.
4680+ * generated/count_8_l.c: Regenerated.
4681+ * generated/maxloc1_16_i16.c: Regenerated.
4682+ * generated/maxloc1_16_i1.c: Regenerated.
4683+ * generated/maxloc1_16_i2.c: Regenerated.
4684+ * generated/maxloc1_16_i4.c: Regenerated.
4685+ * generated/maxloc1_16_i8.c: Regenerated.
4686+ * generated/maxloc1_16_r10.c: Regenerated.
4687+ * generated/maxloc1_16_r16.c: Regenerated.
4688+ * generated/maxloc1_16_r4.c: Regenerated.
4689+ * generated/maxloc1_16_r8.c: Regenerated.
4690+ * generated/maxloc1_4_i16.c: Regenerated.
4691+ * generated/maxloc1_4_i1.c: Regenerated.
4692+ * generated/maxloc1_4_i2.c: Regenerated.
4693+ * generated/maxloc1_4_i4.c: Regenerated.
4694+ * generated/maxloc1_4_i8.c: Regenerated.
4695+ * generated/maxloc1_4_r10.c: Regenerated.
4696+ * generated/maxloc1_4_r16.c: Regenerated.
4697+ * generated/maxloc1_4_r4.c: Regenerated.
4698+ * generated/maxloc1_4_r8.c: Regenerated.
4699+ * generated/maxloc1_8_i16.c: Regenerated.
4700+ * generated/maxloc1_8_i1.c: Regenerated.
4701+ * generated/maxloc1_8_i2.c: Regenerated.
4702+ * generated/maxloc1_8_i4.c: Regenerated.
4703+ * generated/maxloc1_8_i8.c: Regenerated.
4704+ * generated/maxloc1_8_r10.c: Regenerated.
4705+ * generated/maxloc1_8_r16.c: Regenerated.
4706+ * generated/maxloc1_8_r4.c: Regenerated.
4707+ * generated/maxloc1_8_r8.c: Regenerated.
4708+ * generated/maxval_i16.c: Regenerated.
4709+ * generated/maxval_i1.c: Regenerated.
4710+ * generated/maxval_i2.c: Regenerated.
4711+ * generated/maxval_i4.c: Regenerated.
4712+ * generated/maxval_i8.c: Regenerated.
4713+ * generated/maxval_r10.c: Regenerated.
4714+ * generated/maxval_r16.c: Regenerated.
4715+ * generated/maxval_r4.c: Regenerated.
4716+ * generated/maxval_r8.c: Regenerated.
4717+ * generated/minloc1_16_i16.c: Regenerated.
4718+ * generated/minloc1_16_i1.c: Regenerated.
4719+ * generated/minloc1_16_i2.c: Regenerated.
4720+ * generated/minloc1_16_i4.c: Regenerated.
4721+ * generated/minloc1_16_i8.c: Regenerated.
4722+ * generated/minloc1_16_r10.c: Regenerated.
4723+ * generated/minloc1_16_r16.c: Regenerated.
4724+ * generated/minloc1_16_r4.c: Regenerated.
4725+ * generated/minloc1_16_r8.c: Regenerated.
4726+ * generated/minloc1_4_i16.c: Regenerated.
4727+ * generated/minloc1_4_i1.c: Regenerated.
4728+ * generated/minloc1_4_i2.c: Regenerated.
4729+ * generated/minloc1_4_i4.c: Regenerated.
4730+ * generated/minloc1_4_i8.c: Regenerated.
4731+ * generated/minloc1_4_r10.c: Regenerated.
4732+ * generated/minloc1_4_r16.c: Regenerated.
4733+ * generated/minloc1_4_r4.c: Regenerated.
4734+ * generated/minloc1_4_r8.c: Regenerated.
4735+ * generated/minloc1_8_i16.c: Regenerated.
4736+ * generated/minloc1_8_i1.c: Regenerated.
4737+ * generated/minloc1_8_i2.c: Regenerated.
4738+ * generated/minloc1_8_i4.c: Regenerated.
4739+ * generated/minloc1_8_i8.c: Regenerated.
4740+ * generated/minloc1_8_r10.c: Regenerated.
4741+ * generated/minloc1_8_r16.c: Regenerated.
4742+ * generated/minloc1_8_r4.c: Regenerated.
4743+ * generated/minloc1_8_r8.c: Regenerated.
4744+ * generated/minval_i16.c: Regenerated.
4745+ * generated/minval_i1.c: Regenerated.
4746+ * generated/minval_i2.c: Regenerated.
4747+ * generated/minval_i4.c: Regenerated.
4748+ * generated/minval_i8.c: Regenerated.
4749+ * generated/minval_r10.c: Regenerated.
4750+ * generated/minval_r16.c: Regenerated.
4751+ * generated/minval_r4.c: Regenerated.
4752+ * generated/minval_r8.c: Regenerated.
4753+ * generated/product_c10.c: Regenerated.
4754+ * generated/product_c16.c: Regenerated.
4755+ * generated/product_c4.c: Regenerated.
4756+ * generated/product_c8.c: Regenerated.
4757+ * generated/product_i16.c: Regenerated.
4758+ * generated/product_i1.c: Regenerated.
4759+ * generated/product_i2.c: Regenerated.
4760+ * generated/product_i4.c: Regenerated.
4761+ * generated/product_i8.c: Regenerated.
4762+ * generated/product_r10.c: Regenerated.
4763+ * generated/product_r16.c: Regenerated.
4764+ * generated/product_r4.c: Regenerated.
4765+ * generated/product_r8.c: Regenerated.
4766+ * generated/sum_c10.c: Regenerated.
4767+ * generated/sum_c16.c: Regenerated.
4768+ * generated/sum_c4.c: Regenerated.
4769+ * generated/sum_c8.c: Regenerated.
4770+ * generated/sum_i16.c: Regenerated.
4771+ * generated/sum_i1.c: Regenerated.
4772+ * generated/sum_i2.c: Regenerated.
4773+ * generated/sum_i4.c: Regenerated.
4774+ * generated/sum_i8.c: Regenerated.
4775+ * generated/sum_r10.c: Regenerated.
4776+ * generated/sum_r16.c: Regenerated.
4777+ * generated/sum_r4.c: Regenerated.
4778+ * generated/sum_r8.c: Regenerated.
4779+
4780+2011-03-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
4781+
4782+ PR libgfortran/47778
4783+ * io/list_read.c (namelist_read): Intialize the error string buffere.
4784+ If pprev_nl was used during the previous namelist read and the rank
4785+ was zero, reset the pointer to NULL for the next namelist read.
4786+
4787+2011-03-04 Jakub Jelinek <jakub@redhat.com>
4788+
4789+ Backport from mainline
4790+ PR fortran/47878
4791+ * io/transfer.c (read_sf): Call fbuf_getptr only at the end,
4792+ and subtract n, dtp->u.p.sf_seen_eor and seen_comma from it.
4793+
4794+2011-03-04 Janne Blomqvist <jb@gcc.gnu.org>
4795+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
4796+
4797+ Backport from mainline
4798+ PR libfortran/47694
4799+ * io/fbuf.h (fbuf_getptr): New inline function.
4800+ * io/transfer.c (read_sf): Use fbuf_getptr and fbuf_getc to scan
4801+ through the string instead of fbuf_read.
4802+
4803+2011-02-22 Tobias Burnus <burnus@net-b.de>
4804+ Kai-Uwe Eckhardt <kuehro@gmx.de>
4805+
4806+ PR libfortran/47830
4807+ * intrinsics/c99_functions.c (roundl): Make C valid for
4808+ HAVE_NEXTAFTERL.
4809+
4810 2010-12-16 Release Manager
4811
4812 * GCC 4.5.2 released.
4813
4814=== modified file 'libgfortran/generated/all_l1.c'
4815--- libgfortran/generated/all_l1.c 2009-06-21 18:24:55 +0000
4816+++ libgfortran/generated/all_l1.c 2011-04-06 13:16:33 +0000
4817@@ -142,7 +142,7 @@
4818 count[n] = 0;
4819 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4820 if (extent[n] <= 0)
4821- len = 0;
4822+ return;
4823 }
4824
4825 base = array->data;
4826
4827=== modified file 'libgfortran/generated/all_l16.c'
4828--- libgfortran/generated/all_l16.c 2009-06-21 18:24:55 +0000
4829+++ libgfortran/generated/all_l16.c 2011-04-06 13:16:33 +0000
4830@@ -142,7 +142,7 @@
4831 count[n] = 0;
4832 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4833 if (extent[n] <= 0)
4834- len = 0;
4835+ return;
4836 }
4837
4838 base = array->data;
4839
4840=== modified file 'libgfortran/generated/all_l2.c'
4841--- libgfortran/generated/all_l2.c 2009-06-21 18:24:55 +0000
4842+++ libgfortran/generated/all_l2.c 2011-04-06 13:16:33 +0000
4843@@ -142,7 +142,7 @@
4844 count[n] = 0;
4845 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4846 if (extent[n] <= 0)
4847- len = 0;
4848+ return;
4849 }
4850
4851 base = array->data;
4852
4853=== modified file 'libgfortran/generated/all_l4.c'
4854--- libgfortran/generated/all_l4.c 2009-06-21 18:24:55 +0000
4855+++ libgfortran/generated/all_l4.c 2011-04-06 13:16:33 +0000
4856@@ -142,7 +142,7 @@
4857 count[n] = 0;
4858 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4859 if (extent[n] <= 0)
4860- len = 0;
4861+ return;
4862 }
4863
4864 base = array->data;
4865
4866=== modified file 'libgfortran/generated/all_l8.c'
4867--- libgfortran/generated/all_l8.c 2009-06-21 18:24:55 +0000
4868+++ libgfortran/generated/all_l8.c 2011-04-06 13:16:33 +0000
4869@@ -142,7 +142,7 @@
4870 count[n] = 0;
4871 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4872 if (extent[n] <= 0)
4873- len = 0;
4874+ return;
4875 }
4876
4877 base = array->data;
4878
4879=== modified file 'libgfortran/generated/any_l1.c'
4880--- libgfortran/generated/any_l1.c 2009-06-21 18:24:55 +0000
4881+++ libgfortran/generated/any_l1.c 2011-04-06 13:16:33 +0000
4882@@ -142,7 +142,7 @@
4883 count[n] = 0;
4884 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4885 if (extent[n] <= 0)
4886- len = 0;
4887+ return;
4888 }
4889
4890 base = array->data;
4891
4892=== modified file 'libgfortran/generated/any_l16.c'
4893--- libgfortran/generated/any_l16.c 2009-06-21 18:24:55 +0000
4894+++ libgfortran/generated/any_l16.c 2011-04-06 13:16:33 +0000
4895@@ -142,7 +142,7 @@
4896 count[n] = 0;
4897 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4898 if (extent[n] <= 0)
4899- len = 0;
4900+ return;
4901 }
4902
4903 base = array->data;
4904
4905=== modified file 'libgfortran/generated/any_l2.c'
4906--- libgfortran/generated/any_l2.c 2009-06-21 18:24:55 +0000
4907+++ libgfortran/generated/any_l2.c 2011-04-06 13:16:33 +0000
4908@@ -142,7 +142,7 @@
4909 count[n] = 0;
4910 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4911 if (extent[n] <= 0)
4912- len = 0;
4913+ return;
4914 }
4915
4916 base = array->data;
4917
4918=== modified file 'libgfortran/generated/any_l4.c'
4919--- libgfortran/generated/any_l4.c 2009-06-21 18:24:55 +0000
4920+++ libgfortran/generated/any_l4.c 2011-04-06 13:16:33 +0000
4921@@ -142,7 +142,7 @@
4922 count[n] = 0;
4923 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4924 if (extent[n] <= 0)
4925- len = 0;
4926+ return;
4927 }
4928
4929 base = array->data;
4930
4931=== modified file 'libgfortran/generated/any_l8.c'
4932--- libgfortran/generated/any_l8.c 2009-06-21 18:24:55 +0000
4933+++ libgfortran/generated/any_l8.c 2011-04-06 13:16:33 +0000
4934@@ -142,7 +142,7 @@
4935 count[n] = 0;
4936 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4937 if (extent[n] <= 0)
4938- len = 0;
4939+ return;
4940 }
4941
4942 base = array->data;
4943
4944=== modified file 'libgfortran/generated/count_16_l.c'
4945--- libgfortran/generated/count_16_l.c 2009-06-21 18:24:55 +0000
4946+++ libgfortran/generated/count_16_l.c 2011-04-06 13:16:33 +0000
4947@@ -142,7 +142,7 @@
4948 count[n] = 0;
4949 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4950 if (extent[n] <= 0)
4951- len = 0;
4952+ return;
4953 }
4954
4955 base = array->data;
4956
4957=== modified file 'libgfortran/generated/count_1_l.c'
4958--- libgfortran/generated/count_1_l.c 2009-06-21 18:24:55 +0000
4959+++ libgfortran/generated/count_1_l.c 2011-04-06 13:16:33 +0000
4960@@ -142,7 +142,7 @@
4961 count[n] = 0;
4962 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4963 if (extent[n] <= 0)
4964- len = 0;
4965+ return;
4966 }
4967
4968 base = array->data;
4969
4970=== modified file 'libgfortran/generated/count_2_l.c'
4971--- libgfortran/generated/count_2_l.c 2009-06-21 18:24:55 +0000
4972+++ libgfortran/generated/count_2_l.c 2011-04-06 13:16:33 +0000
4973@@ -142,7 +142,7 @@
4974 count[n] = 0;
4975 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4976 if (extent[n] <= 0)
4977- len = 0;
4978+ return;
4979 }
4980
4981 base = array->data;
4982
4983=== modified file 'libgfortran/generated/count_4_l.c'
4984--- libgfortran/generated/count_4_l.c 2009-06-21 18:24:55 +0000
4985+++ libgfortran/generated/count_4_l.c 2011-04-06 13:16:33 +0000
4986@@ -142,7 +142,7 @@
4987 count[n] = 0;
4988 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
4989 if (extent[n] <= 0)
4990- len = 0;
4991+ return;
4992 }
4993
4994 base = array->data;
4995
4996=== modified file 'libgfortran/generated/count_8_l.c'
4997--- libgfortran/generated/count_8_l.c 2009-06-21 18:24:55 +0000
4998+++ libgfortran/generated/count_8_l.c 2011-04-06 13:16:33 +0000
4999@@ -142,7 +142,7 @@
5000 count[n] = 0;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches