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
=== modified file 'ChangeLog.linaro'
--- ChangeLog.linaro 2011-03-11 17:36:50 +0000
+++ ChangeLog.linaro 2011-04-06 13:16:33 +0000
@@ -1,3 +1,7 @@
12011-04-06 Andrew Stubbs <ams@codesourcery.com>
2
3 Merge from FSF 4.5 branch r172013 (pre 4.5.3).
4
12011-03-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>52011-03-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
26
3 LP:7304407 LP:730440
48
=== modified file 'gcc/ChangeLog'
--- gcc/ChangeLog 2011-02-18 21:30:25 +0000
+++ gcc/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,3 +1,228 @@
12011-03-30 H.J. Lu <hongjiu.lu@intel.com>
2
3 Backport from mainline
4 2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
5
6 PR target/48349
7 * config/i386/i386.h (REG_CLASS_CONTENTS): Fix a typo in
8 FLOAT_SSE_REGS.
9
102011-03-29 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
11
12 * config/s390/s390.c (s390_preferred_reload_class): Return NO_REGS
13 for invalid symbolic addresses.
14 (s390_secondary_reload): Don't use s390_check_symref_alignment for
15 larl operands.
16
172011-03-28 Richard Sandiford <richard.sandiford@linaro.org>
18
19 PR target/47553
20 * config/arm/predicates.md (neon_lane_number): Accept 0..15.
21
222011-03-23 Jonathan Wakely <jwakely.gcc@gmail.com>
23
24 PR other/48254
25 * doc/invoke.texi (-fipa-struct-reorg): Fix typo.
26
272011-03-23 Jonathan Wakely <jwakely.gcc@gmail.com>
28
29 PR other/48179
30 PR other/48234
31 * doc/extend.texi (Alignment): Move section to match order in TOC.
32 * doc/invoke.texi (i386 and x86-64 Windows Options): Likewise.
33
342011-03-18 H.J. Lu <hongjiu.lu@intel.com>
35
36 Backport from mainline
37 2011-03-17 H.J. Lu <hongjiu.lu@intel.com>
38
39 PR target/48171
40 * config/i386/i386.opt: Add Save to -mavx and -mfma.
41
422011-03-16 Pat Haugen <pthaugen@us.ibm.com>
43
44 PR target/47862
45 * caller-save.c (insert_restore, insert_save): Use non-validate
46 form of adjust_address.
47
482011-03-16 Nick Clifton <nickc@redhat.com>
49
50 * config/rx/rx.h (JUMP_ALIGN): Define.
51 (JUMP_ALIGN_MAX_SKIP, LABEL_ALIGN_AFTER_BARRIER, LOOP_ALIGN,
52 (LABEL_ALIGN, LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP,
53 (LOOP_ALIGN_MAX_SKIP, LABEL_ALIGN_MAX_SKIP): Define.
54 * config/rx/rx-protos.h (rx_align_for_label): Prototype.
55 (rx_max_skip_for_label): Prototype.
56 * config/rx/rx.md (abssi3): Use CC_ZSmode.
57 (andis3): Fix timings.
58 (peephole): Add peephole to combine zero- and sign- extending
59 loads with arithmetic instructions.
60 (bset): Fix timing.
61 (bclr): Fix timing.
62 * config/rx/rx.c (rx_is_legitimate_address): Add checks for QImode
63 and HImode reg+int address.
64 (rx_print_operand): Add support for %R. Fix generation of .B and
65 .W addressing modes.
66 (rx_align_for_label): New function.
67 (rx_max_skip_for_label): New function.
68
692011-03-10 Jason Merrill <jason@redhat.com>
70
71 PR c++/48029
72 * stor-layout.c (layout_type): Don't set structural equality
73 on arrays of incomplete type.
74 * tree.c (type_hash_eq): Handle comparing them properly.
75
762011-03-08 Richard Guenther <rguenther@suse.de>
77
78 Backport from mainline
79 2011-02-10 Richard Guenther <rguenther@suse.de>
80
81 * tree-ssa-structalias.c (bitpos_of_field): Use BITS_PER_UNIT, not 8.
82
83 2010-10-18 Richard Guenther <rguenther@suse.de>
84
85 PR tree-optimization/45967
86 * tree-ssa-structalias.c (type_could_have_pointers): Remove.
87 (could_have_pointers): Likewise.
88 (handle_rhs_call, handle_const_call, handle_pure_call,
89 find_func_aliases, intra_create_variable_infos): Remove calls to them.
90 (struct fieldoff): Add must_have_pointers field.
91 (type_must_have_pointers): New function.
92 (field_must_have_pointers): Likewise.
93 (push_fields_onto_fieldstack): Remove must_have_pointers_p argument.
94 Adjust field merging.
95 (create_function_info_for): May-have-pointers of varinfo is
96 almost always true.
97 (create_variable_info_for_1): Likewise.
98
99 2010-10-12 Richard Guenther <rguenther@suse.de>
100
101 * tree-ssa-structalias.c (get_constraint_for_1): Constants
102 only point to nonlocal, not anything.
103
1042011-03-08 Richard Guenther <rguenther@suse.de>
105
106 PR tree-optimization/47278
107 * tree.h (DECL_REPLACEABLE_P): Remove.
108 (decl_replaceable_p): Declare.
109 (decl_binds_to_current_def_p): Likewise.
110 * varasm.c (decl_replaceable_p): New function.
111 (decl_binds_to_current_def_p): Likewise.
112 * cgraph.c (cgraph_function_body_availability): Use decl_replaceable_p.
113 * tree-inline.c (inlinable_function_p): Likewise.
114
1152011-03-07 Pat Haugen <pthaugen@us.ibm.com>
116
117 Backport from mainline
118 2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
119
120 PR target/47862
121 * config/rs6000/rs6000.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
122
1232011-03-07 Mingjie Xing <mingjie.xing@gmail.com>
124
125 * doc/cfg.texi: Remove "See" before @ref.
126 * doc/invoke.texi: Likewise.
127
1282011-03-03 Uros Bizjak <ubizjak@gmail.com>
129
130 * config/i386/sse.md (*avx_pmaddubsw128): Fix mode of VEC_SELECT RTX.
131 (ssse3_pmaddubsw128): Ditto.
132 (ssse3_pmaddubsw): Ditto.
133
1342011-03-03 Denis Chertykov <chertykov@gmail.com>
135
136 Backport from mainline
137 2011-02-22 Georg-Johann Lay <avr@gjlay.de>
138
139 PR target/42240
140 * config/avr/avr.c (avr_cannot_modify_jumps_p): New function.
141 (TARGET_CANNOT_MODIFY_JUMPS_P): Define.
142
1432011-03-03 Richard Guenther <rguenther@suse.de>
144
145 * tree-vect-stmt.c (vectorizable_operation): Remove unused vars.
146
1472011-03-02 Richard Guenther <rguenther@suse.de>
148
149 Backport from mainline
150 2011-02-07 Richard Guenther <rguenther@suse.de>
151
152 PR tree-optimization/47615
153 * tree-ssa-sccvn.h (run_scc_vn): Take a vn-walk mode argument.
154 * tree-ssa-sccvn.c (default_vn_walk_kind): New global.
155 (run_scc_vn): Initialize it.
156 (visit_reference_op_load): Use it.
157 * tree-ssa-pre.c (execute_pre): Use VN_WALK if in PRE.
158
1592011-03-01 Richard Guenther <rguenther@suse.de>
160
161 Backport from mainline
162 2011-02-08 Richard Guenther <rguenther@suse.de>
163
164 PR middle-end/47639
165 * tree-vect-generic.c (expand_vector_operations_1): Update
166 stmts here ...
167 (expand_vector_operations): ... not here. Cleanup EH info
168 and the CFG if required.
169
1702011-03-01 Richard Guenther <rguenther@suse.de>
171
172 Backport from mainline
173 2011-03-01 Richard Guenther <rguenther@suse.de>
174
175 PR tree-optimization/47890
176 * tree-vect-loop.c (get_initial_def_for_induction): Set
177 related stmt properly.
178
179 2010-12-01 Richard Guenther <rguenther@suse.de>
180
181 PR tree-optimization/46723
182 * tree-vect-loop.c (get_initial_def_for_induction): Strip
183 conversions from the induction evolution and apply it to
184 the result instead.
185 * tree-vect-stmts.c (vect_get_vec_def_for_operand): Handle
186 assigns for induction defs.
187
1882011-02-28 Georg-Johann Lay <avr@gjlay.de>
189
190 PR target/45261
191 * config/avr/avr.c (avr_option_override): Use error on bad options.
192 (avr_help): New function.
193 (TARGET_HELP): Define.
194
1952011-02-26 Gerald Pfeifer <gerald@pfeifer.com>
196
197 * doc/invoke.texi (ARC Options): Use CPU instead of cpu.
198 (ARM Options): Ditto.
199 (i386 and x86-64 Options): Ditto.
200 (RX Options): Ditto.
201 (SPARC Options): Ditto.
202
2032011-02-26 Tijl Coosemans <tijl@coosemans.org>
204
205 * config.gcc (i386-*-freebsd*): Make i486 the default arch on
206 FreeBSD 6 and later. Generally use cpu generic.
207
2082011-02-25 Gerald Pfeifer <gerald@pfeifer.com>
209
210 * doc/cpp.texi (Obsolete Features): Add background on the
211 origin of assertions.
212 Update copyright years.
213
2142011-02-25 Andriy Gapon <avg@freebsd.org>
215
216 PR target/45808
217 * config/freebsd-spec.h (FBSD_LIB_SPEC): Handle the shared case.
218 Update copyright years.
219
2202011-02-21 Uros Bizjak <ubizjak@gmail.com>
221
222 PR target/47840
223 * config/i386/avxintrin.h (_mm256_insert_epi32): Use _mm_insert_epi32.
224 (_mm256_insert_epi64): Use _mm_insert_epi64.
225
12011-02-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>2262011-02-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
2227
3 * config.gcc (hppa[12]*-*-hpux11*): Set extra_parts.228 * config.gcc (hppa[12]*-*-hpux11*): Set extra_parts.
4229
=== modified file 'gcc/DATESTAMP'
--- gcc/DATESTAMP 2011-02-21 00:18:37 +0000
+++ gcc/DATESTAMP 2011-04-06 13:16:33 +0000
@@ -1,1 +1,1 @@
120110221120110406
22
=== modified file 'gcc/caller-save.c'
--- gcc/caller-save.c 2010-08-12 08:09:49 +0000
+++ gcc/caller-save.c 2011-04-06 13:16:33 +0000
@@ -1215,7 +1215,7 @@
1215 /* Check that insn to restore REGNO in save_mode[regno] is1215 /* Check that insn to restore REGNO in save_mode[regno] is
1216 correct. */1216 correct. */
1217 && reg_save_code (regno, save_mode[regno]) >= 0)1217 && reg_save_code (regno, save_mode[regno]) >= 0)
1218 mem = adjust_address (mem, save_mode[regno], 0);1218 mem = adjust_address_nv (mem, save_mode[regno], 0);
1219 else1219 else
1220 mem = copy_rtx (mem);1220 mem = copy_rtx (mem);
12211221
@@ -1296,7 +1296,7 @@
1296 /* Check that insn to save REGNO in save_mode[regno] is1296 /* Check that insn to save REGNO in save_mode[regno] is
1297 correct. */1297 correct. */
1298 && reg_save_code (regno, save_mode[regno]) >= 0)1298 && reg_save_code (regno, save_mode[regno]) >= 0)
1299 mem = adjust_address (mem, save_mode[regno], 0);1299 mem = adjust_address_nv (mem, save_mode[regno], 0);
1300 else1300 else
1301 mem = copy_rtx (mem);1301 mem = copy_rtx (mem);
13021302
13031303
=== modified file 'gcc/cgraph.c'
--- gcc/cgraph.c 2010-07-01 10:03:31 +0000
+++ gcc/cgraph.c 2011-04-06 13:16:33 +0000
@@ -2093,7 +2093,7 @@
2093 AVAIL_AVAILABLE here? That would be good reason to preserve this2093 AVAIL_AVAILABLE here? That would be good reason to preserve this
2094 bit. */2094 bit. */
20952095
2096 else if (DECL_REPLACEABLE_P (node->decl) && !DECL_EXTERNAL (node->decl))2096 else if (decl_replaceable_p (node->decl) && !DECL_EXTERNAL (node->decl))
2097 avail = AVAIL_OVERWRITABLE;2097 avail = AVAIL_OVERWRITABLE;
2098 else avail = AVAIL_AVAILABLE;2098 else avail = AVAIL_AVAILABLE;
20992099
21002100
=== modified file 'gcc/config.gcc'
--- gcc/config.gcc 2011-02-18 21:30:25 +0000
+++ gcc/config.gcc 2011-04-06 13:16:33 +0000
@@ -2631,6 +2631,16 @@
2631arch_without_sse2=no2631arch_without_sse2=no
2632arch_without_64bit=no2632arch_without_64bit=no
2633case ${target} in2633case ${target} in
2634 i386-*-freebsd*)
2635 if test $fbsd_major -ge 6; then
2636 arch=i486
2637 else
2638 arch=i386
2639 fi
2640 cpu=generic
2641 arch_without_sse2=yes
2642 arch_without_64bit=yes
2643 ;;
2634 i386-*-*)2644 i386-*-*)
2635 arch=i3862645 arch=i386
2636 cpu=i3862646 cpu=i386
26372647
=== modified file 'gcc/config/arm/predicates.md'
--- gcc/config/arm/predicates.md 2011-03-02 12:28:41 +0000
+++ gcc/config/arm/predicates.md 2011-04-06 13:16:33 +0000
@@ -608,6 +608,7 @@
608(define_predicate "neon_lane_number"608(define_predicate "neon_lane_number"
609 (and (match_code "const_int")609 (and (match_code "const_int")
610 (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 15")))610 (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 15")))
611
611;; Predicates for named expanders that overlap multiple ISAs.612;; Predicates for named expanders that overlap multiple ISAs.
612613
613(define_predicate "cmpdi_operand"614(define_predicate "cmpdi_operand"
614615
=== modified file 'gcc/config/avr/avr.c'
--- gcc/config/avr/avr.c 2010-04-02 18:54:46 +0000
+++ gcc/config/avr/avr.c 2011-04-06 13:16:33 +0000
@@ -73,6 +73,7 @@
73static bool avr_legitimate_address_p (enum machine_mode, rtx, bool);73static bool avr_legitimate_address_p (enum machine_mode, rtx, bool);
74static void avr_asm_function_end_prologue (FILE *);74static void avr_asm_function_end_prologue (FILE *);
75static void avr_asm_function_begin_epilogue (FILE *);75static void avr_asm_function_begin_epilogue (FILE *);
76static bool avr_cannot_modify_jumps_p (void);
76static rtx avr_function_value (const_tree, const_tree, bool);77static rtx avr_function_value (const_tree, const_tree, bool);
77static void avr_insert_attributes (tree, tree *);78static void avr_insert_attributes (tree, tree *);
78static void avr_asm_init_sections (void);79static void avr_asm_init_sections (void);
@@ -91,6 +92,7 @@
91static unsigned int avr_case_values_threshold (void);92static unsigned int avr_case_values_threshold (void);
92static bool avr_frame_pointer_required_p (void);93static bool avr_frame_pointer_required_p (void);
93static bool avr_can_eliminate (const int, const int);94static bool avr_can_eliminate (const int, const int);
95static void avr_help (void);
9496
95/* Allocate registers from r25 to r8 for parameters for function calls. */97/* Allocate registers from r25 to r8 for parameters for function calls. */
96#define FIRST_CUM_REG 2698#define FIRST_CUM_REG 26
@@ -192,6 +194,12 @@
192#undef TARGET_CAN_ELIMINATE194#undef TARGET_CAN_ELIMINATE
193#define TARGET_CAN_ELIMINATE avr_can_eliminate195#define TARGET_CAN_ELIMINATE avr_can_eliminate
194196
197#undef TARGET_HELP
198#define TARGET_HELP avr_help
199
200#undef TARGET_CANNOT_MODIFY_JUMPS_P
201#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p
202
195struct gcc_target targetm = TARGET_INITIALIZER;203struct gcc_target targetm = TARGET_INITIALIZER;
196204
197205
198void206void
@@ -207,10 +215,8 @@
207215
208 if (!t->name)216 if (!t->name)
209 {217 {
210 fprintf (stderr, "unknown MCU '%s' specified\nKnown MCU names:\n",218 error ("unrecognized argument to -mmcu= option: %qs", avr_mcu_name);
211 avr_mcu_name);219 inform (input_location, "See --target-help for supported MCUs");
212 for (t = avr_mcu_types; t->name; t++)
213 fprintf (stderr," %s\n", t->name);
214 }220 }
215221
216 avr_current_device = t;222 avr_current_device = t;
@@ -223,6 +229,42 @@
223 init_machine_status = avr_init_machine_status;229 init_machine_status = avr_init_machine_status;
224}230}
225231
232/* Implement TARGET_HELP */
233/* Report extra information for --target-help */
234
235static void
236avr_help (void)
237{
238 const struct mcu_type_s *t;
239 const char * const indent = " ";
240 int len;
241
242 /* Give a list of MCUs that are accepted by -mmcu=* .
243 Note that MCUs supported by the compiler might differ from
244 MCUs supported by binutils. */
245
246 len = strlen (indent);
247 printf ("Known MCU names:\n%s", indent);
248
249 /* Print a blank-separated list of all supported MCUs */
250
251 for (t = avr_mcu_types; t->name; t++)
252 {
253 printf ("%s ", t->name);
254 len += 1 + strlen (t->name);
255
256 /* Break long lines */
257
258 if (len > 66 && (t+1)->name)
259 {
260 printf ("\n%s", indent);
261 len = strlen (indent);
262 }
263 }
264
265 printf ("\n\n");
266}
267
226/* return register class from register number. */268/* return register class from register number. */
227269
228static const enum reg_class reg_class_tab[]={270static const enum reg_class reg_class_tab[]={
@@ -953,6 +995,27 @@
953 fprintf (file, "/* epilogue start */\n");995 fprintf (file, "/* epilogue start */\n");
954}996}
955997
998
999/* Implement TARGET_CANNOT_MODITY_JUMPS_P */
1000
1001static bool
1002avr_cannot_modify_jumps_p (void)
1003{
1004
1005 /* Naked Functions must not have any instructions after
1006 their epilogue, see PR42240 */
1007
1008 if (reload_completed
1009 && cfun->machine
1010 && cfun->machine->is_naked)
1011 {
1012 return true;
1013 }
1014
1015 return false;
1016}
1017
1018
956/* Return nonzero if X (an RTX) is a legitimate memory address on the target1019/* Return nonzero if X (an RTX) is a legitimate memory address on the target
957 machine for a memory operand of mode MODE. */1020 machine for a memory operand of mode MODE. */
9581021
9591022
=== modified file 'gcc/config/freebsd-spec.h'
--- gcc/config/freebsd-spec.h 2009-09-22 15:28:26 +0000
+++ gcc/config/freebsd-spec.h 2011-04-06 13:16:33 +0000
@@ -1,5 +1,6 @@
1/* Base configuration file for all FreeBSD targets.1/* Base configuration file for all FreeBSD targets.
2 Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.2 Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007, 2009, 2011
3 Free Software Foundation, Inc.
34
4This file is part of GCC.5This file is part of GCC.
56
@@ -139,6 +140,9 @@
139 %{!shared: \140 %{!shared: \
140 %{!pg: %{pthread:-lpthread} -lc} \141 %{!pg: %{pthread:-lpthread} -lc} \
141 %{pg: %{pthread:-lpthread_p} -lc_p} \142 %{pg: %{pthread:-lpthread_p} -lc_p} \
143 } \
144 %{shared: \
145 %{pthread:-lpthread} -lc \
142 }"146 }"
143#endif147#endif
144#endif148#endif
145149
=== modified file 'gcc/config/i386/avxintrin.h'
--- gcc/config/i386/avxintrin.h 2011-01-17 13:10:18 +0000
+++ gcc/config/i386/avxintrin.h 2011-04-06 13:16:33 +0000
@@ -737,7 +737,7 @@
737_mm256_insert_epi32 (__m256i __X, int __D, int const __N)737_mm256_insert_epi32 (__m256i __X, int __D, int const __N)
738{738{
739 __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 2);739 __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 2);
740 __Y = _mm_insert_epi16 (__Y, __D, __N % 4);740 __Y = _mm_insert_epi32 (__Y, __D, __N % 4);
741 return _mm256_insertf128_si256 (__X, __Y, __N >> 2);741 return _mm256_insertf128_si256 (__X, __Y, __N >> 2);
742}742}
743743
@@ -762,7 +762,7 @@
762_mm256_insert_epi64 (__m256i __X, int __D, int const __N)762_mm256_insert_epi64 (__m256i __X, int __D, int const __N)
763{763{
764 __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 1);764 __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 1);
765 __Y = _mm_insert_epi16 (__Y, __D, __N % 2);765 __Y = _mm_insert_epi64 (__Y, __D, __N % 2);
766 return _mm256_insertf128_si256 (__X, __Y, __N >> 1);766 return _mm256_insertf128_si256 (__X, __Y, __N >> 1);
767}767}
768#endif768#endif
769769
=== modified file 'gcc/config/i386/i386.h'
--- gcc/config/i386/i386.h 2010-09-01 13:29:58 +0000
+++ gcc/config/i386/i386.h 2011-04-06 13:16:33 +0000
@@ -1282,7 +1282,7 @@
1282{ 0xe0000000, 0x1f }, /* MMX_REGS */ \1282{ 0xe0000000, 0x1f }, /* MMX_REGS */ \
1283{ 0x1fe00100,0x1fe000 }, /* FP_TOP_SSE_REG */ \1283{ 0x1fe00100,0x1fe000 }, /* FP_TOP_SSE_REG */ \
1284{ 0x1fe00200,0x1fe000 }, /* FP_SECOND_SSE_REG */ \1284{ 0x1fe00200,0x1fe000 }, /* FP_SECOND_SSE_REG */ \
1285{ 0x1fe0ff00,0x3fe000 }, /* FLOAT_SSE_REGS */ \1285{ 0x1fe0ff00,0x1fe000 }, /* FLOAT_SSE_REGS */ \
1286 { 0x1ffff, 0x1fe0 }, /* FLOAT_INT_REGS */ \1286 { 0x1ffff, 0x1fe0 }, /* FLOAT_INT_REGS */ \
1287{ 0x1fe100ff,0x1fffe0 }, /* INT_SSE_REGS */ \1287{ 0x1fe100ff,0x1fffe0 }, /* INT_SSE_REGS */ \
1288{ 0x1fe1ffff,0x1fffe0 }, /* FLOAT_INT_SSE_REGS */ \1288{ 0x1fe1ffff,0x1fffe0 }, /* FLOAT_INT_SSE_REGS */ \
12891289
=== modified file 'gcc/config/i386/i386.opt'
--- gcc/config/i386/i386.opt 2009-12-05 20:11:52 +0000
+++ gcc/config/i386/i386.opt 2011-04-06 13:16:33 +0000
@@ -305,11 +305,11 @@
305Do not support SSE4.1 and SSE4.2 built-in functions and code generation305Do not support SSE4.1 and SSE4.2 built-in functions and code generation
306306
307mavx307mavx
308Target Report Mask(ISA_AVX) Var(ix86_isa_flags) VarExists308Target Report Mask(ISA_AVX) Var(ix86_isa_flags) VarExists Save
309Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation309Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation
310310
311mfma311mfma
312Target Report Mask(ISA_FMA) Var(ix86_isa_flags) VarExists312Target Report Mask(ISA_FMA) Var(ix86_isa_flags) VarExists Save
313Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation313Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation
314314
315msse4a315msse4a
316316
=== modified file 'gcc/config/i386/sse.md'
--- gcc/config/i386/sse.md 2011-01-17 13:10:18 +0000
+++ gcc/config/i386/sse.md 2011-04-06 13:16:33 +0000
@@ -8932,7 +8932,7 @@
8932 (ss_plus:V8HI8932 (ss_plus:V8HI
8933 (mult:V8HI8933 (mult:V8HI
8934 (zero_extend:V8HI8934 (zero_extend:V8HI
8935 (vec_select:V4QI8935 (vec_select:V8QI
8936 (match_operand:V16QI 1 "register_operand" "x")8936 (match_operand:V16QI 1 "register_operand" "x")
8937 (parallel [(const_int 0)8937 (parallel [(const_int 0)
8938 (const_int 2)8938 (const_int 2)
@@ -8955,7 +8955,7 @@
8955 (const_int 14)]))))8955 (const_int 14)]))))
8956 (mult:V8HI8956 (mult:V8HI
8957 (zero_extend:V8HI8957 (zero_extend:V8HI
8958 (vec_select:V16QI (match_dup 1)8958 (vec_select:V8QI (match_dup 1)
8959 (parallel [(const_int 1)8959 (parallel [(const_int 1)
8960 (const_int 3)8960 (const_int 3)
8961 (const_int 5)8961 (const_int 5)
@@ -8965,7 +8965,7 @@
8965 (const_int 13)8965 (const_int 13)
8966 (const_int 15)])))8966 (const_int 15)])))
8967 (sign_extend:V8HI8967 (sign_extend:V8HI
8968 (vec_select:V16QI (match_dup 2)8968 (vec_select:V8QI (match_dup 2)
8969 (parallel [(const_int 1)8969 (parallel [(const_int 1)
8970 (const_int 3)8970 (const_int 3)
8971 (const_int 5)8971 (const_int 5)
@@ -8986,7 +8986,7 @@
8986 (ss_plus:V8HI8986 (ss_plus:V8HI
8987 (mult:V8HI8987 (mult:V8HI
8988 (zero_extend:V8HI8988 (zero_extend:V8HI
8989 (vec_select:V4QI8989 (vec_select:V8QI
8990 (match_operand:V16QI 1 "register_operand" "0")8990 (match_operand:V16QI 1 "register_operand" "0")
8991 (parallel [(const_int 0)8991 (parallel [(const_int 0)
8992 (const_int 2)8992 (const_int 2)
@@ -9009,7 +9009,7 @@
9009 (const_int 14)]))))9009 (const_int 14)]))))
9010 (mult:V8HI9010 (mult:V8HI
9011 (zero_extend:V8HI9011 (zero_extend:V8HI
9012 (vec_select:V16QI (match_dup 1)9012 (vec_select:V8QI (match_dup 1)
9013 (parallel [(const_int 1)9013 (parallel [(const_int 1)
9014 (const_int 3)9014 (const_int 3)
9015 (const_int 5)9015 (const_int 5)
@@ -9019,7 +9019,7 @@
9019 (const_int 13)9019 (const_int 13)
9020 (const_int 15)])))9020 (const_int 15)])))
9021 (sign_extend:V8HI9021 (sign_extend:V8HI
9022 (vec_select:V16QI (match_dup 2)9022 (vec_select:V8QI (match_dup 2)
9023 (parallel [(const_int 1)9023 (parallel [(const_int 1)
9024 (const_int 3)9024 (const_int 3)
9025 (const_int 5)9025 (const_int 5)
@@ -9056,13 +9056,13 @@
9056 (const_int 6)]))))9056 (const_int 6)]))))
9057 (mult:V4HI9057 (mult:V4HI
9058 (zero_extend:V4HI9058 (zero_extend:V4HI
9059 (vec_select:V8QI (match_dup 1)9059 (vec_select:V4QI (match_dup 1)
9060 (parallel [(const_int 1)9060 (parallel [(const_int 1)
9061 (const_int 3)9061 (const_int 3)
9062 (const_int 5)9062 (const_int 5)
9063 (const_int 7)])))9063 (const_int 7)])))
9064 (sign_extend:V4HI9064 (sign_extend:V4HI
9065 (vec_select:V8QI (match_dup 2)9065 (vec_select:V4QI (match_dup 2)
9066 (parallel [(const_int 1)9066 (parallel [(const_int 1)
9067 (const_int 3)9067 (const_int 3)
9068 (const_int 5)9068 (const_int 5)
90699069
=== modified file 'gcc/config/rs6000/rs6000.h'
--- gcc/config/rs6000/rs6000.h 2011-02-04 16:31:48 +0000
+++ gcc/config/rs6000/rs6000.h 2011-04-06 13:16:33 +0000
@@ -1036,6 +1036,16 @@
10361036
1037#define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs[(MODE)][(REGNO)]1037#define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs[(MODE)][(REGNO)]
10381038
1039/* When setting up caller-save slots (MODE == VOIDmode) ensure we allocate
1040 enough space to account for vectors in FP regs. */
1041#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
1042 (TARGET_VSX \
1043 && ((MODE) == VOIDmode || VSX_VECTOR_MODE (MODE) \
1044 || ALTIVEC_VECTOR_MODE (MODE)) \
1045 && FP_REGNO_P (REGNO) \
1046 ? V2DFmode \
1047 : choose_hard_reg_mode ((REGNO), (NREGS), false))
1048
1039#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \1049#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \
1040 (((TARGET_32BIT && TARGET_POWERPC64 \1050 (((TARGET_32BIT && TARGET_POWERPC64 \
1041 && (GET_MODE_SIZE (MODE) > 4) \1051 && (GET_MODE_SIZE (MODE) > 4) \
10421052
=== modified file 'gcc/config/rx/rx-protos.h'
--- gcc/config/rx/rx-protos.h 2011-02-02 14:31:55 +0000
+++ gcc/config/rx/rx-protos.h 2011-04-06 13:16:33 +0000
@@ -31,6 +31,7 @@
31extern void rx_set_optimization_options (void);31extern void rx_set_optimization_options (void);
3232
33#ifdef RTX_CODE33#ifdef RTX_CODE
34extern int rx_align_for_label (rtx);
34extern bool rx_compare_redundant (rtx);35extern bool rx_compare_redundant (rtx);
35extern void rx_emit_stack_popm (rtx *, bool);36extern void rx_emit_stack_popm (rtx *, bool);
36extern void rx_emit_stack_pushm (rtx *);37extern void rx_emit_stack_pushm (rtx *);
@@ -41,6 +42,7 @@
41extern bool rx_is_mode_dependent_addr (rtx);42extern bool rx_is_mode_dependent_addr (rtx);
42extern bool rx_is_restricted_memory_address (rtx, Mmode);43extern bool rx_is_restricted_memory_address (rtx, Mmode);
43extern bool rx_match_ccmode (rtx, Mmode);44extern bool rx_match_ccmode (rtx, Mmode);
45extern int rx_max_skip_for_label (rtx);
44extern void rx_notice_update_cc (rtx body, rtx insn);46extern void rx_notice_update_cc (rtx body, rtx insn);
45extern void rx_print_operand (FILE *, rtx, int);47extern void rx_print_operand (FILE *, rtx, int);
46extern void rx_print_operand_address (FILE *, rtx);48extern void rx_print_operand_address (FILE *, rtx);
4749
=== modified file 'gcc/config/rx/rx.c'
--- gcc/config/rx/rx.c 2011-02-22 11:38:56 +0000
+++ gcc/config/rx/rx.c 2011-04-06 13:16:33 +0000
@@ -80,7 +80,9 @@
80 /* Register Indirect. */80 /* Register Indirect. */
81 return true;81 return true;
8282
83 if (GET_MODE_SIZE (mode) == 483 if ((GET_MODE_SIZE (mode) == 4
84 || GET_MODE_SIZE (mode) == 2
85 || GET_MODE_SIZE (mode) == 1)
84 && (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC))86 && (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC))
85 /* Pre-decrement Register Indirect or87 /* Pre-decrement Register Indirect or
86 Post-increment Register Indirect. */88 Post-increment Register Indirect. */
@@ -182,7 +184,10 @@
182 base = XEXP (mem, 0);184 base = XEXP (mem, 0);
183 index = XEXP (mem, 1);185 index = XEXP (mem, 1);
184186
185 return RX_REG_P (base) && CONST_INT_P (index);187 if (! RX_REG_P (base) || ! CONST_INT_P (index))
188 return false;
189
190 return IN_RANGE (INTVAL (index), 0, (0x10000 * GET_MODE_SIZE (mode)) - 1);
186191
187 case SYMBOL_REF:192 case SYMBOL_REF:
188 /* Can happen when small data is being supported.193 /* Can happen when small data is being supported.
@@ -447,11 +452,14 @@
447 %L Print low part of a DImode register, integer or address.452 %L Print low part of a DImode register, integer or address.
448 %N Print the negation of the immediate value.453 %N Print the negation of the immediate value.
449 %Q If the operand is a MEM, then correctly generate454 %Q If the operand is a MEM, then correctly generate
450 register indirect or register relative addressing. */455 register indirect or register relative addressing.
456 %R Like %Q but for zero-extending loads. */
451457
452void458void
453rx_print_operand (FILE * file, rtx op, int letter)459rx_print_operand (FILE * file, rtx op, int letter)
454{460{
461 bool unsigned_load = false;
462
455 switch (letter)463 switch (letter)
456 {464 {
457 case 'A':465 case 'A':
@@ -615,10 +623,15 @@
615 rx_print_integer (file, - INTVAL (op));623 rx_print_integer (file, - INTVAL (op));
616 break;624 break;
617625
626 case 'R':
627 gcc_assert (GET_MODE_SIZE (GET_MODE (op)) < 4);
628 unsigned_load = true;
629 /* Fall through. */
618 case 'Q':630 case 'Q':
619 if (MEM_P (op))631 if (MEM_P (op))
620 {632 {
621 HOST_WIDE_INT offset;633 HOST_WIDE_INT offset;
634 rtx mem = op;
622635
623 op = XEXP (op, 0);636 op = XEXP (op, 0);
624637
@@ -653,22 +666,24 @@
653 rx_print_operand (file, op, 0);666 rx_print_operand (file, op, 0);
654 fprintf (file, "].");667 fprintf (file, "].");
655668
656 switch (GET_MODE_SIZE (GET_MODE (op)))669 switch (GET_MODE_SIZE (GET_MODE (mem)))
657 {670 {
658 case 1:671 case 1:
659 gcc_assert (offset < 65535 * 1);672 gcc_assert (offset <= 65535 * 1);
660 fprintf (file, "B");673 fprintf (file, unsigned_load ? "UB" : "B");
661 break;674 break;
662 case 2:675 case 2:
663 gcc_assert (offset % 2 == 0);676 gcc_assert (offset % 2 == 0);
664 gcc_assert (offset < 65535 * 2);677 gcc_assert (offset <= 65535 * 2);
665 fprintf (file, "W");678 fprintf (file, unsigned_load ? "UW" : "W");
666 break;679 break;
667 default:680 case 4:
668 gcc_assert (offset % 4 == 0);681 gcc_assert (offset % 4 == 0);
669 gcc_assert (offset < 65535 * 4);682 gcc_assert (offset <= 65535 * 4);
670 fprintf (file, "L");683 fprintf (file, "L");
671 break;684 break;
685 default:
686 gcc_unreachable ();
672 }687 }
673 break;688 break;
674 }689 }
@@ -2664,6 +2679,36 @@
2664 return true;2679 return true;
2665}2680}
26662681
26672682
2683int
2684rx_align_for_label (rtx lab ATTRIBUTE_UNUSED)
2685{
2686 return optimize_size ? 1 : 3;
2687}
2688
2689int
2690rx_max_skip_for_label (rtx lab)
2691{
2692 int opsize;
2693 rtx op;
2694
2695 if (lab == NULL_RTX)
2696 return 0;
2697 op = lab;
2698 do
2699 {
2700 op = next_nonnote_insn (op);
2701 }
2702 while (op && (LABEL_P (op)
2703 || (INSN_P (op) && GET_CODE (PATTERN (op)) == USE)));
2704 if (!op)
2705 return 0;
2706
2707 opsize = get_attr_length (op);
2708 if (opsize >= 0 && opsize < 8)
2709 return opsize - 1;
2710 return 0;
2711}
2712
26682713
2669#undef TARGET_FUNCTION_VALUE2714#undef TARGET_FUNCTION_VALUE
2670#define TARGET_FUNCTION_VALUE rx_function_value2715#define TARGET_FUNCTION_VALUE rx_function_value
26712716
26722717
=== modified file 'gcc/config/rx/rx.h'
--- gcc/config/rx/rx.h 2011-02-02 14:31:55 +0000
+++ gcc/config/rx/rx.h 2011-04-06 13:16:33 +0000
@@ -659,7 +659,33 @@
659659
660#define BRANCH_COST(SPEED, PREDICT) 1660#define BRANCH_COST(SPEED, PREDICT) 1
661#define REGISTER_MOVE_COST(MODE, FROM, TO) 2661#define REGISTER_MOVE_COST(MODE, FROM, TO) 2
662#define MEMORY_MOVE_COST(MODE, REGCLASS, IN) (2 + memory_move_secondary_cost (MODE, REGCLASS, IN))662#define MEMORY_MOVE_COST(MODE, REGCLASS, IN) \
663 (((IN) ? 2 : 0) + memory_move_secondary_cost (MODE, REGCLASS, IN))
663 664
664#define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode ((OP), (X), (Y))665#define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode ((OP), (X), (Y))
665666
667#define JUMP_ALIGN(x) rx_align_for_label (x)
668#define JUMP_ALIGN_MAX_SKIP rx_max_skip_for_label (label)
669#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label (x)
670#define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP rx_max_skip_for_label (label)
671#define LOOP_ALIGN(x) rx_align_for_label (x)
672#define LOOP_ALIGN_MAX_SKIP rx_max_skip_for_label (label)
673#define LABEL_ALIGN(x) rx_align_for_label (x)
674#define LABEL_ALIGN_MAX_SKIP rx_max_skip_for_label (NULL_RTX)
675
676#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
677 do \
678 { \
679 if ((LOG) == 0 || (MAX_SKIP) == 0) \
680 break; \
681 if (TARGET_AS100_SYNTAX) \
682 { \
683 if ((LOG) >= 2) \
684 fprintf (STREAM, "\t.ALIGN 4\t; %d alignment actually requested\n", 1 << (LOG)); \
685 else \
686 fprintf (STREAM, "\t.ALIGN 2\n"); \
687 } \
688 else \
689 fprintf (STREAM, "\t.balign %d,3,%d\n", 1 << (LOG), (MAX_SKIP)); \
690 } \
691 while (0)
666692
=== modified file 'gcc/config/rx/rx.md'
--- gcc/config/rx/rx.md 2011-02-02 14:31:55 +0000
+++ gcc/config/rx/rx.md 2011-04-06 13:16:33 +0000
@@ -798,7 +798,10 @@
798 (set (reg CC_REG)798 (set (reg CC_REG)
799 (compare (abs:SI (match_dup 1))799 (compare (abs:SI (match_dup 1))
800 (const_int 0)))]800 (const_int 0)))]
801 "reload_completed && rx_match_ccmode (insn, CC_ZSOmode)"801 ;; Note - although the ABS instruction does set the O bit in the processor
802 ;; status word, it does not do so in a way that is comparable with the CMP
803 ;; instruction. Hence we use CC_ZSmode rather than CC_ZSOmode.
804 "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
802 "@805 "@
803 abs\t%0806 abs\t%0
804 abs\t%1, %0"807 abs\t%1, %0"
@@ -1005,7 +1008,7 @@
1005 and\t%1, %01008 and\t%1, %0
1006 and\t%2, %1, %01009 and\t%2, %1, %0
1007 and\t%Q2, %0"1010 and\t%Q2, %0"
1008 [(set_attr "timings" "11,11,11,11,11,11,11,33,33")1011 [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
1009 (set_attr "length" "2,2,3,4,5,6,2,5,5")]1012 (set_attr "length" "2,2,3,4,5,6,2,5,5")]
1010)1013)
10111014
@@ -1027,7 +1030,7 @@
1027 and\t%1, %01030 and\t%1, %0
1028 and\t%2, %1, %01031 and\t%2, %1, %0
1029 and\t%Q2, %0"1032 and\t%Q2, %0"
1030 [(set_attr "timings" "11,11,11,11,11,11,11,33,33")1033 [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
1031 (set_attr "length" "2,2,3,4,5,6,2,5,5")]1034 (set_attr "length" "2,2,3,4,5,6,2,5,5")]
1032)1035)
10331036
@@ -1543,6 +1546,139 @@
1543 (set_attr "length" "3,4,5,6,7,6")]1546 (set_attr "length" "3,4,5,6,7,6")]
1544)1547)
15451548
15461549
1550;; A set of peepholes to catch extending loads followed by arithmetic operations.
1551;; We use iterators where possible to reduce the amount of typing and hence the
1552;; possibilities for typos.
1553
1554(define_code_iterator extend_types [(zero_extend "") (sign_extend "")])
1555(define_code_attr letter [(zero_extend "R") (sign_extend "Q")])
1556
1557(define_code_iterator memex_commutative [(plus "") (and "") (ior "") (xor "")])
1558(define_code_iterator memex_noncomm [(div "") (udiv "") (minus "")])
1559(define_code_iterator memex_nocc [(smax "") (smin "") (mult "")])
1560
1561(define_code_attr op [(plus "add") (and "and") (div "div") (udiv "divu") (smax "max") (smin "min") (mult "mul") (ior "or") (minus "sub") (xor "xor")])
1562
1563(define_peephole2
1564 [(set (match_operand:SI 0 "register_operand")
1565 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
1566 (parallel [(set (match_operand:SI 2 "register_operand")
1567 (memex_commutative:SI (match_dup 0)
1568 (match_dup 2)))
1569 (clobber (reg:CC CC_REG))])]
1570 "peep2_regno_dead_p (2, REGNO (operands[0]))"
1571 [(parallel [(set:SI (match_dup 2)
1572 (memex_commutative:SI (match_dup 2)
1573 (extend_types:SI (match_dup 1))))
1574 (clobber (reg:CC CC_REG))])]
1575)
1576
1577(define_peephole2
1578 [(set (match_operand:SI 0 "register_operand")
1579 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
1580 (parallel [(set (match_operand:SI 2 "register_operand")
1581 (memex_commutative:SI (match_dup 2)
1582 (match_dup 0)))
1583 (clobber (reg:CC CC_REG))])]
1584 "peep2_regno_dead_p (2, REGNO (operands[0]))"
1585 [(parallel [(set:SI (match_dup 2)
1586 (memex_commutative:SI (match_dup 2)
1587 (extend_types:SI (match_dup 1))))
1588 (clobber (reg:CC CC_REG))])]
1589)
1590
1591(define_peephole2
1592 [(set (match_operand:SI 0 "register_operand")
1593 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
1594 (parallel [(set (match_operand:SI 2 "register_operand")
1595 (memex_noncomm:SI (match_dup 2)
1596 (match_dup 0)))
1597 (clobber (reg:CC CC_REG))])]
1598 "peep2_regno_dead_p (2, REGNO (operands[0]))"
1599 [(parallel [(set:SI (match_dup 2)
1600 (memex_noncomm:SI (match_dup 2)
1601 (extend_types:SI (match_dup 1))))
1602 (clobber (reg:CC CC_REG))])]
1603)
1604
1605(define_peephole2
1606 [(set (match_operand:SI 0 "register_operand")
1607 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
1608 (set (match_operand:SI 2 "register_operand")
1609 (memex_nocc:SI (match_dup 0)
1610 (match_dup 2)))]
1611 "peep2_regno_dead_p (2, REGNO (operands[0]))"
1612 [(set:SI (match_dup 2)
1613 (memex_nocc:SI (match_dup 2)
1614 (extend_types:SI (match_dup 1))))]
1615)
1616
1617(define_peephole2
1618 [(set (match_operand:SI 0 "register_operand")
1619 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
1620 (set (match_operand:SI 2 "register_operand")
1621 (memex_nocc:SI (match_dup 2)
1622 (match_dup 0)))]
1623 "peep2_regno_dead_p (2, REGNO (operands[0]))"
1624 [(set:SI (match_dup 2)
1625 (memex_nocc:SI (match_dup 2)
1626 (extend_types:SI (match_dup 1))))]
1627)
1628
1629(define_insn "*<memex_commutative:code>si3_<extend_types:code><small_int_modes:mode>"
1630 [(set (match_operand:SI 0 "register_operand" "=r")
1631 (memex_commutative:SI (match_operand:SI 1 "register_operand" "%0")
1632 (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
1633 (clobber (reg:CC CC_REG))]
1634 ""
1635 "<memex_commutative:op>\t%<extend_types:letter>2, %0"
1636 [(set_attr "timings" "33")
1637 (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
1638) ;; rather than using iterators we could specify exact sizes.
1639
1640(define_insn "*<memex_noncomm:code>si3_<extend_types:code><small_int_modes:mode>"
1641 [(set (match_operand:SI 0 "register_operand" "=r")
1642 (memex_noncomm:SI (match_operand:SI 1 "register_operand" "0")
1643 (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
1644 (clobber (reg:CC CC_REG))]
1645 ""
1646 "<memex_noncomm:op>\t%<extend_types:letter>2, %0"
1647 [(set_attr "timings" "33")
1648 (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
1649) ;; rather than using iterators we could specify exact sizes.
1650
1651(define_insn "*<memex_nocc:code>si3_<extend_types:code><small_int_modes:mode>"
1652 [(set (match_operand:SI 0 "register_operand" "=r")
1653 (memex_nocc:SI (match_operand:SI 1 "register_operand" "%0")
1654 (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))]
1655 ""
1656 "<memex_nocc:op>\t%<extend_types:letter>2, %0"
1657 [(set_attr "timings" "33")
1658 (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
1659) ;; rather than using iterators we could specify exact sizes.
1660
1661(define_peephole2
1662 [(set (match_operand:SI 0 "register_operand")
1663 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
1664 (set (reg:CC CC_REG)
1665 (compare:CC (match_operand:SI 2 "register_operand")
1666 (match_dup 0)))]
1667 "peep2_regno_dead_p (2, REGNO (operands[0]))"
1668 [(set (reg:CC CC_REG)
1669 (compare:CC (match_dup 2)
1670 (extend_types:SI (match_dup 1))))]
1671)
1672
1673(define_insn "*comparesi3_<extend_types:code><small_int_modes:mode>"
1674 [(set (reg:CC CC_REG)
1675 (compare:CC (match_operand:SI 0 "register_operand" "=r")
1676 (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand" "Q"))))]
1677 ""
1678 "cmp\t%<extend_types:letter>1, %0"
1679 [(set_attr "timings" "33")
1680 (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
1681) ;; rather than using iterators we could specify exact sizes.
1682
15471683
1548;; Floating Point Instructions1684;; Floating Point Instructions
15491685
1550(define_insn "addsf3"1686(define_insn "addsf3"
@@ -1641,7 +1777,7 @@
1641 ""1777 ""
1642 "bset\t%1, %0.B"1778 "bset\t%1, %0.B"
1643 [(set_attr "length" "3")1779 [(set_attr "length" "3")
1644 (set_attr "timings" "34")]1780 (set_attr "timings" "33")]
1645)1781)
16461782
1647(define_insn "*bitinvert"1783(define_insn "*bitinvert"
@@ -1687,7 +1823,7 @@
1687 ""1823 ""
1688 "bclr\t%1, %0.B"1824 "bclr\t%1, %0.B"
1689 [(set_attr "length" "3")1825 [(set_attr "length" "3")
1690 (set_attr "timings" "34")]1826 (set_attr "timings" "33")]
1691)1827)
16921828
1693(define_insn "*insv_imm"1829(define_insn "*insv_imm"
16941830
=== modified file 'gcc/config/s390/s390.c'
--- gcc/config/s390/s390.c 2011-02-08 10:51:58 +0000
+++ gcc/config/s390/s390.c 2011-04-06 13:16:33 +0000
@@ -2830,12 +2830,16 @@
2830 it is most likely being used as an address, so2830 it is most likely being used as an address, so
2831 prefer ADDR_REGS. If 'class' is not a superset2831 prefer ADDR_REGS. If 'class' is not a superset
2832 of ADDR_REGS, e.g. FP_REGS, reject this reload. */2832 of ADDR_REGS, e.g. FP_REGS, reject this reload. */
2833 case PLUS:
2834 case LABEL_REF:2833 case LABEL_REF:
2835 case SYMBOL_REF:2834 case SYMBOL_REF:
2836 case CONST:2835 case CONST:
2836 if (!legitimate_reload_constant_p (op))
2837 return NO_REGS;
2838 /* fallthrough */
2839 case PLUS:
2840 /* load address will be used. */
2837 if (reg_class_subset_p (ADDR_REGS, rclass))2841 if (reg_class_subset_p (ADDR_REGS, rclass))
2838 return ADDR_REGS;2842 return ADDR_REGS;
2839 else2843 else
2840 return NO_REGS;2844 return NO_REGS;
28412845
@@ -2951,12 +2955,16 @@
29512955
2952 if (TARGET_Z10)2956 if (TARGET_Z10)
2953 {2957 {
2958 HOST_WIDE_INT offset;
2959 rtx symref;
2960
2954 /* On z10 several optimizer steps may generate larl operands with2961 /* On z10 several optimizer steps may generate larl operands with
2955 an odd addend. */2962 an odd addend. */
2956 if (in_p2963 if (in_p
2957 && s390_symref_operand_p (x, NULL, NULL)2964 && s390_symref_operand_p (x, &symref, &offset)
2958 && mode == Pmode2965 && mode == Pmode
2959 && !s390_check_symref_alignment (x, 2))2966 && !SYMBOL_REF_ALIGN1_P (symref)
2967 && (offset & 1) == 1)
2960 sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z102968 sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
2961 : CODE_FOR_reloadsi_larl_odd_addend_z10);2969 : CODE_FOR_reloadsi_larl_odd_addend_z10);
29622970
29632971
=== modified file 'gcc/cp/ChangeLog'
--- gcc/cp/ChangeLog 2010-12-16 12:33:06 +0000
+++ gcc/cp/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,3 +1,76 @@
12011-03-28 Jason Merrill <jason@redhat.com>
2
3 Revert:
4 PR c++/48289
5 * pt.c (build_non_dependent_expr): Keep dereferences outside the
6 NON_DEPENDENT_EXPR.
7
82011-03-25 Jason Merrill <jason@redhat.com>
9
10 PR c++/48289
11 * pt.c (build_non_dependent_expr): Keep dereferences outside the
12 NON_DEPENDENT_EXPR.
13
142011-03-11 Jason Merrill <jason@redhat.com>
15
16 PR c++/47125
17 * pt.c (tsubst) [TYPENAME_TYPE]: Only give errors if tf_error.
18
192011-03-10 Jason Merrill <jason@redhat.com>
20
21 PR c++/48029
22 * pt.c (iterative_hash_template_arg): Remove special case for
23 ARRAY_TYPE.
24
252011-03-09 Jason Merrill <jason@redhat.com>
26
27 PR c++/44629
28 * pt.c (unify): An unresolved overload is a nondeduced context.
29
302011-03-08 Jason Merrill <jason@redhat.com>
31
32 PR c++/45651
33 * pt.c (instantiate_decl): Don't clear DECL_INTERFACE_KNOWN on
34 !TREE_PUBLIC decls.
35
362011-03-08 Jason Merrill <jason@redhat.com>
37
38 PR c++/47289
39 * pt.c (coerce_template_parms): Fix error recovery.
40
412011-03-08 Dodji Seketeli <dodji@redhat.com>
42
43 PR c++/47705
44 * pt.c (convert_nontype_argument): Only call decay_conversion on
45 arrays.
46
472011-03-08 Dodji Seketeli <dodji@redhat.com>
48
49 * name-lookup.c (binding_to_template_parms_of_scope_p): Only
50 consider scopes of primary template definitions. Adjust comments.
51
522011-03-08 Jason Merrill <jason@redhat.com>
53
54 PR c++/47488
55 * mangle.c (write_template_arg_literal) [STRING_CST]: Sorry.
56
572011-03-08 Richard Guenther <rguenther@suse.de>
58
59 PR tree-optimization/47278
60 * decl.c (finish_function): Use decl_replaceable_p.
61
622011-03-01 Jason Merrill <jason@redhat.com>
63
64 PR c++/46159
65 * parser.c (cp_parser_primary_expression): Don't warn about a
66 failed tentative parse.
67
682011-02-26 Jason Merrill <jason@redhat.com>
69
70 PR c++/47904
71 * tree.c (cp_tree_equal) [PARM_DECL]: Don't crash on
72 DECL_ARTIFICIAL parms.
73
12010-12-16 Release Manager742010-12-16 Release Manager
275
3 * GCC 4.5.2 released.76 * GCC 4.5.2 released.
477
=== modified file 'gcc/cp/decl.c'
--- gcc/cp/decl.c 2011-01-06 11:02:44 +0000
+++ gcc/cp/decl.c 2011-04-06 13:16:33 +0000
@@ -12502,7 +12502,7 @@
12502 if (!processing_template_decl12502 if (!processing_template_decl
12503 && !cp_function_chain->can_throw12503 && !cp_function_chain->can_throw
12504 && !flag_non_call_exceptions12504 && !flag_non_call_exceptions
12505 && !DECL_REPLACEABLE_P (fndecl))12505 && !decl_replaceable_p (fndecl))
12506 TREE_NOTHROW (fndecl) = 1;12506 TREE_NOTHROW (fndecl) = 1;
1250712507
12508 /* This must come after expand_function_end because cleanups might12508 /* This must come after expand_function_end because cleanups might
1250912509
=== modified file 'gcc/cp/mangle.c'
--- gcc/cp/mangle.c 2010-03-23 22:29:53 +0000
+++ gcc/cp/mangle.c 2011-04-06 13:16:33 +0000
@@ -2683,6 +2683,10 @@
2683 write_real_cst (value);2683 write_real_cst (value);
2684 break;2684 break;
26852685
2686 case STRING_CST:
2687 sorry ("string literal in function template signature");
2688 break;
2689
2686 default:2690 default:
2687 gcc_unreachable ();2691 gcc_unreachable ();
2688 }2692 }
26892693
=== modified file 'gcc/cp/name-lookup.c'
--- gcc/cp/name-lookup.c 2010-04-27 22:03:06 +0000
+++ gcc/cp/name-lookup.c 2011-04-06 13:16:33 +0000
@@ -4067,8 +4067,13 @@
4067}4067}
40684068
4069/* Subroutine of outer_binding.4069/* Subroutine of outer_binding.
4070 Returns TRUE if BINDING is a binding to a template parameter of SCOPE,4070
4071 FALSE otherwise. */4071 Returns TRUE if BINDING is a binding to a template parameter of
4072 SCOPE. In that case SCOPE is the scope of a primary template
4073 parameter -- in the sense of G++, i.e, a template that has its own
4074 template header.
4075
4076 Returns FALSE otherwise. */
40724077
4073static bool4078static bool
4074binding_to_template_parms_of_scope_p (cxx_binding *binding,4079binding_to_template_parms_of_scope_p (cxx_binding *binding,
@@ -4084,6 +4089,8 @@
4084 return (scope4089 return (scope
4085 && scope->this_entity4090 && scope->this_entity
4086 && get_template_info (scope->this_entity)4091 && get_template_info (scope->this_entity)
4092 && PRIMARY_TEMPLATE_P (TI_TEMPLATE
4093 (get_template_info (scope->this_entity)))
4087 && parameter_of_template_p (binding_value,4094 && parameter_of_template_p (binding_value,
4088 TI_TEMPLATE (get_template_info \4095 TI_TEMPLATE (get_template_info \
4089 (scope->this_entity))));4096 (scope->this_entity))));
40904097
=== modified file 'gcc/cp/parser.c'
--- gcc/cp/parser.c 2010-08-30 19:33:31 +0000
+++ gcc/cp/parser.c 2011-04-06 13:16:33 +0000
@@ -3341,8 +3341,14 @@
3341 if (c_dialect_objc ())3341 if (c_dialect_objc ())
3342 /* We have an Objective-C++ message. */3342 /* We have an Objective-C++ message. */
3343 return cp_parser_objc_expression (parser);3343 return cp_parser_objc_expression (parser);
3344 maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);3344 {
3345 return cp_parser_lambda_expression (parser);3345 tree lam = cp_parser_lambda_expression (parser);
3346 /* Don't warn about a failed tentative parse. */
3347 if (cp_parser_error_occurred (parser))
3348 return error_mark_node;
3349 maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
3350 return lam;
3351 }
33463352
3347 case CPP_OBJC_STRING:3353 case CPP_OBJC_STRING:
3348 if (c_dialect_objc ())3354 if (c_dialect_objc ())
33493355
=== modified file 'gcc/cp/pt.c'
--- gcc/cp/pt.c 2010-07-02 09:15:10 +0000
+++ gcc/cp/pt.c 2011-04-06 13:16:33 +0000
@@ -1556,13 +1556,6 @@
1556 val = iterative_hash_object (code, val);1556 val = iterative_hash_object (code, val);
1557 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);1557 return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
15581558
1559 case ARRAY_TYPE:
1560 /* layout_type sets structural equality for arrays of
1561 incomplete type, so we can't rely on the canonical type
1562 for hashing. */
1563 val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1564 return iterative_hash_template_arg (TYPE_DOMAIN (arg), val);
1565
1566 case LAMBDA_EXPR:1559 case LAMBDA_EXPR:
1567 /* A lambda can't appear in a template arg, but don't crash on1560 /* A lambda can't appear in a template arg, but don't crash on
1568 erroneous input. */1561 erroneous input. */
@@ -4951,7 +4944,8 @@
49514944
4952 /* Add the ADDR_EXPR now for the benefit of4945 /* Add the ADDR_EXPR now for the benefit of
4953 value_dependent_expression_p. */4946 value_dependent_expression_p. */
4954 if (TYPE_PTROBV_P (type))4947 if (TYPE_PTROBV_P (type)
4948 && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
4955 expr = decay_conversion (expr);4949 expr = decay_conversion (expr);
49564950
4957 /* If we are in a template, EXPR may be non-dependent, but still4951 /* If we are in a template, EXPR may be non-dependent, but still
@@ -6043,7 +6037,7 @@
6043 sorry ("cannot expand %<%T%> into a fixed-length "6037 sorry ("cannot expand %<%T%> into a fixed-length "
6044 "argument list", arg);6038 "argument list", arg);
6045 }6039 }
6046 return error_mark_node;6040 ++lost;
6047 }6041 }
6048 }6042 }
6049 else if (require_all_args)6043 else if (require_all_args)
@@ -6071,7 +6065,7 @@
6071 reported) that we are trying to recover from, e.g., a class6065 reported) that we are trying to recover from, e.g., a class
6072 template with a parameter list such as6066 template with a parameter list such as
6073 template<typename..., typename>. */6067 template<typename..., typename>. */
6074 return error_mark_node;6068 ++lost;
6075 else6069 else
6076 arg = convert_template_argument (TREE_VALUE (parm),6070 arg = convert_template_argument (TREE_VALUE (parm),
6077 arg, new_args, complain, 6071 arg, new_args, complain,
@@ -10555,11 +10549,21 @@
10555 if (TREE_CODE (f) != TYPENAME_TYPE)10549 if (TREE_CODE (f) != TYPENAME_TYPE)
10556 {10550 {
10557 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)10551 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
10558 error ("%qT resolves to %qT, which is not an enumeration type",10552 {
10559 t, f);10553 if (complain & tf_error)
10554 error ("%qT resolves to %qT, which is not an enumeration type",
10555 t, f);
10556 else
10557 return error_mark_node;
10558 }
10560 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))10559 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
10561 error ("%qT resolves to %qT, which is is not a class type",10560 {
10562 t, f);10561 if (complain & tf_error)
10562 error ("%qT resolves to %qT, which is is not a class type",
10563 t, f);
10564 else
10565 return error_mark_node;
10566 }
10563 }10567 }
1056410568
10565 /* cv-quals from the template are discarded when10569 /* cv-quals from the template are discarded when
@@ -15193,6 +15197,9 @@
15193 return 1;15197 return 1;
1519415198
15195 default:15199 default:
15200 /* An unresolved overload is a nondeduced context. */
15201 if (type_unknown_p (parm))
15202 return 0;
15196 gcc_assert (EXPR_P (parm));15203 gcc_assert (EXPR_P (parm));
1519715204
15198 /* We must be looking at an expression. This can happen with15205 /* We must be looking at an expression. This can happen with
@@ -16720,8 +16727,13 @@
16720 if (!pattern_defined && expl_inst_class_mem_p16727 if (!pattern_defined && expl_inst_class_mem_p
16721 && DECL_EXPLICIT_INSTANTIATION (d))16728 && DECL_EXPLICIT_INSTANTIATION (d))
16722 {16729 {
16723 DECL_NOT_REALLY_EXTERN (d) = 0;16730 /* Leave linkage flags alone on instantiations with anonymous
16724 DECL_INTERFACE_KNOWN (d) = 0;16731 visibility. */
16732 if (TREE_PUBLIC (d))
16733 {
16734 DECL_NOT_REALLY_EXTERN (d) = 0;
16735 DECL_INTERFACE_KNOWN (d) = 0;
16736 }
16725 SET_DECL_IMPLICIT_INSTANTIATION (d);16737 SET_DECL_IMPLICIT_INSTANTIATION (d);
16726 }16738 }
1672716739
1672816740
=== modified file 'gcc/cp/tree.c'
--- gcc/cp/tree.c 2010-12-03 18:44:04 +0000
+++ gcc/cp/tree.c 2011-04-06 13:16:33 +0000
@@ -2089,12 +2089,18 @@
20892089
2090 case PARM_DECL:2090 case PARM_DECL:
2091 /* For comparing uses of parameters in late-specified return types2091 /* For comparing uses of parameters in late-specified return types
2092 with an out-of-class definition of the function. */2092 with an out-of-class definition of the function, but can also come
2093 if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))2093 up for expressions that involve 'this' in a member function
2094 && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))2094 template. */
2095 return true;2095 if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
2096 else2096 {
2097 return false;2097 if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
2098 return false;
2099 if (DECL_ARTIFICIAL (t1)
2100 || DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))
2101 return true;
2102 }
2103 return false;
20982104
2099 case VAR_DECL:2105 case VAR_DECL:
2100 case CONST_DECL:2106 case CONST_DECL:
21012107
=== modified file 'gcc/doc/cfg.texi'
--- gcc/doc/cfg.texi 2009-04-27 19:23:51 +0000
+++ gcc/doc/cfg.texi 2011-04-06 13:16:33 +0000
@@ -559,8 +559,7 @@
559In the RTL representation, the macros @code{BB_HEAD} and @code{BB_END}559In the RTL representation, the macros @code{BB_HEAD} and @code{BB_END}
560may be used to get the head and end @code{rtx} of a basic block. No560may be used to get the head and end @code{rtx} of a basic block. No
561abstract iterators are defined for traversing the insn chain, but you561abstract iterators are defined for traversing the insn chain, but you
562can just use @code{NEXT_INSN} and @code{PREV_INSN} instead. See562can just use @code{NEXT_INSN} and @code{PREV_INSN} instead. @xref{Insns}.
563@xref{Insns}.
564563
565@findex purge_dead_edges564@findex purge_dead_edges
566Usually a code manipulating pass simplifies the instruction stream and565Usually a code manipulating pass simplifies the instruction stream and
567566
=== modified file 'gcc/doc/cpp.texi'
--- gcc/doc/cpp.texi 2010-04-02 18:54:46 +0000
+++ gcc/doc/cpp.texi 2011-04-06 13:16:33 +0000
@@ -12,7 +12,7 @@
12@c man begin COPYRIGHT12@c man begin COPYRIGHT
13Copyright @copyright{} 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,13Copyright @copyright{} 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
141997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,141997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
152008, 2009, 2010152008, 2009, 2010, 2011
16Free Software Foundation, Inc.16Free Software Foundation, Inc.
1717
18Permission is granted to copy, distribute and/or modify this document18Permission is granted to copy, distribute and/or modify this document
@@ -4161,9 +4161,10 @@
4161define them with preprocessing directives or command-line options.4161define them with preprocessing directives or command-line options.
41624162
4163Assertions were intended to provide a more systematic way to describe4163Assertions were intended to provide a more systematic way to describe
4164the compiler's target system. However, in practice they are just as4164the compiler's target system and we added them for compatibility with
4165unpredictable as the system-specific predefined macros. In addition, they4165existing compilers. In practice they are just as unpredictable as the
4166are not part of any standard, and only a few compilers support them.4166system-specific predefined macros. In addition, they are not part of
4167any standard, and only a few compilers support them.
4167Therefore, the use of assertions is @strong{less} portable than the use4168Therefore, the use of assertions is @strong{less} portable than the use
4168of system-specific predefined macros. We recommend you do not use them at4169of system-specific predefined macros. We recommend you do not use them at
4169all.4170all.
41704171
=== modified file 'gcc/doc/extend.texi'
--- gcc/doc/extend.texi 2011-02-04 16:31:48 +0000
+++ gcc/doc/extend.texi 2011-04-06 13:16:33 +0000
@@ -3855,42 +3855,6 @@
3855You can use the sequence @samp{\e} in a string or character constant to3855You can use the sequence @samp{\e} in a string or character constant to
3856stand for the ASCII character @key{ESC}.3856stand for the ASCII character @key{ESC}.
38573857
3858@node Alignment
3859@section Inquiring on Alignment of Types or Variables
3860@cindex alignment
3861@cindex type alignment
3862@cindex variable alignment
3863
3864The keyword @code{__alignof__} allows you to inquire about how an object
3865is aligned, or the minimum alignment usually required by a type. Its
3866syntax is just like @code{sizeof}.
3867
3868For example, if the target machine requires a @code{double} value to be
3869aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
3870This is true on many RISC machines. On more traditional machine
3871designs, @code{__alignof__ (double)} is 4 or even 2.
3872
3873Some machines never actually require alignment; they allow reference to any
3874data type even at an odd address. For these machines, @code{__alignof__}
3875reports the smallest alignment that GCC will give the data type, usually as
3876mandated by the target ABI.
3877
3878If the operand of @code{__alignof__} is an lvalue rather than a type,
3879its value is the required alignment for its type, taking into account
3880any minimum alignment specified with GCC's @code{__attribute__}
3881extension (@pxref{Variable Attributes}). For example, after this
3882declaration:
3883
3884@smallexample
3885struct foo @{ int x; char y; @} foo1;
3886@end smallexample
3887
3888@noindent
3889the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
3890alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
3891
3892It is an error to ask for the alignment of an incomplete type.
3893
3894@node Variable Attributes3858@node Variable Attributes
3895@section Specifying Attributes of Variables3859@section Specifying Attributes of Variables
3896@cindex attribute of variables3860@cindex attribute of variables
@@ -4899,6 +4863,42 @@
4899Language Extensions Specification. It is intended to support the4863Language Extensions Specification. It is intended to support the
4900@code{__vector} keyword.4864@code{__vector} keyword.
49014865
4866@node Alignment
4867@section Inquiring on Alignment of Types or Variables
4868@cindex alignment
4869@cindex type alignment
4870@cindex variable alignment
4871
4872The keyword @code{__alignof__} allows you to inquire about how an object
4873is aligned, or the minimum alignment usually required by a type. Its
4874syntax is just like @code{sizeof}.
4875
4876For example, if the target machine requires a @code{double} value to be
4877aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
4878This is true on many RISC machines. On more traditional machine
4879designs, @code{__alignof__ (double)} is 4 or even 2.
4880
4881Some machines never actually require alignment; they allow reference to any
4882data type even at an odd address. For these machines, @code{__alignof__}
4883reports the smallest alignment that GCC will give the data type, usually as
4884mandated by the target ABI.
4885
4886If the operand of @code{__alignof__} is an lvalue rather than a type,
4887its value is the required alignment for its type, taking into account
4888any minimum alignment specified with GCC's @code{__attribute__}
4889extension (@pxref{Variable Attributes}). For example, after this
4890declaration:
4891
4892@smallexample
4893struct foo @{ int x; char y; @} foo1;
4894@end smallexample
4895
4896@noindent
4897the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
4898alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
4899
4900It is an error to ask for the alignment of an incomplete type.
4901
49024902
4903@node Inline4903@node Inline
4904@section An Inline Function is As Fast As a Macro4904@section An Inline Function is As Fast As a Macro
49054905
=== modified file 'gcc/doc/invoke.texi'
--- gcc/doc/invoke.texi 2011-02-08 10:51:58 +0000
+++ gcc/doc/invoke.texi 2011-04-06 13:16:33 +0000
@@ -607,6 +607,11 @@
607-m32 -m64 -mlarge-data-threshold=@var{num} @gol607-m32 -m64 -mlarge-data-threshold=@var{num} @gol
608-msse2avx}608-msse2avx}
609609
610@emph{i386 and x86-64 Windows Options}
611@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
612-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
613-fno-set-stack-executable}
614
610@emph{IA-64 Options}615@emph{IA-64 Options}
611@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol616@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
612-mvolatile-asm-stop -mregister-names -msdata -mno-sdata @gol617-mvolatile-asm-stop -mregister-names -msdata -mno-sdata @gol
@@ -883,11 +888,6 @@
883@emph{x86-64 Options}888@emph{x86-64 Options}
884See i386 and x86-64 Options.889See i386 and x86-64 Options.
885890
886@emph{i386 and x86-64 Windows Options}
887@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
888-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
889-fno-set-stack-executable}
890
891@emph{Xstormy16 Options}891@emph{Xstormy16 Options}
892@gccoptlist{-msim}892@gccoptlist{-msim}
893893
@@ -2420,7 +2420,7 @@
2420@cindex Objective-C and Objective-C++ options, command line2420@cindex Objective-C and Objective-C++ options, command line
2421@cindex options, Objective-C and Objective-C++2421@cindex options, Objective-C and Objective-C++
2422(NOTE: This manual does not describe the Objective-C and Objective-C++2422(NOTE: This manual does not describe the Objective-C and Objective-C++
2423languages themselves. See @xref{Standards,,Language Standards2423languages themselves. @xref{Standards,,Language Standards
2424Supported by GCC}, for references.)2424Supported by GCC}, for references.)
24252425
2426This section describes the command-line options that are only meaningful2426This section describes the command-line options that are only meaningful
@@ -6581,7 +6581,7 @@
6581@opindex fipa-struct-reorg6581@opindex fipa-struct-reorg
6582Perform structure reorganization optimization, that change C-like structures6582Perform structure reorganization optimization, that change C-like structures
6583layout in order to better utilize spatial locality. This transformation is6583layout in order to better utilize spatial locality. This transformation is
6584affective for programs containing arrays of structures. Available in two6584effective for programs containing arrays of structures. Available in two
6585compilation modes: profile-based (enabled with @option{-fprofile-generate})6585compilation modes: profile-based (enabled with @option{-fprofile-generate})
6586or static (which uses built-in heuristics). Require @option{-fipa-type-escape}6586or static (which uses built-in heuristics). Require @option{-fipa-type-escape}
6587to provide the safety of this transformation. It works only in whole program6587to provide the safety of this transformation. It works only in whole program
@@ -9729,10 +9729,10 @@
97299729
9730@item -mmangle-cpu9730@item -mmangle-cpu
9731@opindex mmangle-cpu9731@opindex mmangle-cpu
9732Prepend the name of the cpu to all public symbol names.9732Prepend the name of the CPU to all public symbol names.
9733In multiple-processor systems, there are many ARC variants with different9733In multiple-processor systems, there are many ARC variants with different
9734instruction and register set characteristics. This flag prevents code9734instruction and register set characteristics. This flag prevents code
9735compiled for one cpu to be linked with code compiled for another.9735compiled for one CPU to be linked with code compiled for another.
9736No facility exists for handling variants that are ``almost identical''.9736No facility exists for handling variants that are ``almost identical''.
9737This is an all or nothing option.9737This is an all or nothing option.
97389738
@@ -9912,7 +9912,7 @@
9912restricting which instructions can be used, it specifies that GCC should9912restricting which instructions can be used, it specifies that GCC should
9913tune the performance of the code as if the target were of the type9913tune the performance of the code as if the target were of the type
9914specified in this option, but still choosing the instructions that it9914specified in this option, but still choosing the instructions that it
9915will generate based on the cpu specified by a @option{-mcpu=} option.9915will generate based on the CPU specified by a @option{-mcpu=} option.
9916For some ARM implementations better performance can be obtained by using9916For some ARM implementations better performance can be obtained by using
9917this option.9917this option.
99189918
@@ -11969,7 +11969,7 @@
11969@code{sqrt} instructions for the 387. Specify this option to avoid11969@code{sqrt} instructions for the 387. Specify this option to avoid
11970generating those instructions. This option is the default on FreeBSD,11970generating those instructions. This option is the default on FreeBSD,
11971OpenBSD and NetBSD@. This option is overridden when @option{-march}11971OpenBSD and NetBSD@. This option is overridden when @option{-march}
11972indicates that the target cpu will always have an FPU and so the11972indicates that the target CPU will always have an FPU and so the
11973instruction will not need emulation. As of revision 2.6.1, these11973instruction will not need emulation. As of revision 2.6.1, these
11974instructions are not generated unless you also use the11974instructions are not generated unless you also use the
11975@option{-funsafe-math-optimizations} switch.11975@option{-funsafe-math-optimizations} switch.
@@ -12429,6 +12429,94 @@
12429about addresses and sizes of sections.12429about addresses and sizes of sections.
12430@end table12430@end table
1243112431
12432@node i386 and x86-64 Windows Options
12433@subsection i386 and x86-64 Windows Options
12434@cindex i386 and x86-64 Windows Options
12435
12436These additional options are available for Windows targets:
12437
12438@table @gcctabopt
12439@item -mconsole
12440@opindex mconsole
12441This option is available for Cygwin and MinGW targets. It
12442specifies that a console application is to be generated, by
12443instructing the linker to set the PE header subsystem type
12444required for console applications.
12445This is the default behavior for Cygwin and MinGW targets.
12446
12447@item -mcygwin
12448@opindex mcygwin
12449This option is available for Cygwin targets. It specifies that
12450the Cygwin internal interface is to be used for predefined
12451preprocessor macros, C runtime libraries and related linker
12452paths and options. For Cygwin targets this is the default behavior.
12453This option is deprecated and will be removed in a future release.
12454
12455@item -mno-cygwin
12456@opindex mno-cygwin
12457This option is available for Cygwin targets. It specifies that
12458the MinGW internal interface is to be used instead of Cygwin's, by
12459setting MinGW-related predefined macros and linker paths and default
12460library options.
12461This option is deprecated and will be removed in a future release.
12462
12463@item -mdll
12464@opindex mdll
12465This option is available for Cygwin and MinGW targets. It
12466specifies that a DLL - a dynamic link library - is to be
12467generated, enabling the selection of the required runtime
12468startup object and entry point.
12469
12470@item -mnop-fun-dllimport
12471@opindex mnop-fun-dllimport
12472This option is available for Cygwin and MinGW targets. It
12473specifies that the dllimport attribute should be ignored.
12474
12475@item -mthread
12476@opindex mthread
12477This option is available for MinGW targets. It specifies
12478that MinGW-specific thread support is to be used.
12479
12480@item -municode
12481@opindex municode
12482This option is available for mingw-w64 targets. It specifies
12483that the UNICODE macro is getting pre-defined and that the
12484unicode capable runtime startup code is chosen.
12485
12486@item -mwin32
12487@opindex mwin32
12488This option is available for Cygwin and MinGW targets. It
12489specifies that the typical Windows pre-defined macros are to
12490be set in the pre-processor, but does not influence the choice
12491of runtime library/startup code.
12492
12493@item -mwindows
12494@opindex mwindows
12495This option is available for Cygwin and MinGW targets. It
12496specifies that a GUI application is to be generated by
12497instructing the linker to set the PE header subsystem type
12498appropriately.
12499
12500@item -fno-set-stack-executable
12501@opindex fno-set-stack-executable
12502This option is available for MinGW targets. It specifies that
12503the executable flag for stack used by nested functions isn't
12504set. This is necessary for binaries running in kernel mode of
12505Windows, as there the user32 API, which is used to set executable
12506privileges, isn't available.
12507
12508@item -mpe-aligned-commons
12509@opindex mpe-aligned-commons
12510This option is available for Cygwin and MinGW targets. It
12511specifies that the GNU extension to the PE file format that
12512permits the correct alignment of COMMON variables should be
12513used when generating code. It will be enabled by default if
12514GCC detects that the target assembler found during configuration
12515supports the feature.
12516@end table
12517
12518See also under @ref{i386 and x86-64 Options} for standard options.
12519
12432@node IA-64 Options12520@node IA-64 Options
12433@subsection IA-64 Options12521@subsection IA-64 Options
12434@cindex IA-64 Options12522@cindex IA-64 Options
@@ -15644,7 +15732,7 @@
15644@opindex -patch15732@opindex -patch
15645Selects the type of RX CPU to be targeted. Currently three types are15733Selects the type of RX CPU to be targeted. Currently three types are
15646supported, the generic @var{RX600} and @var{RX200} series hardware and15734supported, the generic @var{RX600} and @var{RX200} series hardware and
15647the specific @var{RX610} cpu. The default is @var{RX600}.15735the specific @var{RX610} CPU. The default is @var{RX600}.
1564815736
15649The only difference between @var{RX600} and @var{RX610} is that the15737The only difference between @var{RX600} and @var{RX610} is that the
15650@var{RX610} does not support the @code{MVTIPL} instruction.15738@var{RX610} does not support the @code{MVTIPL} instruction.
@@ -16462,7 +16550,7 @@
1646216550
16463The same values for @option{-mcpu=@var{cpu_type}} can be used for16551The same values for @option{-mcpu=@var{cpu_type}} can be used for
16464@option{-mtune=@var{cpu_type}}, but the only useful values are those16552@option{-mtune=@var{cpu_type}}, but the only useful values are those
16465that select a particular cpu implementation. Those are @samp{cypress},16553that select a particular CPU implementation. Those are @samp{cypress},
16466@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},16554@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
16467@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},16555@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
16468@samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.16556@samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.
@@ -16902,94 +16990,6 @@
1690216990
16903These are listed under @xref{i386 and x86-64 Options}.16991These are listed under @xref{i386 and x86-64 Options}.
1690416992
16905@node i386 and x86-64 Windows Options
16906@subsection i386 and x86-64 Windows Options
16907@cindex i386 and x86-64 Windows Options
16908
16909These additional options are available for Windows targets:
16910
16911@table @gcctabopt
16912@item -mconsole
16913@opindex mconsole
16914This option is available for Cygwin and MinGW targets. It
16915specifies that a console application is to be generated, by
16916instructing the linker to set the PE header subsystem type
16917required for console applications.
16918This is the default behavior for Cygwin and MinGW targets.
16919
16920@item -mcygwin
16921@opindex mcygwin
16922This option is available for Cygwin targets. It specifies that
16923the Cygwin internal interface is to be used for predefined
16924preprocessor macros, C runtime libraries and related linker
16925paths and options. For Cygwin targets this is the default behavior.
16926This option is deprecated and will be removed in a future release.
16927
16928@item -mno-cygwin
16929@opindex mno-cygwin
16930This option is available for Cygwin targets. It specifies that
16931the MinGW internal interface is to be used instead of Cygwin's, by
16932setting MinGW-related predefined macros and linker paths and default
16933library options.
16934This option is deprecated and will be removed in a future release.
16935
16936@item -mdll
16937@opindex mdll
16938This option is available for Cygwin and MinGW targets. It
16939specifies that a DLL - a dynamic link library - is to be
16940generated, enabling the selection of the required runtime
16941startup object and entry point.
16942
16943@item -mnop-fun-dllimport
16944@opindex mnop-fun-dllimport
16945This option is available for Cygwin and MinGW targets. It
16946specifies that the dllimport attribute should be ignored.
16947
16948@item -mthread
16949@opindex mthread
16950This option is available for MinGW targets. It specifies
16951that MinGW-specific thread support is to be used.
16952
16953@item -municode
16954@opindex municode
16955This option is available for mingw-w64 targets. It specifies
16956that the UNICODE macro is getting pre-defined and that the
16957unicode capable runtime startup code is chosen.
16958
16959@item -mwin32
16960@opindex mwin32
16961This option is available for Cygwin and MinGW targets. It
16962specifies that the typical Windows pre-defined macros are to
16963be set in the pre-processor, but does not influence the choice
16964of runtime library/startup code.
16965
16966@item -mwindows
16967@opindex mwindows
16968This option is available for Cygwin and MinGW targets. It
16969specifies that a GUI application is to be generated by
16970instructing the linker to set the PE header subsystem type
16971appropriately.
16972
16973@item -fno-set-stack-executable
16974@opindex fno-set-stack-executable
16975This option is available for MinGW targets. It specifies that
16976the executable flag for stack used by nested functions isn't
16977set. This is necessary for binaries running in kernel mode of
16978Windows, as there the user32 API, which is used to set executable
16979privileges, isn't available.
16980
16981@item -mpe-aligned-commons
16982@opindex mpe-aligned-commons
16983This option is available for Cygwin and MinGW targets. It
16984specifies that the GNU extension to the PE file format that
16985permits the correct alignment of COMMON variables should be
16986used when generating code. It will be enabled by default if
16987GCC detects that the target assembler found during configuration
16988supports the feature.
16989@end table
16990
16991See also under @ref{i386 and x86-64 Options} for standard options.
16992
16993@node Xstormy16 Options16993@node Xstormy16 Options
16994@subsection Xstormy16 Options16994@subsection Xstormy16 Options
16995@cindex Xstormy16 Options16995@cindex Xstormy16 Options
1699616996
=== modified file 'gcc/fortran/ChangeLog'
--- gcc/fortran/ChangeLog 2011-02-19 08:57:10 +0000
+++ gcc/fortran/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,3 +1,27 @@
12011-04-05 Duncan Sands <baldrick@free.fr>
2
3 * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter
4 types.
5
62011-03-13 Paul Thomas <pault@gcc.gnu.org>
7
8 PR fortran/47348
9 * trans-array.c (get_array_ctor_all_strlen): Move up in file.
10 (get_array_ctor_var_strlen): Add block dummy and add call to
11 get_array_ctor_all_strlen instead of giving up on substrings.
12 Call gcc_unreachable for default case.
13 (get_array_ctor_strlen): Add extra argument to in call to
14 get_array_ctor_var_strlen.
15
162011-01-27 Tobias Burnus <burnus@net-b.de>
17
18 Backport from mainline
19 2011-02-26 Tobias Burnus <burnus@net-b.de>
20
21 PR fortran/47886
22 * openmp.c (gfc_resolve_omp_directive): Resolve if()
23 condition of OpenMP's task.
24
12011-02-19 Tobias Burnus252011-02-19 Tobias Burnus
226
3 PR fortran/4777527 PR fortran/47775
428
=== modified file 'gcc/fortran/f95-lang.c'
--- gcc/fortran/f95-lang.c 2010-06-15 11:17:16 +0000
+++ gcc/fortran/f95-lang.c 2011-04-06 13:16:33 +0000
@@ -646,19 +646,20 @@
646 /* type (*) (type, type) */646 /* type (*) (type, type) */
647 tmp = tree_cons (NULL_TREE, type, tmp);647 tmp = tree_cons (NULL_TREE, type, tmp);
648 fntype[1] = build_function_type (type, tmp);648 fntype[1] = build_function_type (type, tmp);
649 /* type (*) (int, type) */649 /* type (*) (type, int) */
650 tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);650 tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
651 tmp = tree_cons (NULL_TREE, type, tmp);651 tmp = tree_cons (NULL_TREE, type, tmp);
652 fntype[2] = build_function_type (type, tmp);652 fntype[2] = build_function_type (type, tmp);
653 /* type (*) (void) */653 /* type (*) (void) */
654 fntype[3] = build_function_type (type, void_list_node);654 fntype[3] = build_function_type (type, void_list_node);
655 /* type (*) (type, &int) */655 /* type (*) (type, &int) */
656 tmp = tree_cons (NULL_TREE, type, void_list_node);656 tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node),
657 tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node), tmp);657 void_list_node);
658 tmp = tree_cons (NULL_TREE, type, tmp);
658 fntype[4] = build_function_type (type, tmp);659 fntype[4] = build_function_type (type, tmp);
659 /* type (*) (type, int) */660 /* type (*) (type, int) */
660 tmp = tree_cons (NULL_TREE, type, void_list_node);661 tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
661 tmp = tree_cons (NULL_TREE, integer_type_node, tmp);662 tmp = tree_cons (NULL_TREE, type, tmp);
662 fntype[5] = build_function_type (type, tmp);663 fntype[5] = build_function_type (type, tmp);
663}664}
664665
665666
=== modified file 'gcc/fortran/openmp.c'
--- gcc/fortran/openmp.c 2011-01-25 17:01:06 +0000
+++ gcc/fortran/openmp.c 2011-04-06 13:16:33 +0000
@@ -1546,6 +1546,7 @@
1546 case EXEC_OMP_PARALLEL_SECTIONS:1546 case EXEC_OMP_PARALLEL_SECTIONS:
1547 case EXEC_OMP_SECTIONS:1547 case EXEC_OMP_SECTIONS:
1548 case EXEC_OMP_SINGLE:1548 case EXEC_OMP_SINGLE:
1549 case EXEC_OMP_TASK:
1549 if (code->ext.omp_clauses)1550 if (code->ext.omp_clauses)
1550 resolve_omp_clauses (code);1551 resolve_omp_clauses (code);
1551 break;1552 break;
15521553
=== modified file 'gcc/fortran/trans-array.c'
--- gcc/fortran/trans-array.c 2011-01-16 11:46:55 +0000
+++ gcc/fortran/trans-array.c 2011-04-06 13:16:33 +0000
@@ -1483,11 +1483,55 @@
1483}1483}
14841484
14851485
1486/* A catch-all to obtain the string length for anything that is not a
1487 a substring of non-constant length, a constant, array or variable. */
1488
1489static void
1490get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len)
1491{
1492 gfc_se se;
1493 gfc_ss *ss;
1494
1495 /* Don't bother if we already know the length is a constant. */
1496 if (*len && INTEGER_CST_P (*len))
1497 return;
1498
1499 if (!e->ref && e->ts.u.cl && e->ts.u.cl->length
1500 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1501 {
1502 /* This is easy. */
1503 gfc_conv_const_charlen (e->ts.u.cl);
1504 *len = e->ts.u.cl->backend_decl;
1505 }
1506 else
1507 {
1508 /* Otherwise, be brutal even if inefficient. */
1509 ss = gfc_walk_expr (e);
1510 gfc_init_se (&se, NULL);
1511
1512 /* No function call, in case of side effects. */
1513 se.no_function_call = 1;
1514 if (ss == gfc_ss_terminator)
1515 gfc_conv_expr (&se, e);
1516 else
1517 gfc_conv_expr_descriptor (&se, e, ss);
1518
1519 /* Fix the value. */
1520 *len = gfc_evaluate_now (se.string_length, &se.pre);
1521
1522 gfc_add_block_to_block (block, &se.pre);
1523 gfc_add_block_to_block (block, &se.post);
1524
1525 e->ts.u.cl->backend_decl = *len;
1526 }
1527}
1528
1529
1486/* Figure out the string length of a variable reference expression.1530/* Figure out the string length of a variable reference expression.
1487 Used by get_array_ctor_strlen. */1531 Used by get_array_ctor_strlen. */
14881532
1489static void1533static void
1490get_array_ctor_var_strlen (gfc_expr * expr, tree * len)1534get_array_ctor_var_strlen (stmtblock_t *block, gfc_expr * expr, tree * len)
1491{1535{
1492 gfc_ref *ref;1536 gfc_ref *ref;
1493 gfc_typespec *ts;1537 gfc_typespec *ts;
@@ -1514,7 +1558,11 @@
1514 case REF_SUBSTRING:1558 case REF_SUBSTRING:
1515 if (ref->u.ss.start->expr_type != EXPR_CONSTANT1559 if (ref->u.ss.start->expr_type != EXPR_CONSTANT
1516 || ref->u.ss.end->expr_type != EXPR_CONSTANT)1560 || ref->u.ss.end->expr_type != EXPR_CONSTANT)
1517 break;1561 {
1562 /* Note that this might evaluate expr. */
1563 get_array_ctor_all_strlen (block, expr, len);
1564 return;
1565 }
1518 mpz_init_set_ui (char_len, 1);1566 mpz_init_set_ui (char_len, 1);
1519 mpz_add (char_len, char_len, ref->u.ss.end->value.integer);1567 mpz_add (char_len, char_len, ref->u.ss.end->value.integer);
1520 mpz_sub (char_len, char_len, ref->u.ss.start->value.integer);1568 mpz_sub (char_len, char_len, ref->u.ss.start->value.integer);
@@ -1524,10 +1572,7 @@
1524 return;1572 return;
15251573
1526 default:1574 default:
1527 /* TODO: Substrings are tricky because we can't evaluate the1575 gcc_unreachable ();
1528 expression more than once. For now we just give up, and hope
1529 we can figure it out elsewhere. */
1530 return;
1531 }1576 }
1532 }1577 }
15331578
@@ -1535,49 +1580,6 @@
1535}1580}
15361581
15371582
1538/* A catch-all to obtain the string length for anything that is not a
1539 constant, array or variable. */
1540static void
1541get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len)
1542{
1543 gfc_se se;
1544 gfc_ss *ss;
1545
1546 /* Don't bother if we already know the length is a constant. */
1547 if (*len && INTEGER_CST_P (*len))
1548 return;
1549
1550 if (!e->ref && e->ts.u.cl && e->ts.u.cl->length
1551 && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
1552 {
1553 /* This is easy. */
1554 gfc_conv_const_charlen (e->ts.u.cl);
1555 *len = e->ts.u.cl->backend_decl;
1556 }
1557 else
1558 {
1559 /* Otherwise, be brutal even if inefficient. */
1560 ss = gfc_walk_expr (e);
1561 gfc_init_se (&se, NULL);
1562
1563 /* No function call, in case of side effects. */
1564 se.no_function_call = 1;
1565 if (ss == gfc_ss_terminator)
1566 gfc_conv_expr (&se, e);
1567 else
1568 gfc_conv_expr_descriptor (&se, e, ss);
1569
1570 /* Fix the value. */
1571 *len = gfc_evaluate_now (se.string_length, &se.pre);
1572
1573 gfc_add_block_to_block (block, &se.pre);
1574 gfc_add_block_to_block (block, &se.post);
1575
1576 e->ts.u.cl->backend_decl = *len;
1577 }
1578}
1579
1580
1581/* Figure out the string length of a character array constructor.1583/* Figure out the string length of a character array constructor.
1582 If len is NULL, don't calculate the length; this happens for recursive calls1584 If len is NULL, don't calculate the length; this happens for recursive calls
1583 when a sub-array-constructor is an element but not at the first position,1585 when a sub-array-constructor is an element but not at the first position,
@@ -1619,7 +1621,7 @@
1619 case EXPR_VARIABLE:1621 case EXPR_VARIABLE:
1620 is_const = false;1622 is_const = false;
1621 if (len)1623 if (len)
1622 get_array_ctor_var_strlen (c->expr, len);1624 get_array_ctor_var_strlen (block, c->expr, len);
1623 break;1625 break;
16241626
1625 default:1627 default:
16261628
=== modified file 'gcc/stor-layout.c'
--- gcc/stor-layout.c 2010-12-10 15:34:19 +0000
+++ gcc/stor-layout.c 2011-04-06 13:16:33 +0000
@@ -2033,11 +2033,6 @@
2033#else2033#else
2034 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);2034 TYPE_ALIGN (type) = MAX (TYPE_ALIGN (element), BITS_PER_UNIT);
2035#endif2035#endif
2036 if (!TYPE_SIZE (element))
2037 /* We don't know the size of the underlying element type, so
2038 our alignment calculations will be wrong, forcing us to
2039 fall back on structural equality. */
2040 SET_TYPE_STRUCTURAL_EQUALITY (type);
2041 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);2036 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (element);
2042 SET_TYPE_MODE (type, BLKmode);2037 SET_TYPE_MODE (type, BLKmode);
2043 if (TYPE_SIZE (type) != 02038 if (TYPE_SIZE (type) != 0
20442039
=== modified file 'gcc/testsuite/ChangeLog'
--- gcc/testsuite/ChangeLog 2011-02-19 21:08:40 +0000
+++ gcc/testsuite/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,3 +1,168 @@
12011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2
3 PR target/16292
4 * gfortran.dg/g77/cabs.f: Only xfail execution on mips-sgi-irix6*
5 with -O0 except with -mabi=32.
6
72011-03-28 Jason Merrill <jason@redhat.com>
8
9 Revert:
10 * g++.dg/cpp0x/move1.C: New.
11
122011-03-28 Richard Sandiford <richard.sandiford@linaro.org>
13
14 PR target/47553
15 * gcc.target/arm/neon-vld-1.c: New test.
16
172011-03-25 Jason Merrill <jason@redhat.com>
18
19 * g++.dg/cpp0x/move1.C: New.
20
212011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
22
23 PR preprocessor/48192
24 Backport from trunk
25 * gcc.target/powerpc/pr48192.c: New file.
26
272011-03-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
28
29 PR middle-end/47405
30 * gcc.dg/torture/20090618-1.c: Skip on mips-sgi-irix*.
31
322011-03-14 Richard Sandiford <richard.sandiford@linaro.org>
33
34 PR rtl-optimization/47166
35 * gcc.c-torture/execute/postmod-1.c: New test.
36
372011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
38
39 PR libfortran/48066
40 Backport from trunk
41 * gfortran.dg/intrinsic_ifunction_2.f90: Correct PR number.
42
432011-03-13 Paul Thomas <pault@gcc.gnu.org>
44
45 PR fortran/47348
46 * gfortran.dg/array_constructor_36.f90 : New test.
47 * gfortran.dg/bounds_check_10.f90 : Change dg-output message to
48 allow for comparison between different elements of the array
49 constructor at different levels of optimization.
50
512011-03-11 Jason Merrill <jason@redhat.com>
52
53 * g++.dg/template/error45.C: New.
54
552011-03-10 Jason Merrill <jason@redhat.com>
56
57 * g++.dg/template/array22.C: New.
58
592011-03-11 Richard Guenther <rguenther@suse.de>
60
61 PR tree-optimization/47278
62 * gcc.dg/torture/pr47278-1.c: Require visibility support.
63 * gcc.dg/torture/pr47278-2.c: Likewise.
64
652011-03-09 Jason Merrill <jason@redhat.com>
66
67 * g++.dg/template/nontype22.C: New.
68
692011-03-08 Jason Merrill <jason@redhat.com>
70
71 * g++.dg/template/anon5.C: New.
72
732011-03-08 Jason Merrill <jason@redhat.com>
74
75 * g++.dg/cpp0x/variadic105.C: New.
76
772011-03-08 Jason Merrill <jason@redhat.com>
78
79 * g++.dg/template/nontype21.C: New.
80
812011-03-08 Dodji Seketeli <dodji@redhat.com>
82
83 * g++.dg/lookup/template3.C: New test.
84
852011-03-08 Richard Guenther <rguenther@suse.de>
86
87 Backport from mainline
88 2010-10-18 Richard Guenther <rguenther@suse.de>
89
90 PR tree-optimization/45967
91 * gcc.dg/torture/pr45967.c: New testcase.
92 * gcc.dg/torture/pr45967-2.c: Likewise.
93 * gcc.dg/torture/pr45967-3.c: Likewise.
94 * gcc.dg/torture/pr39074-2.c: Adjust.
95 * gcc.dg/torture/pta-escape-1.c: Likewise
96 * gcc.dg/torture/pta-ptrarith-1.c: Likewise
97 * gcc.dg/tree-ssa/pta-callused.c: Likewise
98 * gcc.dg/tree-ssa/pta-escape-1.c: Likewise
99 * gcc.dg/tree-ssa/pta-escape-2.c: Likewise
100 * gcc.dg/tree-ssa/pta-escape-3.c: Likewise
101 * gcc.dg/tree-ssa/ssa-pre-21.c: Likewise
102
1032011-03-08 Richard Guenther <rguenther@suse.de>
104
105 PR tree-optimization/47278
106 * gcc.dg/torture/pr47278-1.c: New testcase.
107 * gcc.dg/torture/pr47278-2.c: Likewise.
108
1092011-03-07 Pat Haugen <pthaugen@us.ibm.com>
110
111 Backport from mainline
112 2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
113
114 PR target/47862
115 * gcc.target/powerpc/pr47862.c: New.
116
1172011-03-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
118
119 Backport from mainline
120 PR libgfortran/47778
121 * gfortran.dg/namelist_71.f90: New test.
122
1232011-03-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
124
125 Backport from mainline
126 PR libgfortran/47878
127 * gfortran.dg/pr47878.f90: New test.
128
1292011-03-01 Jason Merrill <jason@redhat.com>
130
131 * g++.dg/cpp0x/lambda/lambda-98.C: New.
132
1332011-03-02 Richard Guenther <rguenther@suse.de>
134
135 Backport from mainline
136 2011-02-07 Richard Guenther <rguenther@suse.de>
137
138 PR tree-optimization/47615
139 * g++.dg/opt/pr47615.C: New testcase.
140
1412011-03-01 Richard Guenther <rguenther@suse.de>
142
143 Backport from mainline
144 2011-02-08 Richard Guenther <rguenther@suse.de>
145
146 PR middle-end/47639
147 * g++.dg/opt/pr47639.c: New testcase.
148
1492011-03-01 Richard Guenther <rguenther@suse.de>
150
151 Backport from mainline
152 2011-03-01 Richard Guenther <rguenther@suse.de>
153
154 PR tree-optimization/47890
155 * gcc.dg/torture/pr47890.c: New testcase.
156
157 2010-12-01 Richard Guenther <rguenther@suse.de>
158
159 PR tree-optimization/46723
160 * gcc.dg/torture/pr46723.c: New testcase.
161
1622011-02-26 Jason Merrill <jason@redhat.com>
163
164 * g++.dg/template/this-targ1.C: New.
165
12011-02-19 Alexandre Oliva <aoliva@redhat.com>1662011-02-19 Alexandre Oliva <aoliva@redhat.com>
2167
3 PR tree-optimization/46620168 PR tree-optimization/46620
4169
=== added file 'gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C'
--- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-98.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,8 @@
1// PR c++/46159
2// { dg-options -std=c++98 }
3
4void
5f()
6{
7 int **p = new(int(*[2]));
8}
09
=== added file 'gcc/testsuite/g++.dg/cpp0x/variadic105.C'
--- gcc/testsuite/g++.dg/cpp0x/variadic105.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/cpp0x/variadic105.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,24 @@
1// PR c++/47289
2// { dg-options -std=c++0x }
3// { dg-prune-output "note" }
4
5template <template <typename... __ARGS> class _F, typename... _ARGS>
6auto reverse (_ARGS... args) -> decltype(_F<_ARGS...>::call_function(args...)) {
7 return _F<_ARGS...>::call_function(args...);
8}
9
10template <typename _T>
11_T sum(_T x) { return x; }
12
13template <typename _T, typename... _ARGS>
14_T sum(_T x, _ARGS... args) { return x + sum(args...); }
15
16template <typename _T, typename... _ARGS>
17struct call_sum {
18 static _T call_function(_T x1, _ARGS... args) { return sum(x1, args...); }
19};
20
21int main() {
22 // This shouldn't be an error; this is bug 35722.
23 reverse<call_sum>(1,2); // { dg-bogus "no match" "" { xfail *-*-* } }
24}
025
=== added file 'gcc/testsuite/g++.dg/lookup/template3.C'
--- gcc/testsuite/g++.dg/lookup/template3.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/lookup/template3.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,35 @@
1// Origin PR c++/47957
2// { dg-do compile }
3
4struct S
5{
6 int m;
7
8 S()
9 : m(0)
10 {
11 }
12};
13
14struct Base
15{
16 typedef S T;
17};
18
19template<class T>
20struct Derived : public Base
21{
22 int
23 foo()
24 {
25 T a; // This is Base::T, not the template parameter.
26 return a.m;
27 }
28};
29
30int
31main()
32{
33 Derived<char> d;
34 return d.foo();
35}
036
=== added file 'gcc/testsuite/g++.dg/opt/pr47615.C'
--- gcc/testsuite/g++.dg/opt/pr47615.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/opt/pr47615.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,711 @@
1// { dg-do compile }
2// { dg-options "-O -fstrict-aliasing -ftree-pre -fno-tree-fre -fno-tree-sra" }
3
4typedef __SIZE_TYPE__ size_t;
5namespace std
6{
7 template < class _T1, class > struct pair
8 {
9 _T1 first;
10 };
11}
12namespace __gnu_cxx
13{
14 template < typename _Tp > class new_allocator
15 {
16 public:
17 typedef size_t size_type;
18 typedef _Tp * pointer;
19 typedef _Tp const_pointer;
20 typedef _Tp & reference;
21 typedef const _Tp & const_reference;
22 template < typename _Tp1 > struct rebind
23 {
24 typedef new_allocator < _Tp1 > other;
25 };
26 };
27}
28namespace std
29{
30template < typename _Tp > class allocator:
31 public __gnu_cxx::new_allocator < _Tp >
32 {};
33 template < typename, typename, typename > struct binary_function;
34 template < typename _Tp > struct less:binary_function < _Tp, _Tp, bool >
35 {};
36}
37namespace __gnu_cxx
38{
39 namespace typelist
40 {
41 struct null_type;
42 template < typename Root > struct node
43 {
44 typedef Root root;
45 };
46 template < typename, typename > struct chain;
47 namespace detail
48 {
49 template < typename, int >struct chain_at_index_;
50 template
51 <
52 typename
53 Hd, typename Tl > struct chain_at_index_ <chain < Hd, Tl >, 0 >
54 {
55 typedef Hd type;
56 };
57 template
58 <
59 typename
60 Hd, typename Tl, int i > struct chain_at_index_ <chain < Hd, Tl >, i >
61 {
62 typedef typename chain_at_index_ < Tl, i - 1 >::type type;
63 };
64 }
65 template < typename Typelist, int i > struct at_index
66 {
67 typedef typename Typelist::root root_type;
68 typedef detail::chain_at_index_ < root_type, i > index_type;
69 typedef typename index_type::type type;
70 };
71 template < typename T1, typename T2 > struct create2
72 {
73 typedef node < chain < T1, chain < T2, null_type > > >type;
74 };
75 }
76}
77namespace std
78{
79 namespace tr1
80 {
81 template < typename _Tp, _Tp __v > struct integral_constant
82 {
83 static const _Tp value = __v;
84 };
85 typedef integral_constant < bool, false > false_type;
86 template < typename, typename > struct is_same:false_type
87 {};
88 }
89}
90using std::tr1::is_same;
91namespace __gnu_pbds
92{
93 struct null_mapped_type;
94 struct rb_tree_tag;
95 namespace detail
96 {
97 template < typename, typename, typename > struct basic_tree_policy_base;
98 template
99 <
100 typename
101 Const_Node_Iterator,
102 typename
103 Allocator
104 >
105 struct
106 basic_tree_policy_base
107 <Const_Node_Iterator, Const_Node_Iterator, Allocator >
108 {};
109 }
110 template
111 < typename, typename, typename, typename > struct null_tree_node_update;
112template < typename Const_Node_Iterator, typename Node_Iterator, typename, typename Allocator > class tree_order_statistics_node_update:
113 detail::basic_tree_policy_base
114 < Const_Node_Iterator, Node_Iterator, Allocator >
115 {
116 public:
117 typedef Allocator allocator_type;
118 typedef typename allocator_type::size_type size_type;
119 typedef size_type metadata_type;
120 typedef Const_Node_Iterator const_node_iterator;
121 typedef Node_Iterator node_iterator;
122 typedef
123 typename
124 allocator_type::template
125 rebind < metadata_type >::other::reference metadata_reference;
126 void operator () (node_iterator, const_node_iterator) const;
127 };
128 template
129 <
130 typename
131 Const_Node_Iterator,
132 class
133 Node_Iterator,
134 class
135 Cmp_Fn,
136 class
137 Allocator
138 >
139 inline
140 void
141 tree_order_statistics_node_update
142 <
143 Const_Node_Iterator,
144 Node_Iterator,
145 Cmp_Fn,
146 Allocator
147 >::operator
148 () (node_iterator node_it, const_node_iterator end_nd_it) const
149 {
150 node_iterator l_child_it;
151 size_type
152 l_rank = (l_child_it == end_nd_it) ? : l_child_it.get_metadata ();
153 node_iterator r_child_it = node_it.get_r_child ();
154 size_type
155 r_rank = (r_child_it == end_nd_it) ? : r_child_it.get_metadata ();
156 const_cast
157 < metadata_reference > (node_it.get_metadata ()) = l_rank + r_rank;
158 }
159 namespace
160 {
161 template < typename, typename, typename, bool > struct value_type_base;
162 template
163 <
164 typename
165 Key,
166 typename
167 Allocator
168 > struct value_type_base <Key, null_mapped_type, Allocator, false >
169 {
170 typedef Key value_type;
171 typedef
172 typename
173 Allocator::template rebind < value_type >::other value_type_allocator;
174 typedef typename value_type_allocator::pointer pointer;
175 typedef typename value_type_allocator::const_pointer const_pointer;
176 typedef typename value_type_allocator::reference reference;
177 typedef typename value_type_allocator::const_reference const_reference;
178 };
179 template
180 <
181 typename
182 Key,
183 typename
184 Mapped, typename Alloc, bool Store_Extra > struct vt_base_selector
185 {
186 typedef value_type_base < Key, Mapped, Alloc, Store_Extra > type;
187 };
188 template
189 <
190 typename
191 Key,
192 typename
193 Mapped,
194 typename
195 Alloc,
196 bool
197 Store_Extra
198 >
199 struct
200 types_traits:vt_base_selector < Key, Mapped, Alloc, Store_Extra >::type
201 {};
202 template < typename, class, class > struct dumconst_node_iterator;
203 template
204 <
205 typename
206 Key,
207 typename
208 Mapped,
209 class,
210 class
211 Node_And_It_Traits, class Allocator > class bin_search_tree_no_data_
212 {
213 protected:
214 typedef
215 typename
216 Allocator::template
217 rebind
218 < typename Node_And_It_Traits::node >::other::pointer node_pointer;
219 typedef
220 typename
221 types_traits
222 < Key, Mapped, Allocator, false >::const_reference const_reference;
223 typedef typename Node_And_It_Traits::point_iterator point_iterator;
224 typedef typename Node_And_It_Traits::node_update node_update;
225 void rotate_right (node_pointer);
226 template
227 <
228 typename
229 Node_Update_ > void apply_update (node_pointer, Node_Update_ *);
230 };
231 template
232 <
233 typename
234 Key,
235 typename
236 Mapped,
237 class
238 Cmp_Fn,
239 class
240 Node_And_It_Traits,
241 class
242 Allocator
243 >
244 void
245 bin_search_tree_no_data_
246 <
247 Key,
248 Mapped,
249 Cmp_Fn, Node_And_It_Traits, Allocator >::rotate_right (node_pointer p_x)
250 {
251 node_pointer p_y = p_x->m_p_parent;
252 p_y->m_p_right = p_x;
253 apply_update (p_x, this);
254 apply_update (p_x->m_p_parent, (node_update *) this);
255 }
256 template
257 <
258 typename
259 Key,
260 typename
261 Mapped,
262 class
263 Cmp_Fn,
264 class
265 Node_And_It_Traits,
266 class
267 Allocator
268 >
269 template
270 <
271 typename
272 Node_Update_
273 >
274 void
275 bin_search_tree_no_data_
276 <
277 Key,
278 Mapped,
279 Cmp_Fn,
280 Node_And_It_Traits,
281 Allocator >::apply_update (node_pointer p_nd, Node_Update_ *)
282 {
283 node_update ()((p_nd), ((0)));
284 }
285 }
286 namespace detail
287 {
288 template < typename Key, typename Mapped, typename Cmp_Fn, typename Node_And_It_Traits, typename Allocator > class rb_tree_no_data_:
289 bin_search_tree_no_data_
290 < Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator >
291 {
292 typedef
293 bin_search_tree_no_data_
294 < Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator > base_type;
295 typedef typename base_type::node_pointer node_pointer;
296 public:
297 typedef typename base_type::const_reference const_reference;
298 typedef typename base_type::point_iterator point_iterator;
299 std::pair < point_iterator, bool > insert (const_reference);
300 void insert_fixup (node_pointer);
301 };
302 template
303 <
304 typename
305 Key,
306 typename
307 Mapped,
308 typename
309 Cmp_Fn,
310 typename
311 Node_And_It_Traits,
312 typename
313 Allocator
314 >
315 std::pair
316 <
317 typename
318 rb_tree_no_data_
319 <
320 Key,
321 Mapped,
322 Cmp_Fn,
323 Node_And_It_Traits,
324 Allocator
325 >::point_iterator,
326 bool
327 >
328 rb_tree_no_data_
329 <
330 Key,
331 Mapped,
332 Cmp_Fn, Node_And_It_Traits, Allocator >::insert (const_reference)
333 {
334 std::pair < point_iterator, bool > ins_pair;
335{
336 insert_fixup (ins_pair.first.m_p_nd);
337 }
338 }
339 template
340 <
341 typename
342 Key,
343 typename
344 Mapped,
345 typename
346 Cmp_Fn,
347 typename
348 Node_And_It_Traits,
349 typename
350 Allocator
351 >
352 void
353 rb_tree_no_data_
354 <
355 Key,
356 Mapped,
357 Cmp_Fn,
358 Node_And_It_Traits, Allocator >::insert_fixup (node_pointer p_nd)
359 {
360{
361{
362{
363 rotate_right (p_nd);
364 }
365 }
366 }
367 }
368 template
369 <
370 typename,
371 typename, typename, typename, typename > struct container_base_dispatch;
372 template
373 <
374 typename
375 Key,
376 typename
377 Policy_Tl,
378 typename
379 Alloc
380 >
381 struct
382 container_base_dispatch
383 <Key, null_mapped_type, rb_tree_tag, Policy_Tl, Alloc >
384 {
385 typedef __gnu_cxx::typelist::at_index < Policy_Tl, 0 > at0;
386 typedef typename at0::type at0t;
387 typedef __gnu_cxx::typelist::at_index < Policy_Tl, 1 > at1;
388 typedef typename at1::type at1t;
389 typedef
390 rb_tree_no_data_ < Key, null_mapped_type, at0t, at1t, Alloc > type;
391 };
392 template
393 <
394 typename
395 Node_Pointer,
396 typename,
397 typename,
398 typename,
399 typename, typename, bool, class > class bin_search_tree_const_it_
400 {
401 public:
402 Node_Pointer m_p_nd;
403 };
404 template
405 <
406 typename
407 Node,
408 class
409 Const_Iterator,
410 class Iterator, class Allocator > class bin_search_tree_const_node_it_
411 {
412 typedef
413 typename
414 Allocator::template rebind < Node >::other::pointer node_pointer;
415 public:
416 typedef typename Node::metadata_type metadata_type;
417 typedef
418 typename
419 Allocator::template
420 rebind
421 < metadata_type >::other::const_reference const_metadata_reference;
422 bin_search_tree_const_node_it_ (node_pointer p_nd):
423 m_p_nd ((p_nd))
424 {}
425 const_metadata_reference get_metadata ()
426 {
427 return (m_p_nd->get_metadata ());
428 }
429 bin_search_tree_const_node_it_ ()
430 {}
431 bin_search_tree_const_node_it_
432 < Node, Const_Iterator, Iterator, Allocator > get_r_child ()
433 {
434 return ((m_p_nd->m_p_right));
435 }
436 bool operator == (bin_search_tree_const_node_it_)
437 {}
438 node_pointer m_p_nd;
439 };
440 template
441 <
442 typename,
443 typename,
444 class,
445 template
446 <
447 typename,
448 class,
449 class, class > class, class, class > struct bin_search_tree_traits;
450 template
451 <
452 typename
453 Key,
454 class
455 Cmp_Fn,
456 template
457 <
458 typename,
459 class,
460 class,
461 class
462 >
463 class
464 Node_Update,
465 class
466 Node,
467 class
468 Allocator
469 >
470 struct
471 bin_search_tree_traits
472 <Key, null_mapped_type, Cmp_Fn, Node_Update, Node, Allocator >
473 {
474 typedef
475 types_traits < Key, null_mapped_type, Allocator, false > type_traits;
476 typedef Node node;
477 typedef
478 bin_search_tree_const_it_
479 <
480 typename
481 Allocator::template
482 rebind
483 <
484 node
485 >::other::pointer,
486 typename
487 type_traits::value_type,
488 typename
489 type_traits::pointer,
490 typename
491 type_traits::const_pointer,
492 typename
493 type_traits::reference,
494 typename
495 type_traits::const_reference, true, Allocator > const_point_iterator;
496 typedef const_point_iterator point_iterator;
497 typedef
498 bin_search_tree_const_node_it_
499 <
500 Node,
501 const_point_iterator, point_iterator, Allocator > const_node_iterator;
502 typedef const_node_iterator node_iterator;
503 typedef
504 Node_Update
505 < const_node_iterator, node_iterator, Cmp_Fn, Allocator > node_update;
506 };
507 template < typename Node_Update, bool > struct tree_metadata_helper
508 {
509 typedef typename Node_Update::metadata_type type;
510 };
511 template
512 <
513 typename
514 Key,
515 typename
516 Data,
517 class
518 Cmp_Fn,
519 template
520 <
521 typename,
522 class,
523 class,
524 class
525 >
526 class Node_Update, class Allocator > struct tree_node_metadata_selector
527 {
528 typedef
529 dumconst_node_iterator < Key, Data, Allocator > dumconst_node_it;
530 enum
531 {
532 null_update = is_same < Node_Update < dumconst_node_it,
533 dumconst_node_it,
534 Cmp_Fn,
535 Allocator >,
536 null_tree_node_update < dumconst_node_it,
537 dumconst_node_it,
538 Cmp_Fn,
539 Allocator > >::value
540 };
541 typedef
542 typename
543 tree_metadata_helper
544 <
545 Node_Update
546 <
547 dumconst_node_it,
548 dumconst_node_it, Cmp_Fn, Allocator >, null_update >::type type;
549 };
550 template
551 <
552 typename,
553 typename,
554 class,
555 template
556 <
557 typename,
558 class, class, class > class, class, class > struct tree_traits;
559 template < typename Value_Type, class Metadata, class Allocator > struct rb_tree_node_
560 {
561 typedef Metadata metadata_type;
562 typedef
563 typename
564 Allocator::template
565 rebind
566 <
567 rb_tree_node_
568 < Value_Type, Metadata, Allocator > >::other::pointer node_pointer;
569 typedef
570 typename
571 Allocator::template
572 rebind < metadata_type >::other::reference metadata_reference;
573 metadata_reference get_metadata ()
574 {
575 return m_metadata;
576 }
577 node_pointer m_p_right;
578 node_pointer m_p_parent;
579 metadata_type m_metadata;
580 };
581 template
582 <
583 typename
584 Key,
585 typename
586 Mapped,
587 typename
588 Cmp_Fn,
589 template
590 <
591 typename,
592 class,
593 class,
594 class
595 >
596 class
597 Node_Update,
598 typename
599 Allocator
600 >
601 struct
602 tree_traits
603 <Key,
604 Mapped,
605 Cmp_Fn,
606 Node_Update,
607 rb_tree_tag,
608 Allocator
609 >:bin_search_tree_traits
610 <
611 Key,
612 Mapped,
613 Cmp_Fn,
614 Node_Update,
615 rb_tree_node_
616 <
617 typename
618 types_traits
619 <
620 Key,
621 Mapped,
622 Allocator,
623 false
624 >::value_type,
625 typename
626 tree_node_metadata_selector
627 <
628 Key,
629 Mapped, Cmp_Fn, Node_Update, Allocator >::type, Allocator >, Allocator >
630 {};
631 }
632template < typename Key, typename Mapped, typename Tag, typename Policy_Tl, typename Allocator > class container_base:
633 public
634 detail::container_base_dispatch
635 < Key, Mapped, Tag, Policy_Tl, Allocator >::type
636 {};
637template < typename Key, typename Mapped, typename Tag, typename, typename Policy_Tl, typename Allocator > class basic_tree:
638 public
639 container_base < Key, Mapped, Tag, Policy_Tl, Allocator >
640 {};
641 template
642 <
643 typename
644 Key,
645 typename
646 Mapped,
647 typename
648 Cmp_Fn
649 =
650 std::less
651 <
652 Key
653 >,
654 typename
655 Tag
656 =
657 rb_tree_tag,
658 template
659 <
660 typename,
661 typename,
662 typename,
663 typename
664 >
665 class
666 Node_Update
667 =
668 null_tree_node_update,
669 typename
670 Allocator
671 =
672 std::allocator
673 <
674 char
675 > >class
676 tree:public
677 basic_tree
678 <
679 Key,
680 Mapped,
681 Tag,
682 detail::tree_traits
683 <
684 Key,
685 Mapped,
686 Cmp_Fn,
687 Node_Update,
688 Tag,
689 Allocator
690 >,
691 typename
692 __gnu_cxx::typelist::create2
693 <
694 Cmp_Fn,
695 detail::tree_traits
696 < Key, Mapped, Cmp_Fn, Node_Update, Tag, Allocator > >::type, Allocator >
697 {};
698}
699using namespace std;
700using namespace __gnu_pbds;
701typedef
702 tree
703 <
704 int,
705 null_mapped_type,
706 less < int >, rb_tree_tag, tree_order_statistics_node_update > set_t;
707main ()
708{
709 set_t s;
710 s.insert (12);
711}
0712
=== added file 'gcc/testsuite/g++.dg/opt/pr47639.c'
--- gcc/testsuite/g++.dg/opt/pr47639.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/opt/pr47639.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,17 @@
1// { dg-do compile }
2// { dg-options "-fnon-call-exceptions" }
3
4typedef int __attribute__ ((vector_size (8))) vec;
5
6vec foo (vec v1, vec v2)
7{
8 try
9 {
10 return v1 / v2;
11 }
12 catch (...)
13 {
14 throw;
15 }
16}
17
018
=== added file 'gcc/testsuite/g++.dg/template/anon5.C'
--- gcc/testsuite/g++.dg/template/anon5.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/anon5.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,6 @@
1// PR c++/45651
2
3namespace { template <int T> struct A {}; }
4template <int T> struct B { void f(A<T>); };
5template struct B<1>;
6template<int T> void B<T>::f(A<T>) {}
07
=== added file 'gcc/testsuite/g++.dg/template/array22.C'
--- gcc/testsuite/g++.dg/template/array22.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/array22.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,14 @@
1// PR c++/48029
2
3template <class T> struct A { };
4template <class T, class U> struct B
5{
6 struct N { };
7 typedef U u;
8};
9
10typedef B<int, A<int>(*)[2]> btype;
11A<int> v1[2];
12btype v2;
13
14
015
=== added file 'gcc/testsuite/g++.dg/template/error45.C'
--- gcc/testsuite/g++.dg/template/error45.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/error45.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,22 @@
1// PR c++/47125
2
3template < bool, typename >
4struct enable_if {};
5
6template < typename T >
7struct enable_if< true, T >
8{
9 typedef T type;
10};
11
12template < typename T >
13struct enable_if< true, T >::type
14f( T x );
15
16void
17g( void )
18{
19 f< int >( 0 ); // { dg-error "no match" }
20}
21
22// { dg-prune-output "note" }
023
=== added file 'gcc/testsuite/g++.dg/template/nontype21.C'
--- gcc/testsuite/g++.dg/template/nontype21.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/nontype21.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,7 @@
1// PR c++/47705
2
3template<char const * const x> class Something { };
4
5extern char const xyz;
6
7class SomethingElse:public Something<xyz> { }; // { dg-error "xyz. is a variable" }
08
=== added file 'gcc/testsuite/g++.dg/template/nontype22.C'
--- gcc/testsuite/g++.dg/template/nontype22.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/nontype22.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,11 @@
1// PR c++/44629
2// The proper mangling is unclear.
3
4template<typename T> int cmp1(T a, T b);
5template<typename T, int (*cmp)(T, T) = cmp1> struct A { };
6template <typename T> void f (A<T> &); // { dg-bogus "" "" { xfail *-*-* } }
7void g()
8{
9 A<char> a;
10 f(a);
11}
012
=== added file 'gcc/testsuite/g++.dg/template/this-targ1.C'
--- gcc/testsuite/g++.dg/template/this-targ1.C 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/g++.dg/template/this-targ1.C 2011-04-06 13:16:33 +0000
@@ -0,0 +1,23 @@
1// PR c++/47904
2
3template <bool>
4struct S
5{
6};
7
8template <class T>
9class U
10{
11 T t;
12 int foo () const
13 {
14 S <sizeof (t) == 1> s;
15 return 1;
16 }
17 int bar () const
18 {
19 S <sizeof (t) == 1> s;
20 return 1;
21 }
22};
23
024
=== added file 'gcc/testsuite/gcc.c-torture/execute/postmod-1.c'
--- gcc/testsuite/gcc.c-torture/execute/postmod-1.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.c-torture/execute/postmod-1.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,62 @@
1#define DECLARE_ARRAY(A) array##A[0x10]
2#define DECLARE_COUNTER(A) counter##A = 0
3#define DECLARE_POINTER(A) *pointer##A = array##A + x
4/* Create a loop that allows post-modification of pointerA, followed by
5 a use of the post-modified address. */
6#define BEFORE(A) counter##A += *pointer##A, pointer##A += 3
7#define AFTER(A) counter##A += pointer##A[x]
8
9/* Set up the arrays so that one iteration of the loop sets the counter
10 to 3.0f. */
11#define INIT_ARRAY(A) array##A[1] = 1.0f, array##A[5] = 2.0f
12
13/* Check that the loop worked correctly for all values. */
14#define CHECK_ARRAY(A) exit_code |= (counter##A != 3.0f)
15
16/* Having 6 copies triggered the bug for ARM and Thumb. */
17#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
18
19/* Each addendA should be allocated a register. */
20#define INIT_VOLATILE(A) addend##A = vol
21#define ADD_VOLATILE(A) vol += addend##A
22
23/* Having 5 copies triggered the bug for ARM and Thumb. */
24#define MANY2(A) A (0), A (1), A (2), A (3), A (4)
25
26float MANY (DECLARE_ARRAY);
27float MANY (DECLARE_COUNTER);
28
29volatile int stop = 1;
30volatile int vol;
31
32void __attribute__((noinline))
33foo (int x)
34{
35 float MANY (DECLARE_POINTER);
36 int i;
37
38 do
39 {
40 MANY (BEFORE);
41 MANY (AFTER);
42 /* Create an inner loop that should ensure the code above
43 has registers free for reload inheritance. */
44 {
45 int MANY2 (INIT_VOLATILE);
46 for (i = 0; i < 10; i++)
47 MANY2 (ADD_VOLATILE);
48 }
49 }
50 while (!stop);
51}
52
53int
54main (void)
55{
56 int exit_code = 0;
57
58 MANY (INIT_ARRAY);
59 foo (1);
60 MANY (CHECK_ARRAY);
61 return exit_code;
62}
063
=== removed file 'gcc/testsuite/gcc.c-torture/execute/postmod-1.c'
--- gcc/testsuite/gcc.c-torture/execute/postmod-1.c 2011-02-02 14:23:10 +0000
+++ gcc/testsuite/gcc.c-torture/execute/postmod-1.c 1970-01-01 00:00:00 +0000
@@ -1,62 +0,0 @@
1#define DECLARE_ARRAY(A) array##A[0x10]
2#define DECLARE_COUNTER(A) counter##A = 0
3#define DECLARE_POINTER(A) *pointer##A = array##A + x
4/* Create a loop that allows post-modification of pointerA, followed by
5 a use of the post-modified address. */
6#define BEFORE(A) counter##A += *pointer##A, pointer##A += 3
7#define AFTER(A) counter##A += pointer##A[x]
8
9/* Set up the arrays so that one iteration of the loop sets the counter
10 to 3.0f. */
11#define INIT_ARRAY(A) array##A[1] = 1.0f, array##A[5] = 2.0f
12
13/* Check that the loop worked correctly for all values. */
14#define CHECK_ARRAY(A) exit_code |= (counter##A != 3.0f)
15
16/* Having 6 copies triggered the bug for ARM and Thumb. */
17#define MANY(A) A (0), A (1), A (2), A (3), A (4), A (5)
18
19/* Each addendA should be allocated a register. */
20#define INIT_VOLATILE(A) addend##A = vol
21#define ADD_VOLATILE(A) vol += addend##A
22
23/* Having 5 copies triggered the bug for ARM and Thumb. */
24#define MANY2(A) A (0), A (1), A (2), A (3), A (4)
25
26float MANY (DECLARE_ARRAY);
27float MANY (DECLARE_COUNTER);
28
29volatile int stop = 1;
30volatile int vol;
31
32void __attribute__((noinline))
33foo (int x)
34{
35 float MANY (DECLARE_POINTER);
36 int i;
37
38 do
39 {
40 MANY (BEFORE);
41 MANY (AFTER);
42 /* Create an inner loop that should ensure the code above
43 has registers free for reload inheritance. */
44 {
45 int MANY2 (INIT_VOLATILE);
46 for (i = 0; i < 10; i++)
47 MANY2 (ADD_VOLATILE);
48 }
49 }
50 while (!stop);
51}
52
53int
54main (void)
55{
56 int exit_code = 0;
57
58 MANY (INIT_ARRAY);
59 foo (1);
60 MANY (CHECK_ARRAY);
61 return exit_code;
62}
630
=== modified file 'gcc/testsuite/gcc.dg/torture/20090618-1.c'
--- gcc/testsuite/gcc.dg/torture/20090618-1.c 2009-09-30 02:01:30 +0000
+++ gcc/testsuite/gcc.dg/torture/20090618-1.c 2011-04-06 13:16:33 +0000
@@ -1,5 +1,6 @@
1/* { dg-do run } */1/* { dg-do run } */
2/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */2/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */
3/* { dg-skip-if "PR middle-end/47405" { mips-sgi-irix* } } */
34
4extern void abort (void);5extern void abort (void);
56
67
=== modified file 'gcc/testsuite/gcc.dg/torture/pr39074-2.c'
--- gcc/testsuite/gcc.dg/torture/pr39074-2.c 2010-10-13 11:33:51 +0000
+++ gcc/testsuite/gcc.dg/torture/pr39074-2.c 2011-04-06 13:16:33 +0000
@@ -30,5 +30,5 @@
30 return 0;30 return 0;
31}31}
3232
33/* { dg-final { scan-tree-dump "y.._., points-to non-local, points-to escaped, points-to vars: { i }" "alias" } } */33/* { dg-final { scan-tree-dump "y.._., points-to vars: { i }" "alias" } } */
34/* { dg-final { cleanup-tree-dump "alias" } } */34/* { dg-final { cleanup-tree-dump "alias" } } */
3535
=== added file 'gcc/testsuite/gcc.dg/torture/pr45967-2.c'
--- gcc/testsuite/gcc.dg/torture/pr45967-2.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr45967-2.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,24 @@
1/* { dg-do run } */
2
3extern void abort (void);
4int b;
5void
6foo (void *p_, int *q)
7{
8 int *p;
9 int i;
10 for (i = 0; i < sizeof(int *); ++i)
11 ((char *)&p)[i] = ((char *)p_)[i];
12 if (b)
13 p = q;
14 *p = 1;
15}
16int main()
17{
18 int i = 0, j;
19 int *p = &i;
20 foo (&p, &j);
21 if (i != 1)
22 abort ();
23 return 0;
24}
025
=== added file 'gcc/testsuite/gcc.dg/torture/pr45967-3.c'
--- gcc/testsuite/gcc.dg/torture/pr45967-3.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr45967-3.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,21 @@
1/* { dg-do run } */
2
3extern void abort (void);
4void
5foo (void *p_)
6{
7 int *p;
8 int i;
9 for (i = 0; i < sizeof(int *); ++i)
10 ((char *)&p)[i] = ((char *)p_)[i];
11 *p = 1;
12}
13int main()
14{
15 int i = 0;
16 int *p = &i;
17 foo (&p);
18 if (i != 1)
19 abort ();
20 return 0;
21}
022
=== added file 'gcc/testsuite/gcc.dg/torture/pr45967.c'
--- gcc/testsuite/gcc.dg/torture/pr45967.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr45967.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,21 @@
1/* { dg-do run } */
2
3extern void abort (void);
4void __attribute__((noinline,noclone))
5foo (void *p_)
6{
7 int *p;
8 int i;
9 for (i = 0; i < sizeof(int *); ++i)
10 ((char *)&p)[i] = ((char *)p_)[i];
11 *p = 1;
12}
13int main()
14{
15 int i = 0;
16 int *p = &i;
17 foo (&p);
18 if (i != 1)
19 abort ();
20 return 0;
21}
022
=== added file 'gcc/testsuite/gcc.dg/torture/pr46723.c'
--- gcc/testsuite/gcc.dg/torture/pr46723.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr46723.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,10 @@
1/* { dg-do compile } */
2
3short *m;
4void test()
5{
6 short x = 128;
7 unsigned int i;
8 for (i = 0; i < 128; ++i, x = (unsigned short)x + 1)
9 m[i] = x;
10}
011
=== added file 'gcc/testsuite/gcc.dg/torture/pr47278-1.c'
--- gcc/testsuite/gcc.dg/torture/pr47278-1.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr47278-1.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,5 @@
1/* { dg-do run } */
2/* { dg-require-visibility "" } */
3/* { dg-additional-sources "pr47278-2.c" } */
4
5int foo (void) { return 1; }
06
=== added file 'gcc/testsuite/gcc.dg/torture/pr47278-2.c'
--- gcc/testsuite/gcc.dg/torture/pr47278-2.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr47278-2.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,15 @@
1/* { dg-require-visibility "" } */
2
3extern void abort (void);
4
5int __attribute__((weak,visibility("hidden"))) foo (void)
6{
7 return 0;
8}
9
10int main()
11{
12 if (foo() != 1)
13 abort ();
14 return 0;
15}
016
=== added file 'gcc/testsuite/gcc.dg/torture/pr47890.c'
--- gcc/testsuite/gcc.dg/torture/pr47890.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.dg/torture/pr47890.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,9 @@
1/* { dg-do compile } */
2
3void f(char *s)
4{
5 signed short i;
6
7 for (i = 0; i < 19; i = i + 1)
8 s[i] = i;
9}
010
=== modified file 'gcc/testsuite/gcc.dg/torture/pta-escape-1.c'
--- gcc/testsuite/gcc.dg/torture/pta-escape-1.c 2010-05-19 13:48:24 +0000
+++ gcc/testsuite/gcc.dg/torture/pta-escape-1.c 2011-04-06 13:16:33 +0000
@@ -30,5 +30,5 @@
30 return 0;30 return 0;
31}31}
3232
33/* { dg-final { scan-tree-dump "ESCAPED = { ESCAPED NONLOCAL i }" "alias" } } */33/* { dg-final { scan-tree-dump "ESCAPED = {\[^\n\}\]* i \[^\n\}\]*}" "alias" } } */
34/* { dg-final { cleanup-tree-dump "alias" } } */34/* { dg-final { cleanup-tree-dump "alias" } } */
3535
=== modified file 'gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c'
--- gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c 2008-07-07 14:48:23 +0000
+++ gcc/testsuite/gcc.dg/torture/pta-ptrarith-1.c 2011-04-06 13:16:33 +0000
@@ -29,5 +29,5 @@
29 return 0;29 return 0;
30}30}
3131
32/* { dg-final { scan-tree-dump "ESCAPED = { ESCAPED NONLOCAL f .* i }" "alias" } } */32/* { dg-final { scan-tree-dump "ESCAPED = {\[^\n\}\]* i f \[^\n\}\]*}" "alias" } } */
33/* { dg-final { cleanup-tree-dump "alias" } } */33/* { dg-final { cleanup-tree-dump "alias" } } */
3434
=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c'
--- gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c 2010-10-13 11:33:51 +0000
+++ gcc/testsuite/gcc.dg/tree-ssa/pta-callused.c 2011-04-06 13:16:33 +0000
@@ -22,6 +22,6 @@
22 return *foo (&q);22 return *foo (&q);
23}23}
2424
25/* { dg-final { scan-tree-dump "CALLUSED = { f.* i q }" "alias" } } */25/* { dg-final { scan-tree-dump "CALLUSED = { ESCAPED NONLOCAL f.* i q }" "alias" } } */
26/* { dg-final { cleanup-tree-dump "alias" } } */26/* { dg-final { cleanup-tree-dump "alias" } } */
2727
2828
=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c'
--- gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c 2010-05-19 13:48:24 +0000
+++ gcc/testsuite/gcc.dg/tree-ssa/pta-escape-1.c 2011-04-06 13:16:33 +0000
@@ -33,5 +33,5 @@
33 return 0;33 return 0;
34}34}
3535
36/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to vars: { x }" "alias" } } */36/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to NULL, points-to vars: { x }" "alias" } } */
37/* { dg-final { cleanup-tree-dump "alias" } } */37/* { dg-final { cleanup-tree-dump "alias" } } */
3838
=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c'
--- gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c 2010-05-19 13:48:24 +0000
+++ gcc/testsuite/gcc.dg/tree-ssa/pta-escape-2.c 2011-04-06 13:16:33 +0000
@@ -34,5 +34,5 @@
34 return 0;34 return 0;
35}35}
3636
37/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to vars: { x }" "alias" } } */37/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to NULL, points-to vars: { x }" "alias" } } */
38/* { dg-final { cleanup-tree-dump "alias" } } */38/* { dg-final { cleanup-tree-dump "alias" } } */
3939
=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c'
--- gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c 2010-05-19 13:48:24 +0000
+++ gcc/testsuite/gcc.dg/tree-ssa/pta-escape-3.c 2011-04-06 13:16:33 +0000
@@ -38,5 +38,5 @@
38 return 0;38 return 0;
39}39}
4040
41/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to vars: { x }" "alias" } } */41/* { dg-final { scan-tree-dump "ESCAPED, points-to non-local, points-to NULL, points-to vars: { x }" "alias" } } */
42/* { dg-final { cleanup-tree-dump "alias" } } */42/* { dg-final { cleanup-tree-dump "alias" } } */
4343
=== modified file 'gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c'
--- gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c 2008-10-04 13:19:48 +0000
+++ gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-21.c 2011-04-06 13:16:33 +0000
@@ -11,5 +11,5 @@
1111
12/* There should be only two loads left. */12/* There should be only two loads left. */
1313
14/* { dg-final { scan-tree-dump-times "= \\\*D" 2 "pre" } } */14/* { dg-final { scan-tree-dump-times "= \\\*D\[^\n;\]*;" 2 "pre" } } */
15/* { dg-final { cleanup-tree-dump "pre" } } */15/* { dg-final { cleanup-tree-dump "pre" } } */
1616
=== added file 'gcc/testsuite/gcc.target/arm/neon-vld-1.c'
--- gcc/testsuite/gcc.target/arm/neon-vld-1.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/arm/neon-vld-1.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,13 @@
1/* { dg-do compile } */
2/* { dg-require-effective-target arm_neon_ok } */
3/* { dg-options "-O1" } */
4/* { dg-add-options arm_neon } */
5
6#include <arm_neon.h>
7
8uint8x16_t
9foo (uint8_t *a, uint8x16_t b)
10{
11 vst1q_lane_u8 (a, b, 14);
12 return vld1q_lane_u8 (a + 0x100, b, 15);
13}
014
=== removed file 'gcc/testsuite/gcc.target/arm/neon-vld-1.c'
--- gcc/testsuite/gcc.target/arm/neon-vld-1.c 2011-02-02 13:57:54 +0000
+++ gcc/testsuite/gcc.target/arm/neon-vld-1.c 1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
1/* { dg-do compile } */
2/* { dg-require-effective-target arm_neon_ok } */
3/* { dg-options "-O1" } */
4/* { dg-add-options arm_neon } */
5
6#include <arm_neon.h>
7
8uint8x16_t
9foo (uint8_t *a, uint8x16_t b)
10{
11 vst1q_lane_u8 (a, b, 14);
12 return vld1q_lane_u8 (a + 0x100, b, 15);
13}
140
=== added file 'gcc/testsuite/gcc.target/powerpc/pr47862.c'
--- gcc/testsuite/gcc.target/powerpc/pr47862.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/powerpc/pr47862.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,19 @@
1/* { dg-do compile { target { powerpc*-*-* } } } */
2/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3/* { dg-require-effective-target powerpc_vsx_ok } */
4/* { dg-options "-O2 -mcpu=power7" } */
5/* { dg-final { scan-assembler-not "stfd" } } */
6
7/* PR 47862: Verify caller-save spill of vectors in FP regs do not use
8 legacy FP insns, which spill only half the vector. */
9extern vector double dd[15];
10
11vector double foo() {
12 vector double a,b,c,d,e,f,g,h,i,j,k,l,m,n;
13
14 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];
15 j=dd[10]; k=dd[11]; l=dd[12]; m=dd[13]; n=dd[14];
16 bar();
17 return (a+b+c+d+e+f+g+h+i+j+k+l+m+n);
18}
19
020
=== added file 'gcc/testsuite/gcc.target/powerpc/pr48192.c'
--- gcc/testsuite/gcc.target/powerpc/pr48192.c 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gcc.target/powerpc/pr48192.c 2011-04-06 13:16:33 +0000
@@ -0,0 +1,49 @@
1/* { dg-do compile } */
2/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3/* { dg-require-effective-target powerpc_vsx_ok } */
4/* { dg-options "-O3 -mcpu=power7 -std=gnu89" } */
5
6/* Make sure that the conditional macros vector, bool, and pixel are not
7 considered as being defined. */
8
9#ifdef bool
10#error "bool is considered defined"
11#endif
12
13#ifdef vector
14#error "vector is considered defined"
15#endif
16
17#ifdef pixel
18#error "pixel is condsidered defined"
19#endif
20
21#if defined(bool)
22#error "bool is considered defined"
23#endif
24
25#if defined(vector)
26#error "vector is considered defined"
27#endif
28
29#if defined(pixel)
30#error "pixel is condsidered defined"
31#endif
32
33#ifndef bool
34#else
35#error "bool is considered defined"
36#endif
37
38#ifndef vector
39#else
40#error "vector is considered defined"
41#endif
42
43#ifndef pixel
44#else
45#error "pixel is condsidered defined"
46#endif
47
48#define bool long double
49bool pixel = 0;
050
=== added file 'gcc/testsuite/gfortran.dg/array_constructor_36.f90'
--- gcc/testsuite/gfortran.dg/array_constructor_36.f90 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gfortran.dg/array_constructor_36.f90 2011-04-06 13:16:33 +0000
@@ -0,0 +1,21 @@
1! { dg-do run }
2! Test the fix for PR47348, in which the substring length
3! in the array constructor at line 19 would be missed and
4! the length of q used instead.
5!
6! Contributed by Thomas Koenig <tkoenig@netcologne.de>
7!
8program main
9 implicit none
10 character(len = *), parameter :: fmt='(2(A,"|"))'
11 character(len = *), parameter :: test='xyc|aec|'
12 integer :: i
13 character(len = 4) :: q
14 character(len = 8) :: buffer
15 q = 'xy'
16 i = 2
17 write (buffer, fmt) (/ trim(q), 'ae' /)//'c'
18 if (buffer .ne. test) Call abort
19 write (buffer, FMT) (/ q(1:i), 'ae' /)//'c'
20 if (buffer .ne. test) Call abort
21end program main
022
=== modified file 'gcc/testsuite/gfortran.dg/g77/cabs.f'
--- gcc/testsuite/gfortran.dg/g77/cabs.f 2005-12-17 15:41:15 +0000
+++ gcc/testsuite/gfortran.dg/g77/cabs.f 2011-04-06 13:16:33 +0000
@@ -1,4 +1,5 @@
1c { dg-do run { xfail mips-sgi-irix6* } } PR 162921c { dg-do run }
2c { dg-xfail-run-if "PR target/16292" { mips-sgi-irix6* } { -O0 } { -mabi=32 } }
2 program cabs_13 program cabs_1
3 complex z04 complex z0
4 real r05 real r0
56
=== added file 'gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90'
--- gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90 2011-04-06 13:16:33 +0000
@@ -0,0 +1,8 @@
1! { dg-do run }
2! PR 48066 - this used to segfault.
3program p
4 real(8) :: empty(0, 3), square(0)
5 logical :: lempty(0, 3), lsquare(0)
6 square = sum(empty * empty, 2)
7 lsquare = any(lempty .and. lempty, 2)
8end
09
=== added file 'gcc/testsuite/gfortran.dg/namelist_71.f90'
--- gcc/testsuite/gfortran.dg/namelist_71.f90 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gfortran.dg/namelist_71.f90 2011-04-06 13:16:33 +0000
@@ -0,0 +1,36 @@
1! { dg-do run }
2! PR47778 Reading array of structures from namelist
3! Test case derived from the reporters test case.
4program test_nml
5type field_descr
6 integer number
7end type
8type fsetup
9 type (field_descr), dimension(3) :: vel ! 3 velocity components
10 type (field_descr), dimension(3) :: scal ! 3 scalars
11end type
12type (fsetup) field_setup
13namelist /nl_setup/ field_setup
14field_setup%vel%number = 0
15field_setup%scal%number = 0
16! write(*,nml=nl_setup)
17open(10, status="scratch")
18write(10,'(a)') "&nl_setup"
19write(10,'(a)') " field_setup%vel(1)%number= 3,"
20write(10,'(a)') " field_setup%vel(2)%number= 9,"
21write(10,'(a)') " field_setup%vel(3)%number= 27,"
22write(10,'(a)') " field_setup%scal(1)%number= 2,"
23write(10,'(a)') " field_setup%scal(2)%number= 4,"
24write(10,'(a)') " field_setup%scal(3)%number= 8,"
25write(10,'(a)') "/"
26rewind(10)
27read(10,nml=nl_setup)
28if (field_setup%vel(1)%number .ne. 3) call abort
29if (field_setup%vel(2)%number .ne. 9) call abort
30if (field_setup%vel(3)%number .ne. 27) call abort
31if (field_setup%scal(1)%number .ne. 2) call abort
32if (field_setup%scal(2)%number .ne. 4) call abort
33if (field_setup%scal(3)%number .ne. 8) call abort
34!write(*,nml=nl_setup)
35end program test_nml
36
037
=== added file 'gcc/testsuite/gfortran.dg/pr47878.f90'
--- gcc/testsuite/gfortran.dg/pr47878.f90 1970-01-01 00:00:00 +0000
+++ gcc/testsuite/gfortran.dg/pr47878.f90 2011-04-06 13:16:33 +0000
@@ -0,0 +1,10 @@
1! PR fortran/47878
2! { dg-do run }
3 integer :: a(5)
4 open (99, recl = 40)
5 write (99, '(5i3)') 1, 2, 3
6 rewind (99)
7 read (99, '(5i3)') a
8 if (any (a.ne.(/1, 2, 3, 0, 0/))) call abort
9 close (99, status = 'delete')
10end
011
=== modified file 'gcc/tree-inline.c'
--- gcc/tree-inline.c 2010-10-04 00:50:43 +0000
+++ gcc/tree-inline.c 2011-04-06 13:16:33 +0000
@@ -3068,7 +3068,7 @@
3068 /* Don't auto-inline anything that might not be bound within3068 /* Don't auto-inline anything that might not be bound within
3069 this unit of translation. */3069 this unit of translation. */
3070 else if (!DECL_DECLARED_INLINE_P (fn)3070 else if (!DECL_DECLARED_INLINE_P (fn)
3071 && DECL_REPLACEABLE_P (fn))3071 && decl_replaceable_p (fn))
3072 inlinable = false;3072 inlinable = false;
30733073
3074 else if (!function_attribute_inlinable_p (fn))3074 else if (!function_attribute_inlinable_p (fn))
30753075
=== modified file 'gcc/tree-ssa-pre.c'
--- gcc/tree-ssa-pre.c 2011-01-21 14:05:00 +0000
+++ gcc/tree-ssa-pre.c 2011-04-06 13:16:33 +0000
@@ -4759,7 +4759,7 @@
4759 if (!do_fre)4759 if (!do_fre)
4760 loop_optimizer_init (LOOPS_NORMAL);4760 loop_optimizer_init (LOOPS_NORMAL);
47614761
4762 if (!run_scc_vn (do_fre))4762 if (!run_scc_vn (do_fre, do_fre ? VN_WALKREWRITE : VN_WALK))
4763 {4763 {
4764 if (!do_fre)4764 if (!do_fre)
4765 {4765 {
47664766
=== modified file 'gcc/tree-ssa-sccvn.c'
--- gcc/tree-ssa-sccvn.c 2011-02-22 11:38:56 +0000
+++ gcc/tree-ssa-sccvn.c 2011-04-06 13:16:33 +0000
@@ -989,6 +989,7 @@
989989
990static tree *last_vuse_ptr;990static tree *last_vuse_ptr;
991static vn_lookup_kind vn_walk_kind;991static vn_lookup_kind vn_walk_kind;
992static vn_lookup_kind default_vn_walk_kind;
992993
993/* Callback for walk_non_aliased_vuses. Adjusts the vn_reference_t VR_994/* Callback for walk_non_aliased_vuses. Adjusts the vn_reference_t VR_
994 with the current VUSE and performs the expression lookup. */995 with the current VUSE and performs the expression lookup. */
@@ -1987,14 +1988,15 @@
19871988
1988 last_vuse = gimple_vuse (stmt);1989 last_vuse = gimple_vuse (stmt);
1989 last_vuse_ptr = &last_vuse;1990 last_vuse_ptr = &last_vuse;
1990 result = vn_reference_lookup (op, gimple_vuse (stmt), VN_WALKREWRITE, NULL);1991 result = vn_reference_lookup (op, gimple_vuse (stmt),
1992 default_vn_walk_kind, NULL);
1991 last_vuse_ptr = NULL;1993 last_vuse_ptr = NULL;
19921994
1993 /* If we have a VCE, try looking up its operand as it might be stored in1995 /* If we have a VCE, try looking up its operand as it might be stored in
1994 a different type. */1996 a different type. */
1995 if (!result && TREE_CODE (op) == VIEW_CONVERT_EXPR)1997 if (!result && TREE_CODE (op) == VIEW_CONVERT_EXPR)
1996 result = vn_reference_lookup (TREE_OPERAND (op, 0), gimple_vuse (stmt),1998 result = vn_reference_lookup (TREE_OPERAND (op, 0), gimple_vuse (stmt),
1997 VN_WALKREWRITE, NULL);1999 default_vn_walk_kind, NULL);
19982000
1999 /* We handle type-punning through unions by value-numbering based2001 /* We handle type-punning through unions by value-numbering based
2000 on offset and size of the access. Be prepared to handle a2002 on offset and size of the access. Be prepared to handle a
@@ -3197,16 +3199,18 @@
3197}3199}
31983200
3199/* Do SCCVN. Returns true if it finished, false if we bailed out3201/* Do SCCVN. Returns true if it finished, false if we bailed out
3200 due to resource constraints. */3202 due to resource constraints. DEFAULT_VN_WALK_KIND_ specifies
3203 how we use the alias oracle walking during the VN process. */
32013204
3202bool3205bool
3203run_scc_vn (bool may_insert_arg)3206run_scc_vn (bool may_insert_arg, vn_lookup_kind default_vn_walk_kind_)
3204{3207{
3205 size_t i;3208 size_t i;
3206 tree param;3209 tree param;
3207 bool changed = true;3210 bool changed = true;
32083211
3209 may_insert = may_insert_arg;3212 may_insert = may_insert_arg;
3213 default_vn_walk_kind = default_vn_walk_kind_;
32103214
3211 init_scc_vn ();3215 init_scc_vn ();
3212 current_info = valid_info;3216 current_info = valid_info;
32133217
=== modified file 'gcc/tree-ssa-sccvn.h'
--- gcc/tree-ssa-sccvn.h 2011-01-21 14:05:00 +0000
+++ gcc/tree-ssa-sccvn.h 2011-04-06 13:16:33 +0000
@@ -163,11 +163,13 @@
163 unsigned needs_insertion : 1;163 unsigned needs_insertion : 1;
164} *vn_ssa_aux_t;164} *vn_ssa_aux_t;
165165
166typedef enum { VN_NOWALK, VN_WALK, VN_WALKREWRITE } vn_lookup_kind;
167
166/* Return the value numbering info for an SSA_NAME. */168/* Return the value numbering info for an SSA_NAME. */
167extern vn_ssa_aux_t VN_INFO (tree);169extern vn_ssa_aux_t VN_INFO (tree);
168extern vn_ssa_aux_t VN_INFO_GET (tree);170extern vn_ssa_aux_t VN_INFO_GET (tree);
169tree vn_get_expr_for (tree);171tree vn_get_expr_for (tree);
170bool run_scc_vn (bool);172bool run_scc_vn (bool, vn_lookup_kind);
171void free_scc_vn (void);173void free_scc_vn (void);
172tree vn_nary_op_lookup (tree, vn_nary_op_t *);174tree vn_nary_op_lookup (tree, vn_nary_op_t *);
173tree vn_nary_op_lookup_stmt (gimple, vn_nary_op_t *);175tree vn_nary_op_lookup_stmt (gimple, vn_nary_op_t *);
@@ -185,7 +187,6 @@
185void copy_reference_ops_from_call (gimple, VEC(vn_reference_op_s, heap) **);187void copy_reference_ops_from_call (gimple, VEC(vn_reference_op_s, heap) **);
186bool ao_ref_init_from_vn_reference (ao_ref *, alias_set_type, tree,188bool ao_ref_init_from_vn_reference (ao_ref *, alias_set_type, tree,
187 VEC (vn_reference_op_s, heap) *);189 VEC (vn_reference_op_s, heap) *);
188typedef enum { VN_NOWALK, VN_WALK, VN_WALKREWRITE } vn_lookup_kind;
189tree vn_reference_lookup_pieces (tree, alias_set_type, tree,190tree vn_reference_lookup_pieces (tree, alias_set_type, tree,
190 VEC (vn_reference_op_s, heap) *,191 VEC (vn_reference_op_s, heap) *,
191 vn_reference_t *, vn_lookup_kind);192 vn_reference_t *, vn_lookup_kind);
192193
=== modified file 'gcc/tree-ssa-structalias.c'
--- gcc/tree-ssa-structalias.c 2011-02-01 11:27:04 +0000
+++ gcc/tree-ssa-structalias.c 2011-04-06 13:16:33 +0000
@@ -2788,33 +2788,6 @@
2788 }2788 }
2789}2789}
27902790
2791/* Return true if T is a type that could contain pointers. */
2792
2793static bool
2794type_could_have_pointers (tree type)
2795{
2796 if (POINTER_TYPE_P (type))
2797 return true;
2798
2799 if (TREE_CODE (type) == ARRAY_TYPE)
2800 return type_could_have_pointers (TREE_TYPE (type));
2801
2802 return AGGREGATE_TYPE_P (type);
2803}
2804
2805/* Return true if T is a variable of a type that could contain
2806 pointers. */
2807
2808static bool
2809could_have_pointers (tree t)
2810{
2811 return (((TREE_CODE (t) == VAR_DECL
2812 || TREE_CODE (t) == PARM_DECL
2813 || TREE_CODE (t) == RESULT_DECL)
2814 && (TREE_PUBLIC (t) || DECL_EXTERNAL (t) || TREE_ADDRESSABLE (t)))
2815 || type_could_have_pointers (TREE_TYPE (t)));
2816}
2817
2818/* Return the position, in bits, of FIELD_DECL from the beginning of its2791/* Return the position, in bits, of FIELD_DECL from the beginning of its
2819 structure. */2792 structure. */
28202793
@@ -2826,7 +2799,7 @@
2826 || !host_integerp (DECL_FIELD_BIT_OFFSET (fdecl), 0))2799 || !host_integerp (DECL_FIELD_BIT_OFFSET (fdecl), 0))
2827 return -1;2800 return -1;
28282801
2829 return (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (fdecl)) * 82802 return (TREE_INT_CST_LOW (DECL_FIELD_OFFSET (fdecl)) * BITS_PER_UNIT
2830 + TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (fdecl)));2803 + TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (fdecl)));
2831}2804}
28322805
@@ -3167,14 +3140,18 @@
3167 in that case *NULL does not fail, so it _should_ alias *anything.3140 in that case *NULL does not fail, so it _should_ alias *anything.
3168 It is not worth adding a new option or renaming the existing one,3141 It is not worth adding a new option or renaming the existing one,
3169 since this case is relatively obscure. */3142 since this case is relatively obscure. */
3170 if (flag_delete_null_pointer_checks3143 if ((TREE_CODE (t) == INTEGER_CST
3171 && ((TREE_CODE (t) == INTEGER_CST3144 && integer_zerop (t))
3172 && integer_zerop (t))3145 /* The only valid CONSTRUCTORs in gimple with pointer typed
3173 /* The only valid CONSTRUCTORs in gimple with pointer typed3146 elements are zero-initializer. But in IPA mode we also
3174 elements are zero-initializer. */3147 process global initializers, so verify at least. */
3175 || TREE_CODE (t) == CONSTRUCTOR))3148 || (TREE_CODE (t) == CONSTRUCTOR
3149 && CONSTRUCTOR_NELTS (t) == 0))
3176 {3150 {
3177 temp.var = nothing_id;3151 if (flag_delete_null_pointer_checks)
3152 temp.var = nothing_id;
3153 else
3154 temp.var = nonlocal_id;
3178 temp.type = ADDRESSOF;3155 temp.type = ADDRESSOF;
3179 temp.offset = 0;3156 temp.offset = 0;
3180 VEC_safe_push (ce_s, heap, *results, &temp);3157 VEC_safe_push (ce_s, heap, *results, &temp);
@@ -3247,6 +3224,15 @@
3247 get_constraint_for_ssa_var (t, results, address_p);3224 get_constraint_for_ssa_var (t, results, address_p);
3248 return;3225 return;
3249 }3226 }
3227 case tcc_constant:
3228 {
3229 /* We cannot refer to automatic variables through constants. */
3230 temp.type = ADDRESSOF;
3231 temp.var = nonlocal_id;
3232 temp.offset = 0;
3233 VEC_safe_push (ce_s, heap, *results, &temp);
3234 return;
3235 }
3250 default:;3236 default:;
3251 }3237 }
32523238
@@ -3502,8 +3488,7 @@
35023488
3503 /* Find those pointers being passed, and make sure they end up3489 /* Find those pointers being passed, and make sure they end up
3504 pointing to anything. */3490 pointing to anything. */
3505 if (could_have_pointers (arg))3491 make_escape_constraint (arg);
3506 make_escape_constraint (arg);
3507 }3492 }
35083493
3509 /* The static chain escapes as well. */3494 /* The static chain escapes as well. */
@@ -3603,17 +3588,13 @@
3603 for (k = 0; k < gimple_call_num_args (stmt); ++k)3588 for (k = 0; k < gimple_call_num_args (stmt); ++k)
3604 {3589 {
3605 tree arg = gimple_call_arg (stmt, k);3590 tree arg = gimple_call_arg (stmt, k);
36063591 VEC(ce_s, heap) *argc = NULL;
3607 if (could_have_pointers (arg))3592 unsigned i;
3608 {3593 struct constraint_expr *argp;
3609 VEC(ce_s, heap) *argc = NULL;3594 get_constraint_for_rhs (arg, &argc);
3610 unsigned i;3595 for (i = 0; VEC_iterate (ce_s, argc, i, argp); ++i)
3611 struct constraint_expr *argp;3596 VEC_safe_push (ce_s, heap, *results, argp);
3612 get_constraint_for_rhs (arg, &argc);3597 VEC_free(ce_s, heap, argc);
3613 for (i = 0; VEC_iterate (ce_s, argc, i, argp); ++i)
3614 VEC_safe_push (ce_s, heap, *results, argp);
3615 VEC_free(ce_s, heap, argc);
3616 }
3617 }3598 }
36183599
3619 /* May return addresses of globals. */3600 /* May return addresses of globals. */
@@ -3637,12 +3618,8 @@
3637 for (i = 0; i < gimple_call_num_args (stmt); ++i)3618 for (i = 0; i < gimple_call_num_args (stmt); ++i)
3638 {3619 {
3639 tree arg = gimple_call_arg (stmt, i);3620 tree arg = gimple_call_arg (stmt, i);
36403621 make_constraint_to (callused_id, arg);
3641 if (could_have_pointers (arg))3622 need_callused = true;
3642 {
3643 make_constraint_to (callused_id, arg);
3644 need_callused = true;
3645 }
3646 }3623 }
36473624
3648 /* The static chain is used as well. */3625 /* The static chain is used as well. */
@@ -3682,34 +3659,27 @@
3682 /* Now build constraints expressions. */3659 /* Now build constraints expressions. */
3683 if (gimple_code (t) == GIMPLE_PHI)3660 if (gimple_code (t) == GIMPLE_PHI)
3684 {3661 {
3685 gcc_assert (!AGGREGATE_TYPE_P (TREE_TYPE (gimple_phi_result (t))));3662 size_t i;
3663 unsigned int j;
36863664
3687 /* Only care about pointers and structures containing3665 /* For a phi node, assign all the arguments to
3688 pointers. */3666 the result. */
3689 if (could_have_pointers (gimple_phi_result (t)))3667 get_constraint_for (gimple_phi_result (t), &lhsc);
3668 for (i = 0; i < gimple_phi_num_args (t); i++)
3690 {3669 {
3691 size_t i;3670 tree strippedrhs = PHI_ARG_DEF (t, i);
3692 unsigned int j;3671
36933672 STRIP_NOPS (strippedrhs);
3694 /* For a phi node, assign all the arguments to3673 get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc);
3695 the result. */3674
3696 get_constraint_for (gimple_phi_result (t), &lhsc);3675 for (j = 0; VEC_iterate (ce_s, lhsc, j, c); j++)
3697 for (i = 0; i < gimple_phi_num_args (t); i++)
3698 {3676 {
3699 tree strippedrhs = PHI_ARG_DEF (t, i);3677 struct constraint_expr *c2;
37003678 while (VEC_length (ce_s, rhsc) > 0)
3701 STRIP_NOPS (strippedrhs);
3702 get_constraint_for_rhs (gimple_phi_arg_def (t, i), &rhsc);
3703
3704 for (j = 0; VEC_iterate (ce_s, lhsc, j, c); j++)
3705 {3679 {
3706 struct constraint_expr *c2;3680 c2 = VEC_last (ce_s, rhsc);
3707 while (VEC_length (ce_s, rhsc) > 0)3681 process_constraint (new_constraint (*c, *c2));
3708 {3682 VEC_pop (ce_s, rhsc);
3709 c2 = VEC_last (ce_s, rhsc);
3710 process_constraint (new_constraint (*c, *c2));
3711 VEC_pop (ce_s, rhsc);
3712 }
3713 }3683 }
3714 }3684 }
3715 }3685 }
@@ -3858,16 +3828,7 @@
3858 else3828 else
3859 handle_rhs_call (t, &rhsc);3829 handle_rhs_call (t, &rhsc);
3860 if (gimple_call_lhs (t))3830 if (gimple_call_lhs (t))
3861 {3831 handle_lhs_call (gimple_call_lhs (t), flags, rhsc, fndecl);
3862 if (could_have_pointers (gimple_call_lhs (t)))
3863 handle_lhs_call (gimple_call_lhs (t), flags, rhsc, fndecl);
3864 /* Similar to conversions a result that is not a pointer
3865 is an escape point for any pointer the function might
3866 return. */
3867 else if (flags & (ECF_CONST|ECF_PURE
3868 |ECF_NOVOPS|ECF_LOOPING_CONST_OR_PURE))
3869 make_constraints_to (escaped_id, rhsc);
3870 }
3871 VEC_free (ce_s, heap, rhsc);3832 VEC_free (ce_s, heap, rhsc);
3872 }3833 }
3873 else3834 else
@@ -3950,8 +3911,7 @@
3950 /* Otherwise, just a regular assignment statement. Only care about3911 /* Otherwise, just a regular assignment statement. Only care about
3951 operations with pointer result, others are dealt with as escape3912 operations with pointer result, others are dealt with as escape
3952 points if they have pointer operands. */3913 points if they have pointer operands. */
3953 else if (is_gimple_assign (t)3914 else if (is_gimple_assign (t))
3954 && type_could_have_pointers (TREE_TYPE (gimple_assign_lhs (t))))
3955 {3915 {
3956 /* Otherwise, just a regular assignment statement. */3916 /* Otherwise, just a regular assignment statement. */
3957 tree lhsop = gimple_assign_lhs (t);3917 tree lhsop = gimple_assign_lhs (t);
@@ -3961,23 +3921,45 @@
3961 do_structure_copy (lhsop, rhsop);3921 do_structure_copy (lhsop, rhsop);
3962 else3922 else
3963 {3923 {
3964 struct constraint_expr temp;3924 enum tree_code code = gimple_assign_rhs_code (t);
3925
3965 get_constraint_for (lhsop, &lhsc);3926 get_constraint_for (lhsop, &lhsc);
39663927
3967 if (gimple_assign_rhs_code (t) == POINTER_PLUS_EXPR)3928 if (code == POINTER_PLUS_EXPR)
3968 get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),3929 get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),
3969 gimple_assign_rhs2 (t), &rhsc);3930 gimple_assign_rhs2 (t), &rhsc);
3970 else if ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (t))3931 else if (code == BIT_AND_EXPR
3932 && TREE_CODE (gimple_assign_rhs2 (t)) == INTEGER_CST)
3933 {
3934 /* Aligning a pointer via a BIT_AND_EXPR is offsetting
3935 the pointer. Handle it by offsetting it by UNKNOWN. */
3936 get_constraint_for_ptr_offset (gimple_assign_rhs1 (t),
3937 NULL_TREE, &rhsc);
3938 }
3939 else if ((CONVERT_EXPR_CODE_P (code)
3971 && !(POINTER_TYPE_P (gimple_expr_type (t))3940 && !(POINTER_TYPE_P (gimple_expr_type (t))
3972 && !POINTER_TYPE_P (TREE_TYPE (rhsop))))3941 && !POINTER_TYPE_P (TREE_TYPE (rhsop))))
3973 || gimple_assign_single_p (t))3942 || gimple_assign_single_p (t))
3974 get_constraint_for_rhs (rhsop, &rhsc);3943 get_constraint_for_rhs (rhsop, &rhsc);
3944 else if (truth_value_p (code))
3945 /* Truth value results are not pointer (parts). Or at least
3946 very very unreasonable obfuscation of a part. */
3947 ;
3975 else3948 else
3976 {3949 {
3977 temp.type = ADDRESSOF;3950 /* All other operations are merges. */
3978 temp.var = anything_id;3951 VEC (ce_s, heap) *tmp = NULL;
3979 temp.offset = 0;3952 struct constraint_expr *rhsp;
3980 VEC_safe_push (ce_s, heap, rhsc, &temp);3953 unsigned i, j;
3954 get_constraint_for_rhs (gimple_assign_rhs1 (t), &rhsc);
3955 for (i = 2; i < gimple_num_ops (t); ++i)
3956 {
3957 get_constraint_for_rhs (gimple_op (t, i), &tmp);
3958 for (j = 0; VEC_iterate (ce_s, tmp, j, rhsp); ++j)
3959 VEC_safe_push (ce_s, heap, rhsc, rhsp);
3960 VEC_truncate (ce_s, tmp, 0);
3961 }
3962 VEC_free (ce_s, heap, tmp);
3981 }3963 }
3982 process_all_all_constraints (lhsc, rhsc);3964 process_all_all_constraints (lhsc, rhsc);
3983 }3965 }
@@ -3996,17 +3978,9 @@
3996 make_constraint_from_restrict (get_vi_for_tree (lhsop),3978 make_constraint_from_restrict (get_vi_for_tree (lhsop),
3997 "CAST_RESTRICT");3979 "CAST_RESTRICT");
3998 }3980 }
3999 /* For conversions of pointers to non-pointers the pointer escapes. */
4000 else if (gimple_assign_cast_p (t)
4001 && POINTER_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (t)))
4002 && !POINTER_TYPE_P (TREE_TYPE (gimple_assign_lhs (t))))
4003 {
4004 make_escape_constraint (gimple_assign_rhs1 (t));
4005 }
4006 /* Handle escapes through return. */3981 /* Handle escapes through return. */
4007 else if (gimple_code (t) == GIMPLE_RETURN3982 else if (gimple_code (t) == GIMPLE_RETURN
4008 && gimple_return_retval (t) != NULL_TREE3983 && gimple_return_retval (t) != NULL_TREE)
4009 && could_have_pointers (gimple_return_retval (t)))
4010 {3984 {
4011 make_escape_constraint (gimple_return_retval (t));3985 make_escape_constraint (gimple_return_retval (t));
4012 }3986 }
@@ -4037,7 +4011,7 @@
40374011
4038 /* The asm may read global memory, so outputs may point to4012 /* The asm may read global memory, so outputs may point to
4039 any global memory. */4013 any global memory. */
4040 if (op && could_have_pointers (op))4014 if (op)
4041 {4015 {
4042 VEC(ce_s, heap) *lhsc = NULL;4016 VEC(ce_s, heap) *lhsc = NULL;
4043 struct constraint_expr rhsc, *lhsp;4017 struct constraint_expr rhsc, *lhsp;
@@ -4067,7 +4041,7 @@
4067 /* Strictly we'd only need the constraint to ESCAPED if4041 /* Strictly we'd only need the constraint to ESCAPED if
4068 the asm clobbers memory, otherwise using CALLUSED4042 the asm clobbers memory, otherwise using CALLUSED
4069 would be enough. */4043 would be enough. */
4070 else if (op && could_have_pointers (op))4044 else if (op)
4071 make_escape_constraint (op);4045 make_escape_constraint (op);
4072 }4046 }
4073 }4047 }
@@ -4192,6 +4166,8 @@
41924166
4193 unsigned has_unknown_size : 1;4167 unsigned has_unknown_size : 1;
41944168
4169 unsigned must_have_pointers : 1;
4170
4195 unsigned may_have_pointers : 1;4171 unsigned may_have_pointers : 1;
41964172
4197 unsigned only_restrict_pointers : 1;4173 unsigned only_restrict_pointers : 1;
@@ -4256,6 +4232,33 @@
4256 return false;4232 return false;
4257}4233}
42584234
4235/* Return true if T is a type that does contain pointers. */
4236
4237static bool
4238type_must_have_pointers (tree type)
4239{
4240 if (POINTER_TYPE_P (type))
4241 return true;
4242
4243 if (TREE_CODE (type) == ARRAY_TYPE)
4244 return type_must_have_pointers (TREE_TYPE (type));
4245
4246 /* A function or method can have pointers as arguments, so track
4247 those separately. */
4248 if (TREE_CODE (type) == FUNCTION_TYPE
4249 || TREE_CODE (type) == METHOD_TYPE)
4250 return true;
4251
4252 return false;
4253}
4254
4255static bool
4256field_must_have_pointers (tree t)
4257{
4258 return type_must_have_pointers (TREE_TYPE (t));
4259}
4260
4261
4259/* Given a TYPE, and a vector of field offsets FIELDSTACK, push all4262/* Given a TYPE, and a vector of field offsets FIELDSTACK, push all
4260 the fields of TYPE onto fieldstack, recording their offsets along4263 the fields of TYPE onto fieldstack, recording their offsets along
4261 the way.4264 the way.
@@ -4266,7 +4269,7 @@
42664269
4267static int4270static int
4268push_fields_onto_fieldstack (tree type, VEC(fieldoff_s,heap) **fieldstack,4271push_fields_onto_fieldstack (tree type, VEC(fieldoff_s,heap) **fieldstack,
4269 HOST_WIDE_INT offset, bool must_have_pointers_p)4272 HOST_WIDE_INT offset)
4270{4273{
4271 tree field;4274 tree field;
4272 int count = 0;4275 int count = 0;
@@ -4292,8 +4295,7 @@
4292 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)4295 || TREE_CODE (TREE_TYPE (field)) == UNION_TYPE)
4293 push = true;4296 push = true;
4294 else if (!(pushed = push_fields_onto_fieldstack4297 else if (!(pushed = push_fields_onto_fieldstack
4295 (TREE_TYPE (field), fieldstack, offset + foff,4298 (TREE_TYPE (field), fieldstack, offset + foff))
4296 must_have_pointers_p))
4297 && (DECL_SIZE (field)4299 && (DECL_SIZE (field)
4298 && !integer_zerop (DECL_SIZE (field))))4300 && !integer_zerop (DECL_SIZE (field))))
4299 /* Empty structures may have actual size, like in C++. So4301 /* Empty structures may have actual size, like in C++. So
@@ -4305,6 +4307,7 @@
4305 {4307 {
4306 fieldoff_s *pair = NULL;4308 fieldoff_s *pair = NULL;
4307 bool has_unknown_size = false;4309 bool has_unknown_size = false;
4310 bool must_have_pointers_p;
43084311
4309 if (!VEC_empty (fieldoff_s, *fieldstack))4312 if (!VEC_empty (fieldoff_s, *fieldstack))
4310 pair = VEC_last (fieldoff_s, *fieldstack);4313 pair = VEC_last (fieldoff_s, *fieldstack);
@@ -4325,15 +4328,14 @@
4325 has_unknown_size = true;4328 has_unknown_size = true;
43264329
4327 /* If adjacent fields do not contain pointers merge them. */4330 /* If adjacent fields do not contain pointers merge them. */
4331 must_have_pointers_p = field_must_have_pointers (field);
4328 if (pair4332 if (pair
4329 && !pair->may_have_pointers
4330 && !pair->has_unknown_size
4331 && !has_unknown_size4333 && !has_unknown_size
4332 && pair->offset + (HOST_WIDE_INT)pair->size == offset + foff
4333 && !must_have_pointers_p4334 && !must_have_pointers_p
4334 && !could_have_pointers (field))4335 && !pair->must_have_pointers
4336 && !pair->has_unknown_size
4337 && pair->offset + (HOST_WIDE_INT)pair->size == offset + foff)
4335 {4338 {
4336 pair = VEC_last (fieldoff_s, *fieldstack);
4337 pair->size += TREE_INT_CST_LOW (DECL_SIZE (field));4339 pair->size += TREE_INT_CST_LOW (DECL_SIZE (field));
4338 }4340 }
4339 else4341 else
@@ -4345,8 +4347,8 @@
4345 pair->size = TREE_INT_CST_LOW (DECL_SIZE (field));4347 pair->size = TREE_INT_CST_LOW (DECL_SIZE (field));
4346 else4348 else
4347 pair->size = -1;4349 pair->size = -1;
4348 pair->may_have_pointers4350 pair->must_have_pointers = must_have_pointers_p;
4349 = must_have_pointers_p || could_have_pointers (field);4351 pair->may_have_pointers = true;
4350 pair->only_restrict_pointers4352 pair->only_restrict_pointers
4351 = (!has_unknown_size4353 = (!has_unknown_size
4352 && POINTER_TYPE_P (TREE_TYPE (field))4354 && POINTER_TYPE_P (TREE_TYPE (field))
@@ -4512,17 +4514,14 @@
4512 VEC (fieldoff_s,heap) *fieldstack = NULL;4514 VEC (fieldoff_s,heap) *fieldstack = NULL;
45134515
4514 if (var_can_have_subvars (decl) && use_field_sensitive)4516 if (var_can_have_subvars (decl) && use_field_sensitive)
4515 push_fields_onto_fieldstack (decl_type, &fieldstack, 0,4517 push_fields_onto_fieldstack (decl_type, &fieldstack, 0);
4516 TREE_PUBLIC (decl)
4517 || DECL_EXTERNAL (decl)
4518 || TREE_ADDRESSABLE (decl));
45194518
4520 /* If the variable doesn't have subvars, we may end up needing to4519 /* If the variable doesn't have subvars, we may end up needing to
4521 sort the field list and create fake variables for all the4520 sort the field list and create fake variables for all the
4522 fields. */4521 fields. */
4523 vi = new_var_info (decl, name);4522 vi = new_var_info (decl, name);
4524 vi->offset = 0;4523 vi->offset = 0;
4525 vi->may_have_pointers = could_have_pointers (decl);4524 vi->may_have_pointers = true;
4526 if (!declsize4525 if (!declsize
4527 || !host_integerp (declsize, 1))4526 || !host_integerp (declsize, 1))
4528 {4527 {
@@ -4695,9 +4694,6 @@
4695 {4694 {
4696 varinfo_t p;4695 varinfo_t p;
46974696
4698 if (!could_have_pointers (t))
4699 continue;
4700
4701 /* For restrict qualified pointers to objects passed by4697 /* For restrict qualified pointers to objects passed by
4702 reference build a real representative for the pointed-to object. */4698 reference build a real representative for the pointed-to object. */
4703 if (DECL_BY_REFERENCE (t)4699 if (DECL_BY_REFERENCE (t)
47044700
=== modified file 'gcc/tree-vect-generic.c'
--- gcc/tree-vect-generic.c 2009-11-25 10:55:54 +0000
+++ gcc/tree-vect-generic.c 2011-04-06 13:16:33 +0000
@@ -518,8 +518,7 @@
518 way to do it is change expand_vector_operation and its callees to518 way to do it is change expand_vector_operation and its callees to
519 return a tree_code, RHS1 and RHS2 instead of a tree. */519 return a tree_code, RHS1 and RHS2 instead of a tree. */
520 gimple_assign_set_rhs_from_tree (gsi, new_rhs);520 gimple_assign_set_rhs_from_tree (gsi, new_rhs);
521521 update_stmt (gsi_stmt (*gsi));
522 gimple_set_modified (gsi_stmt (*gsi), true);
523}522}
524523
525524
526/* Use this to lower vector operations introduced by the vectorizer,525/* Use this to lower vector operations introduced by the vectorizer,
@@ -536,16 +535,24 @@
536{535{
537 gimple_stmt_iterator gsi;536 gimple_stmt_iterator gsi;
538 basic_block bb;537 basic_block bb;
538 bool cfg_changed = false;
539539
540 FOR_EACH_BB (bb)540 FOR_EACH_BB (bb)
541 {541 {
542 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))542 for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
543 {543 {
544 expand_vector_operations_1 (&gsi);544 expand_vector_operations_1 (&gsi);
545 update_stmt_if_modified (gsi_stmt (gsi));545 /* ??? If we do not cleanup EH then we will ICE in
546 verification. But in reality we have created wrong-code
547 as we did not properly transition EH info and edges to
548 the piecewise computations. */
549 if (maybe_clean_eh_stmt (gsi_stmt (gsi))
550 && gimple_purge_dead_eh_edges (bb))
551 cfg_changed = true;
546 }552 }
547 }553 }
548 return 0;554
555 return cfg_changed ? TODO_cleanup_cfg : 0;
549}556}
550557
551struct gimple_opt_pass pass_lower_vector =558struct gimple_opt_pass pass_lower_vector =
552559
=== modified file 'gcc/tree-vect-loop.c'
--- gcc/tree-vect-loop.c 2010-06-14 12:43:24 +0000
+++ gcc/tree-vect-loop.c 2011-04-06 13:16:33 +0000
@@ -2363,7 +2363,7 @@
2363 stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);2363 stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
2364 loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);2364 loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
2365 struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);2365 struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
2366 tree scalar_type = TREE_TYPE (gimple_phi_result (iv_phi));2366 tree scalar_type;
2367 tree vectype;2367 tree vectype;
2368 int nunits;2368 int nunits;
2369 edge pe = loop_preheader_edge (loop);2369 edge pe = loop_preheader_edge (loop);
@@ -2392,24 +2392,7 @@
2392 gimple_stmt_iterator si;2392 gimple_stmt_iterator si;
2393 basic_block bb = gimple_bb (iv_phi);2393 basic_block bb = gimple_bb (iv_phi);
2394 tree stepvectype;2394 tree stepvectype;
23952395 tree resvectype;
2396 vectype = get_vectype_for_scalar_type (scalar_type);
2397 gcc_assert (vectype);
2398 nunits = TYPE_VECTOR_SUBPARTS (vectype);
2399 ncopies = vf / nunits;
2400
2401 gcc_assert (phi_info);
2402 gcc_assert (ncopies >= 1);
2403
2404 /* Find the first insertion point in the BB. */
2405 si = gsi_after_labels (bb);
2406
2407 if (INTEGRAL_TYPE_P (scalar_type))
2408 step_expr = build_int_cst (scalar_type, 0);
2409 else if (POINTER_TYPE_P (scalar_type))
2410 step_expr = build_int_cst (sizetype, 0);
2411 else
2412 step_expr = build_real (scalar_type, dconst0);
24132396
2414 /* Is phi in an inner-loop, while vectorizing an enclosing outer-loop? */2397 /* Is phi in an inner-loop, while vectorizing an enclosing outer-loop? */
2415 if (nested_in_vect_loop_p (loop, iv_phi))2398 if (nested_in_vect_loop_p (loop, iv_phi))
@@ -2426,11 +2409,25 @@
24262409
2427 access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));2410 access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
2428 gcc_assert (access_fn);2411 gcc_assert (access_fn);
2412 STRIP_NOPS (access_fn);
2429 ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,2413 ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
2430 &init_expr, &step_expr);2414 &init_expr, &step_expr);
2431 gcc_assert (ok);2415 gcc_assert (ok);
2432 pe = loop_preheader_edge (iv_loop);2416 pe = loop_preheader_edge (iv_loop);
24332417
2418 scalar_type = TREE_TYPE (init_expr);
2419 vectype = get_vectype_for_scalar_type (scalar_type);
2420 resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
2421 gcc_assert (vectype);
2422 nunits = TYPE_VECTOR_SUBPARTS (vectype);
2423 ncopies = vf / nunits;
2424
2425 gcc_assert (phi_info);
2426 gcc_assert (ncopies >= 1);
2427
2428 /* Find the first insertion point in the BB. */
2429 si = gsi_after_labels (bb);
2430
2434 /* Create the vector that holds the initial_value of the induction. */2431 /* Create the vector that holds the initial_value of the induction. */
2435 if (nested_in_vect_loop)2432 if (nested_in_vect_loop)
2436 {2433 {
@@ -2456,7 +2453,7 @@
2456 }2453 }
24572454
2458 t = NULL_TREE;2455 t = NULL_TREE;
2459 t = tree_cons (NULL_TREE, init_expr, t);2456 t = tree_cons (NULL_TREE, new_name, t);
2460 for (i = 1; i < nunits; i++)2457 for (i = 1; i < nunits; i++)
2461 {2458 {
2462 /* Create: new_name_i = new_name + step_expr */2459 /* Create: new_name_i = new_name + step_expr */
@@ -2575,6 +2572,19 @@
2575 gimple_assign_set_lhs (new_stmt, vec_def);2572 gimple_assign_set_lhs (new_stmt, vec_def);
25762573
2577 gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);2574 gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);
2575 if (!useless_type_conversion_p (resvectype, vectype))
2576 {
2577 new_stmt = gimple_build_assign_with_ops
2578 (VIEW_CONVERT_EXPR,
2579 vect_get_new_vect_var (resvectype, vect_simple_var,
2580 "vec_iv_"),
2581 build1 (VIEW_CONVERT_EXPR, resvectype,
2582 gimple_assign_lhs (new_stmt)), NULL_TREE);
2583 gimple_assign_set_lhs (new_stmt,
2584 make_ssa_name
2585 (gimple_assign_lhs (new_stmt), new_stmt));
2586 gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);
2587 }
2578 set_vinfo_for_stmt (new_stmt,2588 set_vinfo_for_stmt (new_stmt,
2579 new_stmt_vec_info (new_stmt, loop_vinfo, NULL));2589 new_stmt_vec_info (new_stmt, loop_vinfo, NULL));
2580 STMT_VINFO_RELATED_STMT (prev_stmt_vinfo) = new_stmt;2590 STMT_VINFO_RELATED_STMT (prev_stmt_vinfo) = new_stmt;
@@ -2622,6 +2632,22 @@
2622 }2632 }
26232633
2624 STMT_VINFO_VEC_STMT (phi_info) = induction_phi;2634 STMT_VINFO_VEC_STMT (phi_info) = induction_phi;
2635 if (!useless_type_conversion_p (resvectype, vectype))
2636 {
2637 new_stmt = gimple_build_assign_with_ops
2638 (VIEW_CONVERT_EXPR,
2639 vect_get_new_vect_var (resvectype, vect_simple_var, "vec_iv_"),
2640 build1 (VIEW_CONVERT_EXPR, resvectype, induc_def), NULL_TREE);
2641 induc_def = make_ssa_name (gimple_assign_lhs (new_stmt), new_stmt);
2642 gimple_assign_set_lhs (new_stmt, induc_def);
2643 si = gsi_start_bb (bb);
2644 gsi_insert_before (&si, new_stmt, GSI_SAME_STMT);
2645 set_vinfo_for_stmt (new_stmt,
2646 new_stmt_vec_info (new_stmt, loop_vinfo, NULL));
2647 STMT_VINFO_RELATED_STMT (vinfo_for_stmt (new_stmt))
2648 = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (induction_phi));
2649 }
2650
2625 return induc_def;2651 return induc_def;
2626}2652}
26272653
26282654
=== modified file 'gcc/tree-vect-stmts.c'
--- gcc/tree-vect-stmts.c 2010-11-26 12:03:32 +0000
+++ gcc/tree-vect-stmts.c 2011-04-06 13:16:33 +0000
@@ -1014,8 +1014,10 @@
1014 /* Get the def from the vectorized stmt. */1014 /* Get the def from the vectorized stmt. */
1015 def_stmt_info = vinfo_for_stmt (def_stmt);1015 def_stmt_info = vinfo_for_stmt (def_stmt);
1016 vec_stmt = STMT_VINFO_VEC_STMT (def_stmt_info);1016 vec_stmt = STMT_VINFO_VEC_STMT (def_stmt_info);
1017 gcc_assert (vec_stmt && gimple_code (vec_stmt) == GIMPLE_PHI);1017 if (gimple_code (vec_stmt) == GIMPLE_PHI)
1018 vec_oprnd = PHI_RESULT (vec_stmt);1018 vec_oprnd = PHI_RESULT (vec_stmt);
1019 else
1020 vec_oprnd = gimple_get_lhs (vec_stmt);
1019 return vec_oprnd;1021 return vec_oprnd;
1020 }1022 }
10211023
@@ -2236,7 +2238,6 @@
2236 int op_type;2238 int op_type;
2237 optab optab;2239 optab optab;
2238 int icode;2240 int icode;
2239 enum machine_mode optab_op2_mode;
2240 tree def;2241 tree def;
2241 gimple def_stmt;2242 gimple def_stmt;
2242 enum vect_def_type dt[2] = {vect_unknown_def_type, vect_unknown_def_type};2243 enum vect_def_type dt[2] = {vect_unknown_def_type, vect_unknown_def_type};
@@ -2249,8 +2250,6 @@
2249 int j, i;2250 int j, i;
2250 VEC(tree,heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL;2251 VEC(tree,heap) *vec_oprnds0 = NULL, *vec_oprnds1 = NULL;
2251 tree vop0, vop1;2252 tree vop0, vop1;
2252 unsigned int k;
2253 bool scalar_shift_arg = false;
2254 bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);2253 bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
2255 int vf;2254 int vf;
22562255
22572256
=== modified file 'gcc/tree.c'
--- gcc/tree.c 2010-09-16 09:15:46 +0000
+++ gcc/tree.c 2011-04-06 13:16:33 +0000
@@ -5797,12 +5797,18 @@
5797 || TREE_TYPE (a->type) != TREE_TYPE (b->type)5797 || TREE_TYPE (a->type) != TREE_TYPE (b->type)
5798 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),5798 || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
5799 TYPE_ATTRIBUTES (b->type))5799 TYPE_ATTRIBUTES (b->type))
5800 || TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
5801 || TYPE_MODE (a->type) != TYPE_MODE (b->type)
5802 || (TREE_CODE (a->type) != COMPLEX_TYPE5800 || (TREE_CODE (a->type) != COMPLEX_TYPE
5803 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))5801 && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
5804 return 0;5802 return 0;
58055803
5804 /* Be careful about comparing arrays before and after the element type
5805 has been completed; don't compare TYPE_ALIGN unless both types are
5806 complete. */
5807 if (COMPLETE_TYPE_P (a->type) && COMPLETE_TYPE_P (b->type)
5808 && (TYPE_ALIGN (a->type) != TYPE_ALIGN (b->type)
5809 || TYPE_MODE (a->type) != TYPE_MODE (b->type)))
5810 return 0;
5811
5806 switch (TREE_CODE (a->type))5812 switch (TREE_CODE (a->type))
5807 {5813 {
5808 case VOID_TYPE:5814 case VOID_TYPE:
58095815
=== modified file 'gcc/tree.h'
--- gcc/tree.h 2010-11-26 12:03:32 +0000
+++ gcc/tree.h 2011-04-06 13:16:33 +0000
@@ -2913,26 +2913,6 @@
29132913
2914#define DECL_COMDAT_GROUP(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group)2914#define DECL_COMDAT_GROUP(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_group)
29152915
2916/* A replaceable function is one which may be replaced at link-time
2917 with an entirely different definition, provided that the
2918 replacement has the same type. For example, functions declared
2919 with __attribute__((weak)) on most systems are replaceable.
2920
2921 COMDAT functions are not replaceable, since all definitions of the
2922 function must be equivalent. It is important that COMDAT functions
2923 not be treated as replaceable so that use of C++ template
2924 instantiations is not penalized.
2925
2926 For example, DECL_REPLACEABLE is used to determine whether or not a
2927 function (including a template instantiation) which is not
2928 explicitly declared "inline" can be inlined. If the function is
2929 DECL_REPLACEABLE then it is not safe to do the inlining, since the
2930 implementation chosen at link-time may be different. However, a
2931 function that is not DECL_REPLACEABLE can be inlined, since all
2932 versions of the function will be functionally identical. */
2933#define DECL_REPLACEABLE_P(NODE) \
2934 (!DECL_COMDAT (NODE) && !targetm.binds_local_p (NODE))
2935
2936/* The name of the object as the assembler will see it (but before any2916/* The name of the object as the assembler will see it (but before any
2937 translations made by ASM_OUTPUT_LABELREF). Often this is the same2917 translations made by ASM_OUTPUT_LABELREF). Often this is the same
2938 as DECL_NAME. It is an IDENTIFIER_NODE. */2918 as DECL_NAME. It is an IDENTIFIER_NODE. */
@@ -5148,6 +5128,8 @@
5148extern void finish_aliases_2 (void);5128extern void finish_aliases_2 (void);
5149extern tree emutls_decl (tree);5129extern tree emutls_decl (tree);
5150extern void remove_unreachable_alias_pairs (void);5130extern void remove_unreachable_alias_pairs (void);
5131extern bool decl_replaceable_p (tree);
5132extern bool decl_binds_to_current_def_p (tree);
51515133
5152/* In stmt.c */5134/* In stmt.c */
5153extern void expand_computed_goto (tree);5135extern void expand_computed_goto (tree);
51545136
=== modified file 'gcc/varasm.c'
--- gcc/varasm.c 2010-08-13 11:53:46 +0000
+++ gcc/varasm.c 2011-04-06 13:16:33 +0000
@@ -6721,6 +6721,51 @@
6721 return local_p;6721 return local_p;
6722}6722}
67236723
6724/* Return true when references to DECL must bind to current definition in
6725 final executable.
6726
6727 The condition is usually equivalent to whether the function binds to the
6728 current module (shared library or executable), that is to binds_local_p.
6729 We use this fact to avoid need for another target hook and implement
6730 the logic using binds_local_p and just special cases where
6731 decl_binds_to_current_def_p is stronger than binds local_p. In particular
6732 the weak definitions (that can be overwritten at linktime by other
6733 definition from different object file) and when resolution info is available
6734 we simply use the knowledge passed to us by linker plugin. */
6735bool
6736decl_binds_to_current_def_p (tree decl)
6737{
6738 gcc_assert (DECL_P (decl));
6739 if (!TREE_PUBLIC (decl))
6740 return true;
6741 if (!targetm.binds_local_p (decl))
6742 return false;
6743 /* Otherwise we have to assume the worst for DECL_WEAK (hidden weaks
6744 binds localy but still can be overwritten).
6745 This rely on fact that binds_local_p behave as decl_replaceable_p
6746 for all other declaration types. */
6747 return !DECL_WEAK (decl);
6748}
6749
6750/* A replaceable function or variable is one which may be replaced
6751 at link-time with an entirely different definition, provided that the
6752 replacement has the same type. For example, functions declared
6753 with __attribute__((weak)) on most systems are replaceable.
6754
6755 COMDAT functions are not replaceable, since all definitions of the
6756 function must be equivalent. It is important that COMDAT functions
6757 not be treated as replaceable so that use of C++ template
6758 instantiations is not penalized. */
6759
6760bool
6761decl_replaceable_p (tree decl)
6762{
6763 gcc_assert (DECL_P (decl));
6764 if (!TREE_PUBLIC (decl) || DECL_COMDAT (decl))
6765 return false;
6766 return !decl_binds_to_current_def_p (decl);
6767}
6768
6724/* Default function to output code that will globalize a label. A6769/* Default function to output code that will globalize a label. A
6725 target must define GLOBAL_ASM_OP or provide its own function to6770 target must define GLOBAL_ASM_OP or provide its own function to
6726 globalize a label. */6771 globalize a label. */
67276772
=== modified file 'libcpp/ChangeLog'
--- libcpp/ChangeLog 2011-01-04 23:18:29 +0000
+++ libcpp/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,4 +1,13 @@
12011-11-04 Eric Botcazou <ebotcazou@adacore.com>12011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
2
3 PR preprocessor/48192
4 Backport from trunk
5 * directives.c (do_ifdef): Do not consider conditional macros as
6 being defined.
7 (do_ifndef): Ditto.
8 * expr.c (parse_defined): Ditto.
9
102011-01-04 Eric Botcazou <ebotcazou@adacore.com>
2 Jakub Jelinek <jakub@redhat.com>11 Jakub Jelinek <jakub@redhat.com>
312
4 PR preprocessor/3921313 PR preprocessor/39213
514
=== modified file 'libcpp/directives.c'
--- libcpp/directives.c 2011-01-04 23:18:29 +0000
+++ libcpp/directives.c 2011-04-06 13:16:33 +0000
@@ -1793,7 +1793,12 @@
17931793
1794 if (node)1794 if (node)
1795 {1795 {
1796 skip = node->type != NT_MACRO;1796 /* Do not treat conditional macros as being defined. This is due to
1797 the powerpc and spu ports using conditional macros for 'vector',
1798 'bool', and 'pixel' to act as conditional keywords. This messes
1799 up tests like #ifndef bool. */
1800 skip = (node->type != NT_MACRO
1801 || ((node->flags & NODE_CONDITIONAL) != 0));
1797 _cpp_mark_macro_used (node);1802 _cpp_mark_macro_used (node);
1798 if (!(node->flags & NODE_USED))1803 if (!(node->flags & NODE_USED))
1799 {1804 {
@@ -1831,7 +1836,12 @@
18311836
1832 if (node)1837 if (node)
1833 {1838 {
1834 skip = node->type == NT_MACRO;1839 /* Do not treat conditional macros as being defined. This is due to
1840 the powerpc and spu ports using conditional macros for 'vector',
1841 'bool', and 'pixel' to act as conditional keywords. This messes
1842 up tests like #ifndef bool. */
1843 skip = (node->type == NT_MACRO
1844 && ((node->flags & NODE_CONDITIONAL) == 0));
1835 _cpp_mark_macro_used (node);1845 _cpp_mark_macro_used (node);
1836 if (!(node->flags & NODE_USED))1846 if (!(node->flags & NODE_USED))
1837 {1847 {
18381848
=== modified file 'libcpp/expr.c'
--- libcpp/expr.c 2010-01-01 18:08:17 +0000
+++ libcpp/expr.c 2011-04-06 13:16:33 +0000
@@ -711,10 +711,15 @@
711711
712 pfile->state.prevent_expansion--;712 pfile->state.prevent_expansion--;
713713
714 /* Do not treat conditional macros as being defined. This is due to the
715 powerpc and spu ports using conditional macros for 'vector', 'bool', and
716 'pixel' to act as conditional keywords. This messes up tests like #ifndef
717 bool. */
714 result.unsignedp = false;718 result.unsignedp = false;
715 result.high = 0;719 result.high = 0;
716 result.overflow = false;720 result.overflow = false;
717 result.low = node && node->type == NT_MACRO;721 result.low = (node && node->type == NT_MACRO
722 && (node->flags & NODE_CONDITIONAL) == 0);
718 return result;723 return result;
719}724}
720725
721726
=== modified file 'libgcc/ChangeLog'
--- libgcc/ChangeLog 2010-12-16 12:32:01 +0000
+++ libgcc/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,3 +1,15 @@
12011-02-23 Nathan Froyd <froydnj@codesourcery.com>
2
3 PR target/43810
4
5 Backport from mainline:
6 2010-07-23 Nathan Froyd <froydnj@codesourcery.com>
7
8 * config.host (powerpc*-eabispe*): Set tmake_file.
9 (powerpc*-eabi*): Likewise.
10 * config/rs6000/t-ppccomm (EXTRA_PARTS): Add crtbegin, crtend,
11 crtbeginS, crtendS, crtbeginT.
12
12010-12-16 Release Manager132010-12-16 Release Manager
214
3 * GCC 4.5.2 released.15 * GCC 4.5.2 released.
416
=== modified file 'libgcc/config.host'
--- libgcc/config.host 2010-10-04 00:50:43 +0000
+++ libgcc/config.host 2011-04-06 13:16:33 +0000
@@ -459,6 +459,7 @@
459powerpc-*-netbsd*)459powerpc-*-netbsd*)
460 ;;460 ;;
461powerpc-*-eabispe*)461powerpc-*-eabispe*)
462 tmake_file="${tmake_file} rs6000/t-ppccomm"
462 ;;463 ;;
463powerpc-*-eabisimaltivec*)464powerpc-*-eabisimaltivec*)
464 ;;465 ;;
@@ -469,6 +470,7 @@
469powerpc-*-eabialtivec*)470powerpc-*-eabialtivec*)
470 ;;471 ;;
471powerpc-*-eabi*)472powerpc-*-eabi*)
473 tmake_file="${tmake_file} rs6000/t-ppccomm"
472 ;;474 ;;
473powerpc-*-rtems*)475powerpc-*-rtems*)
474 ;;476 ;;
475477
=== modified file 'libgcc/config/rs6000/t-ppccomm'
--- libgcc/config/rs6000/t-ppccomm 2008-06-26 13:15:49 +0000
+++ libgcc/config/rs6000/t-ppccomm 2011-04-06 13:16:33 +0000
@@ -15,7 +15,9 @@
15 e500crtsavg64gpr.S \15 e500crtsavg64gpr.S \
16 e500crtsavg64gprctr.S16 e500crtsavg64gprctr.S
1717
18EXTRA_PARTS += ecrti$(objext) ecrtn$(objext) ncrti$(objext) ncrtn$(objext)18EXTRA_PARTS += crtbegin$(objext) crtend$(objext) \
19 crtbeginS$(objext) crtendS$(objext) crtbeginT$(objext) \
20 ecrti$(objext) ecrtn$(objext) ncrti$(objext) ncrtn$(objext)
1921
20# We build {e,n}crti.o and {e,n}crtn.o, which serve to add begin and22# We build {e,n}crti.o and {e,n}crtn.o, which serve to add begin and
21# end labels to all of the special sections used when we link using gcc.23# end labels to all of the special sections used when we link using gcc.
2224
=== modified file 'libgfortran/ChangeLog'
--- libgfortran/ChangeLog 2010-12-16 12:30:06 +0000
+++ libgfortran/ChangeLog 2011-04-06 13:16:33 +0000
@@ -1,3 +1,153 @@
12011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
2
3 PR libfortran/48066
4 Backport from trunk
5 * m4/ifunction.m4: If return array is empty, return.
6 * m4/ifunction_logical.m4: Likewise.
7 * generated/all_l16.c: Regenerated.
8 * generated/all_l1.c: Regenerated.
9 * generated/all_l2.c: Regenerated.
10 * generated/all_l4.c: Regenerated.
11 * generated/all_l8.c: Regenerated.
12 * generated/any_l16.c: Regenerated.
13 * generated/any_l1.c: Regenerated.
14 * generated/any_l2.c: Regenerated.
15 * generated/any_l4.c: Regenerated.
16 * generated/any_l8.c: Regenerated.
17 * generated/count_16_l.c: Regenerated.
18 * generated/count_1_l.c: Regenerated.
19 * generated/count_2_l.c: Regenerated.
20 * generated/count_4_l.c: Regenerated.
21 * generated/count_8_l.c: Regenerated.
22 * generated/maxloc1_16_i16.c: Regenerated.
23 * generated/maxloc1_16_i1.c: Regenerated.
24 * generated/maxloc1_16_i2.c: Regenerated.
25 * generated/maxloc1_16_i4.c: Regenerated.
26 * generated/maxloc1_16_i8.c: Regenerated.
27 * generated/maxloc1_16_r10.c: Regenerated.
28 * generated/maxloc1_16_r16.c: Regenerated.
29 * generated/maxloc1_16_r4.c: Regenerated.
30 * generated/maxloc1_16_r8.c: Regenerated.
31 * generated/maxloc1_4_i16.c: Regenerated.
32 * generated/maxloc1_4_i1.c: Regenerated.
33 * generated/maxloc1_4_i2.c: Regenerated.
34 * generated/maxloc1_4_i4.c: Regenerated.
35 * generated/maxloc1_4_i8.c: Regenerated.
36 * generated/maxloc1_4_r10.c: Regenerated.
37 * generated/maxloc1_4_r16.c: Regenerated.
38 * generated/maxloc1_4_r4.c: Regenerated.
39 * generated/maxloc1_4_r8.c: Regenerated.
40 * generated/maxloc1_8_i16.c: Regenerated.
41 * generated/maxloc1_8_i1.c: Regenerated.
42 * generated/maxloc1_8_i2.c: Regenerated.
43 * generated/maxloc1_8_i4.c: Regenerated.
44 * generated/maxloc1_8_i8.c: Regenerated.
45 * generated/maxloc1_8_r10.c: Regenerated.
46 * generated/maxloc1_8_r16.c: Regenerated.
47 * generated/maxloc1_8_r4.c: Regenerated.
48 * generated/maxloc1_8_r8.c: Regenerated.
49 * generated/maxval_i16.c: Regenerated.
50 * generated/maxval_i1.c: Regenerated.
51 * generated/maxval_i2.c: Regenerated.
52 * generated/maxval_i4.c: Regenerated.
53 * generated/maxval_i8.c: Regenerated.
54 * generated/maxval_r10.c: Regenerated.
55 * generated/maxval_r16.c: Regenerated.
56 * generated/maxval_r4.c: Regenerated.
57 * generated/maxval_r8.c: Regenerated.
58 * generated/minloc1_16_i16.c: Regenerated.
59 * generated/minloc1_16_i1.c: Regenerated.
60 * generated/minloc1_16_i2.c: Regenerated.
61 * generated/minloc1_16_i4.c: Regenerated.
62 * generated/minloc1_16_i8.c: Regenerated.
63 * generated/minloc1_16_r10.c: Regenerated.
64 * generated/minloc1_16_r16.c: Regenerated.
65 * generated/minloc1_16_r4.c: Regenerated.
66 * generated/minloc1_16_r8.c: Regenerated.
67 * generated/minloc1_4_i16.c: Regenerated.
68 * generated/minloc1_4_i1.c: Regenerated.
69 * generated/minloc1_4_i2.c: Regenerated.
70 * generated/minloc1_4_i4.c: Regenerated.
71 * generated/minloc1_4_i8.c: Regenerated.
72 * generated/minloc1_4_r10.c: Regenerated.
73 * generated/minloc1_4_r16.c: Regenerated.
74 * generated/minloc1_4_r4.c: Regenerated.
75 * generated/minloc1_4_r8.c: Regenerated.
76 * generated/minloc1_8_i16.c: Regenerated.
77 * generated/minloc1_8_i1.c: Regenerated.
78 * generated/minloc1_8_i2.c: Regenerated.
79 * generated/minloc1_8_i4.c: Regenerated.
80 * generated/minloc1_8_i8.c: Regenerated.
81 * generated/minloc1_8_r10.c: Regenerated.
82 * generated/minloc1_8_r16.c: Regenerated.
83 * generated/minloc1_8_r4.c: Regenerated.
84 * generated/minloc1_8_r8.c: Regenerated.
85 * generated/minval_i16.c: Regenerated.
86 * generated/minval_i1.c: Regenerated.
87 * generated/minval_i2.c: Regenerated.
88 * generated/minval_i4.c: Regenerated.
89 * generated/minval_i8.c: Regenerated.
90 * generated/minval_r10.c: Regenerated.
91 * generated/minval_r16.c: Regenerated.
92 * generated/minval_r4.c: Regenerated.
93 * generated/minval_r8.c: Regenerated.
94 * generated/product_c10.c: Regenerated.
95 * generated/product_c16.c: Regenerated.
96 * generated/product_c4.c: Regenerated.
97 * generated/product_c8.c: Regenerated.
98 * generated/product_i16.c: Regenerated.
99 * generated/product_i1.c: Regenerated.
100 * generated/product_i2.c: Regenerated.
101 * generated/product_i4.c: Regenerated.
102 * generated/product_i8.c: Regenerated.
103 * generated/product_r10.c: Regenerated.
104 * generated/product_r16.c: Regenerated.
105 * generated/product_r4.c: Regenerated.
106 * generated/product_r8.c: Regenerated.
107 * generated/sum_c10.c: Regenerated.
108 * generated/sum_c16.c: Regenerated.
109 * generated/sum_c4.c: Regenerated.
110 * generated/sum_c8.c: Regenerated.
111 * generated/sum_i16.c: Regenerated.
112 * generated/sum_i1.c: Regenerated.
113 * generated/sum_i2.c: Regenerated.
114 * generated/sum_i4.c: Regenerated.
115 * generated/sum_i8.c: Regenerated.
116 * generated/sum_r10.c: Regenerated.
117 * generated/sum_r16.c: Regenerated.
118 * generated/sum_r4.c: Regenerated.
119 * generated/sum_r8.c: Regenerated.
120
1212011-03-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
122
123 PR libgfortran/47778
124 * io/list_read.c (namelist_read): Intialize the error string buffere.
125 If pprev_nl was used during the previous namelist read and the rank
126 was zero, reset the pointer to NULL for the next namelist read.
127
1282011-03-04 Jakub Jelinek <jakub@redhat.com>
129
130 Backport from mainline
131 PR fortran/47878
132 * io/transfer.c (read_sf): Call fbuf_getptr only at the end,
133 and subtract n, dtp->u.p.sf_seen_eor and seen_comma from it.
134
1352011-03-04 Janne Blomqvist <jb@gcc.gnu.org>
136 Jerry DeLisle <jvdelisle@gcc.gnu.org>
137
138 Backport from mainline
139 PR libfortran/47694
140 * io/fbuf.h (fbuf_getptr): New inline function.
141 * io/transfer.c (read_sf): Use fbuf_getptr and fbuf_getc to scan
142 through the string instead of fbuf_read.
143
1442011-02-22 Tobias Burnus <burnus@net-b.de>
145 Kai-Uwe Eckhardt <kuehro@gmx.de>
146
147 PR libfortran/47830
148 * intrinsics/c99_functions.c (roundl): Make C valid for
149 HAVE_NEXTAFTERL.
150
12010-12-16 Release Manager1512010-12-16 Release Manager
2152
3 * GCC 4.5.2 released.153 * GCC 4.5.2 released.
4154
=== modified file 'libgfortran/generated/all_l1.c'
--- libgfortran/generated/all_l1.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/all_l1.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/all_l16.c'
--- libgfortran/generated/all_l16.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/all_l16.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/all_l2.c'
--- libgfortran/generated/all_l2.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/all_l2.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/all_l4.c'
--- libgfortran/generated/all_l4.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/all_l4.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/all_l8.c'
--- libgfortran/generated/all_l8.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/all_l8.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/any_l1.c'
--- libgfortran/generated/any_l1.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/any_l1.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/any_l16.c'
--- libgfortran/generated/any_l16.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/any_l16.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/any_l2.c'
--- libgfortran/generated/any_l2.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/any_l2.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/any_l4.c'
--- libgfortran/generated/any_l4.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/any_l4.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/any_l8.c'
--- libgfortran/generated/any_l8.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/any_l8.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/count_16_l.c'
--- libgfortran/generated/count_16_l.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/count_16_l.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/count_1_l.c'
--- libgfortran/generated/count_1_l.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/count_1_l.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/count_2_l.c'
--- libgfortran/generated/count_2_l.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/count_2_l.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/count_4_l.c'
--- libgfortran/generated/count_4_l.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/count_4_l.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);143 dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
144 if (extent[n] <= 0)144 if (extent[n] <= 0)
145 len = 0;145 return;
146 }146 }
147147
148 base = array->data;148 base = array->data;
149149
=== modified file 'libgfortran/generated/count_8_l.c'
--- libgfortran/generated/count_8_l.c 2009-06-21 18:24:55 +0000
+++ libgfortran/generated/count_8_l.c 2011-04-06 13:16:33 +0000
@@ -142,7 +142,7 @@
142 count[n] = 0;142 count[n] = 0;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches