Merge lp:~ams-codesourcery/gcc-linaro/merge-from-fsf-20110526-4.6 into lp:gcc-linaro/4.6

Proposed by Andrew Stubbs
Status: Merged
Merged at revision: 106752
Proposed branch: lp:~ams-codesourcery/gcc-linaro/merge-from-fsf-20110526-4.6
Merge into: lp:gcc-linaro/4.6
Diff against target: 13296 lines (+4945/-1536)
178 files modified
ChangeLog.linaro (+4/-0)
gcc/ChangeLog (+361/-2)
gcc/DATESTAMP (+1/-1)
gcc/Makefile.in (+2/-1)
gcc/c-decl.c (+2/-2)
gcc/config.gcc (+6/-6)
gcc/config/i386/constraints.md (+1/-1)
gcc/config/i386/cpuid.h (+1/-0)
gcc/config/i386/driver-i386.c (+21/-31)
gcc/config/i386/i386.c (+14/-11)
gcc/config/i386/i386.md (+10/-12)
gcc/config/i386/sse.md (+11/-12)
gcc/config/i386/sync.md (+5/-2)
gcc/config/rs6000/rs6000.c (+22/-24)
gcc/config/rs6000/rs6000.h (+11/-21)
gcc/config/rx/rx-protos.h (+2/-2)
gcc/config/rx/rx.c (+14/-6)
gcc/config/rx/rx.h (+8/-2)
gcc/config/rx/rx.md (+65/-3)
gcc/config/s390/s390.c (+9/-9)
gcc/config/s390/s390.md (+1/-0)
gcc/config/sparc/sp64-elf.h (+2/-7)
gcc/config/sparc/sparc.c (+10/-8)
gcc/config/sparc/sparc.md (+13/-6)
gcc/config/sparc/t-crtin (+6/-0)
gcc/config/sparc/t-linux64 (+0/-3)
gcc/config/sparc/t-sol2 (+0/-4)
gcc/config/sparc/t-sol2-64 (+0/-3)
gcc/cp/ChangeLog (+198/-0)
gcc/cp/Make-lang.in (+2/-2)
gcc/cp/class.c (+12/-5)
gcc/cp/cp-gimplify.c (+189/-1)
gcc/cp/cp-tree.h (+3/-2)
gcc/cp/cvt.c (+3/-0)
gcc/cp/decl.c (+111/-30)
gcc/cp/error.c (+7/-0)
gcc/cp/init.c (+29/-11)
gcc/cp/method.c (+5/-5)
gcc/cp/parser.c (+6/-4)
gcc/cp/pt.c (+49/-17)
gcc/cp/semantics.c (+100/-43)
gcc/cp/tree.c (+2/-1)
gcc/cp/typeck.c (+35/-15)
gcc/cp/typeck2.c (+6/-3)
gcc/cppspec.c (+2/-2)
gcc/dbxout.c (+17/-2)
gcc/expmed.c (+3/-2)
gcc/expr.c (+9/-3)
gcc/fold-const.c (+3/-1)
gcc/fortran/ChangeLog (+6/-0)
gcc/fortran/expr.c (+9/-5)
gcc/gimple-fold.c (+31/-7)
gcc/gimple.c (+14/-7)
gcc/ipa-inline.c (+1/-1)
gcc/objc/ChangeLog (+9/-0)
gcc/objc/config-lang.in (+4/-1)
gcc/po/ChangeLog (+8/-0)
gcc/po/zh_CN.po (+989/-1060)
gcc/testsuite/ChangeLog (+268/-0)
gcc/testsuite/c-c++-common/vla-1.c (+21/-0)
gcc/testsuite/g++.dg/abi/packed1.C (+2/-2)
gcc/testsuite/g++.dg/cpp0x/access01.C (+15/-0)
gcc/testsuite/g++.dg/cpp0x/auto23.C (+4/-0)
gcc/testsuite/g++.dg/cpp0x/auto9.C (+7/-4)
gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C (+24/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield2.C (+19/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-bitfield3.C (+33/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-condition2.C (+18/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-friend.C (+23/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete1.C (+7/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete2.C (+31/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-incomplete3.C (+12/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C (+2/-2)
gcc/testsuite/g++.dg/cpp0x/constexpr-missing.C (+39/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-static7.C (+8/-0)
gcc/testsuite/g++.dg/cpp0x/constexpr-switch2.C (+23/-0)
gcc/testsuite/g++.dg/cpp0x/decltype27.C (+9/-0)
gcc/testsuite/g++.dg/cpp0x/defaulted26.C (+7/-0)
gcc/testsuite/g++.dg/cpp0x/defaulted27.C (+19/-0)
gcc/testsuite/g++.dg/cpp0x/defaulted29.C (+20/-0)
gcc/testsuite/g++.dg/cpp0x/enum13.C (+20/-0)
gcc/testsuite/g++.dg/cpp0x/enum15.C (+20/-0)
gcc/testsuite/g++.dg/cpp0x/enum16.C (+6/-0)
gcc/testsuite/g++.dg/cpp0x/error3.C (+24/-0)
gcc/testsuite/g++.dg/cpp0x/error4.C (+22/-0)
gcc/testsuite/g++.dg/cpp0x/initlist50.C (+21/-0)
gcc/testsuite/g++.dg/cpp0x/initlist51.C (+15/-0)
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-conv5.C (+15/-0)
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh2.C (+16/-0)
gcc/testsuite/g++.dg/cpp0x/noexcept02.C (+3/-3)
gcc/testsuite/g++.dg/cpp0x/noexcept03.C (+0/-17)
gcc/testsuite/g++.dg/cpp0x/noexcept08.C (+1/-1)
gcc/testsuite/g++.dg/cpp0x/noexcept10.C (+27/-0)
gcc/testsuite/g++.dg/cpp0x/pr48522.C (+24/-0)
gcc/testsuite/g++.dg/cpp0x/rv-cast2.C (+21/-0)
gcc/testsuite/g++.dg/cpp0x/rv-restrict.C (+6/-0)
gcc/testsuite/g++.dg/cpp0x/sfinae22.C (+23/-0)
gcc/testsuite/g++.dg/cpp0x/sfinae23.C (+28/-0)
gcc/testsuite/g++.dg/cpp0x/variadic108.C (+10/-0)
gcc/testsuite/g++.dg/cpp0x/variadic109.C (+17/-0)
gcc/testsuite/g++.dg/cpp0x/variadic110.C (+15/-0)
gcc/testsuite/g++.dg/ext/vla10.C (+32/-0)
gcc/testsuite/g++.dg/init/new32.C (+16/-0)
gcc/testsuite/g++.dg/init/pr25811-2.C (+26/-0)
gcc/testsuite/g++.dg/init/pr25811-3.C (+38/-0)
gcc/testsuite/g++.dg/init/pr25811-4.C (+38/-0)
gcc/testsuite/g++.dg/init/pr48859.C (+14/-0)
gcc/testsuite/g++.dg/lto/pr48207-2_0.C (+10/-0)
gcc/testsuite/g++.dg/lto/pr48207-3_0.C (+12/-0)
gcc/testsuite/g++.dg/lto/pr48207_0.C (+13/-0)
gcc/testsuite/g++.dg/opt/pr48967.C (+98/-0)
gcc/testsuite/g++.dg/other/packed1.C (+1/-1)
gcc/testsuite/g++.dg/other/pr49133.C (+36/-0)
gcc/testsuite/g++.dg/parse/error15.C (+3/-3)
gcc/testsuite/g++.dg/template/access21.C (+23/-0)
gcc/testsuite/g++.dg/template/access22.C (+15/-0)
gcc/testsuite/g++.dg/template/dependent-expr8.C (+25/-0)
gcc/testsuite/g++.dg/template/sfinae8.C (+2/-2)
gcc/testsuite/g++.dg/template/stdarg1.C (+2/-0)
gcc/testsuite/g++.dg/torture/pr49039.C (+76/-0)
gcc/testsuite/g++.dg/warn/Wunused-parm-3.C (+2/-0)
gcc/testsuite/gcc.c-torture/compile/pr49029.c (+10/-0)
gcc/testsuite/gcc.c-torture/execute/960321-1.x (+0/-15)
gcc/testsuite/gcc.c-torture/execute/pr48973-1.c (+20/-0)
gcc/testsuite/gcc.c-torture/execute/pr48973-2.c (+14/-0)
gcc/testsuite/gcc.c-torture/execute/pr49039.c (+26/-0)
gcc/testsuite/gcc.c-torture/execute/pr49073.c (+26/-0)
gcc/testsuite/gcc.c-torture/execute/pr49123.c (+14/-0)
gcc/testsuite/gcc.dg/debug/pr49032.c (+11/-0)
gcc/testsuite/gcc.dg/pr48159-1.c (+10/-0)
gcc/testsuite/gcc.dg/pr48159-2.c (+22/-0)
gcc/testsuite/gcc.dg/pr48837.c (+30/-0)
gcc/testsuite/gcc.dg/pr48975.c (+18/-0)
gcc/testsuite/gcc.dg/pr49000.c (+29/-0)
gcc/testsuite/gcc.dg/pr49120.c (+11/-0)
gcc/testsuite/gcc.dg/torture/pr48822.c (+20/-0)
gcc/testsuite/gcc.dg/torture/pr49079.c (+31/-0)
gcc/testsuite/gcc.dg/tree-ssa/pr49039.c (+31/-0)
gcc/testsuite/gcc.dg/vect/pr48172.c (+33/-0)
gcc/testsuite/gcc.target/arm/fp16-compile-none-1.c (+1/-1)
gcc/testsuite/gcc.target/i386/pr49002-1.c (+16/-0)
gcc/testsuite/gcc.target/i386/pr49002-2.c (+14/-0)
gcc/testsuite/gcc.target/powerpc/pr48857.c (+25/-0)
gcc/testsuite/gfortran.dg/generic_24.f90 (+100/-0)
gcc/testsuite/gfortran.dg/gomp/pr48611.f90 (+12/-0)
gcc/testsuite/gfortran.dg/gomp/pr48794.f90 (+12/-0)
gcc/testsuite/objc.dg/pr48177.m (+35/-0)
gcc/tree-data-ref.c (+2/-2)
gcc/tree-dfa.c (+21/-9)
gcc/tree-eh.c (+13/-0)
gcc/tree-flow.h (+1/-0)
gcc/tree-if-conv.c (+4/-0)
gcc/tree-loop-distribution.c (+25/-3)
gcc/tree-ssa-ifcombine.c (+3/-2)
gcc/tree-ssa-sccvn.c (+21/-7)
gcc/tree-ssa.c (+42/-0)
gcc/tree-tailcall.c (+8/-0)
gcc/tree-vect-loop-manip.c (+17/-13)
gcc/tree-vrp.c (+22/-12)
gcc/tree.c (+6/-5)
gcc/var-tracking.c (+10/-6)
libcpp/ChangeLog (+6/-0)
libcpp/lex.c (+4/-3)
libcpp/po/ChangeLog (+4/-0)
libcpp/po/zh_CN.po (+3/-4)
libgomp/ChangeLog (+8/-0)
libgomp/testsuite/libgomp.c++/pr48869.C (+68/-0)
libgomp/testsuite/libgomp.c++/pr49043.C (+19/-0)
libobjc/ChangeLog (+10/-0)
libobjc/selector.c (+1/-1)
libstdc++-v3/ChangeLog (+36/-0)
libstdc++-v3/config/abi/pre/gnu.ver (+7/-0)
libstdc++-v3/include/std/functional (+6/-3)
libstdc++-v3/testsuite/20_util/bind/49058_1.cc (+34/-0)
libstdc++-v3/testsuite/20_util/bind/49058_2.cc (+28/-0)
libstdc++-v3/testsuite/20_util/bind/cv_quals_2.cc (+49/-0)
libstdc++-v3/testsuite/26_numerics/complex/cons/48760.cc (+2/-0)
libstdc++-v3/testsuite/26_numerics/headers/cmath/19322.cc (+3/-6)
To merge this branch: bzr merge lp:~ams-codesourcery/gcc-linaro/merge-from-fsf-20110526-4.6
Reviewer Review Type Date Requested Status
Linaro Toolchain Developers Pending
Review via email: mp+62492@code.launchpad.net

Description of the change

Merge from FSF 4.6 branch r174261.

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 r106751 and queued it for build.

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4.6.tar.xdelta3.xz

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

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

cbuild-snapshot: gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4.6
cbuild-ancestor: lp:gcc-linaro/4.6+bzr106750
cbuild-state: check

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

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

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4.6/logs/i686-lucid-cbuild120-scorpius-i686r1

The test suite results changed compared to the branch point lp:gcc-linaro/4.6+bzr106750:
 +PASS: c-c++-common/vla-1.c -Wc++-compat (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O0 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O1 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 -flto -flto-partition=none (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 -flto (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O3 -fomit-frame-pointer (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O3 -g (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -Os (test for excess errors)
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -Os
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O3 -fomit-frame-pointer
 ...and 245 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4.6/logs/i68...

Read more...

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

cbuild successfully built this on armv7l-maverick-cbuild120-ursa3-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4.6/logs/armv7l-maverick-cbuild120-ursa3-cortexa9r1

The test suite results changed compared to the branch point lp:gcc-linaro/4.6+bzr106750:
 +PASS: c-c++-common/vla-1.c -Wc++-compat (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O0 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O1 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 -flto -flto-partition=none (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 -flto (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O3 -fomit-frame-pointer (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O3 -g (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -Os (test for excess errors)
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -Os
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O3 -fomit-frame-pointer
 ...and 250 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-...

Read more...

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

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

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4.6/logs/x86_64-maverick-cbuild121-crucis-x86_64r1

The test suite results changed compared to the branch point lp:gcc-linaro/4.6+bzr106750:
 +PASS: c-c++-common/vla-1.c -Wc++-compat (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O0 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O1 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 -flto -flto-partition=none (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 -flto (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O2 (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O3 -fomit-frame-pointer (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -O3 -g (test for excess errors)
 +PASS: gcc.c-torture/compile/pr49029.c -Os (test for excess errors)
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-1.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-1.c execution, -Os
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O0
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O1
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O3 -fomit-frame-pointer
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -O3 -g
 +PASS: gcc.c-torture/execute/pr48973-2.c compilation, -Os
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O0
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O1
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2 -flto
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O2 -flto -flto-partition=none
 +PASS: gcc.c-torture/execute/pr48973-2.c execution, -O3 -fomit-frame-pointer
 ...and 245 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.6+bzr106751~ams-codesourcery~merge-from-fsf-20110526-4....

Read more...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog.linaro'
2--- ChangeLog.linaro 2011-05-19 07:44:22 +0000
3+++ ChangeLog.linaro 2011-05-26 15:02:13 +0000
4@@ -1,3 +1,7 @@
5+2011-05-26 Andrew Stubbs <ams@codesourcery.com>
6+
7+ Merge from FSF GCC 4.6 (svn branches/gcc-4_6-branch 174261).
8+
9 2011-05-16 Andrew Stubbs <ams@codesourcery.com>
10
11 gcc/
12
13=== modified file 'gcc/ChangeLog'
14--- gcc/ChangeLog 2011-05-06 11:28:27 +0000
15+++ gcc/ChangeLog 2011-05-26 15:02:13 +0000
16@@ -1,8 +1,367 @@
17+2011-05-25 Jakub Jelinek <jakub@redhat.com>
18+
19+ PR target/49128
20+ * config/i386/driver-i386.c (host_detect_local_cpu): Fix a typo.
21+
22+2011-05-18 Jan Hubicka <jh@suse.cz>
23+
24+ PR tree-optimization/44897
25+ * ipa-inline.c (cgraph_decide_recursive_inlining): Do not divide
26+ by zero for insane profiles.
27+
28+2011-05-24 Eric Botcazou <ebotcazou@adacore.com>
29+
30+ * config/sparc/sparc.c (sparc_option_override): If not set by the user,
31+ force flag_ira_share_save_slots to 0.
32+
33+2011-05-24 Uros Bizjak <ubizjak@gmail.com>
34+
35+ PR target/49133
36+ * config/i386/sse.md (sse2_loadhpd): Remove shufpd alternative.
37+
38+2011-05-24 H.J. Lu <hongjiu.lu@intel.com>
39+
40+ Backport from mainline
41+ 2011-05-24 H.J. Lu <hongjiu.lu@intel.com>
42+
43+ PR target/49128
44+ * config/i386/driver-i386.c (host_detect_local_cpu): Always
45+ add -mno-XXX. Handle FMA.
46+
47+2011-05-23 Jakub Jelinek <jakub@redhat.com>
48+
49+ PR lto/49123
50+ * fold-const.c (constant_boolean_node): If type is non-NULL,
51+ use build_int_cst_type instead of build_int_cst.
52+
53+ PR debug/49032
54+ * dbxout.c: Include cgraph.h.
55+ (dbxout_expand_expr): If a VAR_DECL is TREE_STATIC, not written
56+ and without value expr, return NULL if no varpool node exists for
57+ it or if it is not needed.
58+ * Makefile.in (dbxout.o): Depend on $(CGRAPH_H).
59+
60+ PR c/49120
61+ * c-decl.c (start_decl): Convert expr to void_type_node.
62+
63+ PR middle-end/48973
64+ * expr.c (expand_expr_real_2) <case LT_EXPR>: If do_store_flag
65+ failed and the comparison has a single bit signed type, use
66+ constm1_rtx instead of const1_rtx for true value.
67+ (do_store_flag): If ops->type is single bit signed type, disable
68+ signel bit test optimization and pass -1 instead of 1 as last
69+ parameter to emit_store_flag_force.
70+
71+2011-05-22 Eric Botcazou <ebotcazou@adacore.com>
72+
73+ * config.gcc (sparc-*-elf*): Add sparc/t-crtin.
74+ (sparc-*-rtems*): Likewise.
75+ (sparc64-*-elf*): Likewise.
76+ (sparc64-*-rtems*): Likewise.
77+ (sparc*-*-solaris2*): Likewise. Remove crti.o crtn.o extra parts.
78+ * config/sparc/t-crtin: New file.
79+ * config/sparc/t-sol2 (crti.o): Delete rule.
80+ (crtn.o): Likewise.
81+ * config/sparc/t-linux64 (EXTRA_MULTILIB_PARTS): Delete.
82+ * config/sparc/t-sol2-64 (EXTRA_MULTILIB_PARTS): Likewise.
83+ * config/sparc/sp64-elf.h (STARTFILE_SPEC): Tidy and add crti.o.
84+ (ENDFILE_SPEC): Add crtn.o.
85+
86+2011-05-22 Uros Bizjak <ubizjak@gmail.com>
87+
88+ PR target/49104
89+ * config/i386/cpuid.h (bit_MMXEXT): New define.
90+
91+2011-05-22 Jakub Jelinek <jakub@redhat.com>
92+
93+ PR middle-end/49029
94+ * expmed.c (extract_fixed_bit_field): Test whether target can be used
95+ only after deciding which mode to use.
96+
97+2011-05-21 Eric Botcazou <ebotcazou@adacore.com>
98+
99+ * config/sparc/sparc.md (setjmp): Handle PIC mode and use the hard
100+ frame pointer.
101+
102+2011-05-21 Eric Botcazou <ebotcazou@adacore.com>
103+
104+ * config/sparc/sparc.c (eligible_for_return_delay): Do not return
105+ false if there are call-saved registers here...
106+ (sparc_can_use_return_insn_p): ...but here instead.
107+ (save_or_restore_regs): Fix thinko.
108+ (sparc_expand_prologue): Use current_function_is_leaf.
109+ (sparc_frame_pointer_required): Likewise.
110+
111+2011-05-20 Jakub Jelinek <jakub@redhat.com>
112+
113+ PR bootstrap/49086
114+ * gimple-fold.c (and_comparisons_1, or_comparisons_1): Return NULL
115+ for PHI args that are SSA_NAME_IS_DEFAULT_DEF.
116+
117+2011-05-20 Richard Guenther <rguenther@suse.de>
118+
119+ PR tree-optimization/49079
120+ * tree-dfa.c (get_ref_base_and_extent): Handle view-converting
121+ MEM_REFs correctly for the trailing array access detection.
122+ Special case constants the same way as decls for overall size
123+ constraining.
124+
125+2011-05-20 Jakub Jelinek <jakub@redhat.com>
126+
127+ PR tree-optimization/49073
128+ * gimple-fold.c (and_comparisons_1, or_comparisons_1): Return
129+ NULL if PHI argument is SSA_NAME, whose def_stmt is dominated
130+ by the PHI.
131+ * tree-ssa-ifcombine.c (tree_ssa_ifcombine): Calculate dominators.
132+
133+2011-05-19 Uros Bizjak <ubizjak@gmail.com>
134+
135+ * config/i386/i386.c (option_override_internal): Enable TARGET_CMOVE
136+ when TARGET_RDRND is active.
137+ (ix86_expand_builtin) <case IX86_BUILTIN_RDRAND{16,32,64}_STEP>:
138+ Generate dummy SImode target register when target is NULL.
139+
140+2011-05-18 H.J. Lu <hongjiu.lu@intel.com>
141+
142+ Backport from mainline
143+ 2011-05-18 H.J. Lu <hongjiu.lu@intel.com>
144+
145+ PR target/49002
146+ * config/i386/sse.md (avx_<avxmodesuffixp><avxmodesuffix>_<avxmodesuffixp>):
147+ Properly handle load cast.
148+
149+2011-05-18 Jakub Jelinek <jakub@redhat.com>
150+
151+ PR tree-optimization/49039
152+ * tree-vrp.c (extract_range_from_binary_expr): For
153+ MIN_EXPR <~[a, b], ~[c, d]> and MAX_EXPR <~[a, b], ~[c, d]>
154+ return ~[MAX_EXPR <a, c>, MIN_EXPR <b, d>].
155+
156+2011-05-18 Richard Guenther <rguenther@suse.de>
157+
158+ PR tree-optimization/49018
159+ * gimple.c (gimple_has_side_effects): Volatile asms have side-effects.
160+ * tree-ssa-ifcombine.c (bb_no_side_effects_p): Use
161+ gimple_has_side_effects.
162+
163+2011-05-18 Richard Guenther <rguenther@suse.de>
164+
165+ Backport from mainline
166+ 2011-04-19 Richard Guenther <rguenther@suse.de>
167+
168+ PR lto/48207
169+ * tree.c (free_lang_data): Do not reset the decl-assembler-name
170+ langhook.
171+
172+ 2011-04-21 Richard Guenther <rguenther@suse.de>
173+
174+ PR lto/48703
175+ * tree.c (free_lang_data_in_decl): Do not zero TREE_TYPE of
176+ DECL_NAME.
177+
178+2011-05-18 Richard Guenther <rguenther@suse.de>
179+
180+ Backport from mainline
181+ 2011-05-12 Richard Guenther <rguenther@suse.de>
182+
183+ PR tree-optimization/48172
184+ * tree-vect-loop-manip.c (vect_vfa_segment_size): Do not exclude
185+ the number of iterations from the segment size calculation.
186+ (vect_create_cond_for_alias_checks): Adjust.
187+
188+ 2011-05-13 Richard Guenther <rguenther@suse.de>
189+
190+ PR tree-optimization/48172
191+ * tree-vect-loop-manip.c (vect_vfa_segment_size): Avoid
192+ multiplying by number of iterations for equal step.
193+ (vect_create_cond_for_alias_checks): Likewise.
194+
195+2011-05-18 Jakub Jelinek <jakub@redhat.com>
196+
197+ PR tree-optimization/49000
198+ * tree-ssa.c (execute_update_addresses_taken): Call
199+ maybe_rewrite_mem_ref_base on debug stmt value. If it couldn't
200+ be rewritten and decl has been marked for renaming, reset
201+ the debug stmt.
202+
203+2011-05-17 Nick Clifton <nickc@redhat.com>
204+
205+ Import these patches from the mainline:
206+
207+ 2011-05-17 Nick Clifton <nickc@redhat.com>
208+
209+ * config/rx/rx.c (rx_memory_move_cost): Include cost of register
210+ moves.
211+
212+ * config/rx/rx.md: Add peephole to remove redundant extensions
213+ after loads.
214+ (bitset_in_memory): Use rx_restricted_mem_operand.
215+ (bitinvert_in_memory): Likewise.
216+ (bitclr_in_memory): Likewise.
217+
218+ 2011-05-17 Kazuhio Inaoka <kazuhiro.inaoka.ud@renesas.com>
219+ Nick Clifton <nickc@redhat.com>
220+
221+ * config/rx/rx.md: Add peepholes to match a register move followed
222+ by a comparison of the moved register. Replace these with an
223+ addition of zero that does both actions in one instruction.
224+
225+2011-05-17 Jakub Jelinek <jakub@redhat.com>
226+
227+ PR target/48986
228+ * config/i386/sync.md (sync_old_add<mode>): Relax operand 2
229+ predicate to allow CONST_INT.
230+
231+2011-05-16 Joseph Myers <joseph@codesourcery.com>
232+
233+ PR preprocessor/48677
234+ * cppspec.c (lang_specific_driver): Set new_decoded_options[0]
235+ from decoded_options[0], not from itself.
236+
237+2011-05-16 Uros Bizjak <ubizjak@gmail.com>
238+
239+ * config/i386/i386.md (*movxf_internal): Disable CONST_DOUBLE
240+ optimization for CM_MEDIUM and CM_LARGE code models. Fix usage
241+ of standard_80387_constant_p.
242+ (*movxf_internal_nointeger): Ditto.
243+ (*movdf_internal): Remove dead code-size optimization.
244+ (*movdf_internal_rex64): Fix usage of standard_80387_constant_p.
245+ (*movdf_internal_nointeger): Ditto.
246+ (*movsf_internal): Ditto.
247+ (floating point move splitters): Ditto.
248+ * config/i386/constraints.md (G): Ditto.
249+ * config/i386/i386.c (ix86_preferred_reload_class): Ditto.
250+
251+2011-05-12 Jakub Jelinek <jakub@redhat.com>
252+
253+ PR tree-optimization/48975
254+ * tree-if-conv.c (combine_blocks): Call free_bb_predicate
255+ on all bbs here and free and clear ifc_bbs at the end.
256+
257+2011-05-12 Richard Guenther <rguenther@suse.de>
258+
259+ Backport from mainline
260+ 2011-05-02 Richard Guenther <rguenther@suse.de>
261+
262+ PR tree-optimization/48822
263+ * tree-ssa-sccvn.c (set_ssa_val_to): Never go up the lattice.
264+ (process_scc): Indicate which iteration we start.
265+
266+2011-05-12 Jakub Jelinek <jakub@redhat.com>
267+
268+ PR debug/48967
269+ * var-tracking.c (use_narrower_mode_test) <case REG>: Return 1
270+ if validate_subreg fails.
271+
272+2011-05-12 Nick Clifton <nickc@redhat.com>
273+
274+ * config/rx/rx.h (HAVE_PRE_DECREMENT): Fix typo.
275+ * config/rx/rx.c (rx_is_legitimate_constant): Use gcc_unreachable
276+ instead of abort.
277+ (rx_align_for_label): Test label before extracting its number of
278+ uses.
279+ (rx_max_skip_for_label): Ignore debug insns.
280+
281+2011-05-11 Jakub Jelinek <jakub@redhat.com>
282+
283+ PR debug/48159
284+ * tree-ssa.c (reset_debug_uses): New function.
285+ * tree-flow.h (reset_debug_uses): New prototype.
286+ * tree-data-ref.c (stmts_from_loop): Ignore debug stmts.
287+ * tree-loop-distribution.c (generate_loops_for_partition): Call
288+ reset_debug_uses on the stmts that will be removed. Keep around
289+ all debug stmts, don't count them as bits in partition bitmap.
290+ (generate_builtin): Don't count debug stmts or labels as bits in
291+ partition bitmap.
292+
293+2011-05-10 Michael Meissner <meissner@linux.vnet.ibm.com>
294+
295+ Backport from mainline
296+ 2011-05-10 Michael Meissner <meissner@linux.vnet.ibm.com>
297+
298+ PR target/48857, 48495
299+ * config/rs6000/rs6000.h (VSX_SCALAR_MODE): Delete.
300+ (VSX_MODE): Ditto.
301+ (VSX_MOVE_MODE): Ditto.
302+ (ALTIVEC_OR_VSX_VECTOR_MODE): New macro, combine all Altivec and
303+ VSX vector types. Add V2DImode.
304+ (HARD_REGNO_CALLER_SAVE_MODE): Use it instead of
305+ ALTIVEC_VECTOR_MODE and VSX_VECTOR_MODE calls.
306+ (MODES_TIEABLE_P): Ditto.
307+
308+ * config/rs6000/rs6000.c (rs6000_emit_move): Use
309+ ALTIVEC_OR_VSX_MODE instead of ALTIVEC_VECTOR_MODE and
310+ VSX_VECTOR_MODE.
311+ (init_cumulative_args): Ditto.
312+ (rs6000_function_arg_boundary): Ditto.
313+ (rs6000_function_arg_advance_1): Ditto.
314+ (rs6000_function_arg): Ditto.
315+ (rs6000_function_ok_for_sibcall): Ditto.
316+ (emit_frame_save): Ditto.
317+ (rs6000_function_value): Ditto.
318+ (rs6000_libcall_value): Ditto.
319+
320+2011-05-10 Nick Clifton <nickc@redhat.com>
321+
322+ * config/rx/rx.c (rx_memory_move_cost): Reduce the cost for
323+ stores.
324+
325+2011-05-10 DJ Delorie <dj@redhat.com>
326+
327+ * config/rx/rx.h (JUMP_ALIGN, LABEL_ALIGN, LOOP_ALIGN): Define.
328+ (LABEL_ALIGN_AFTER_BARRIER): Pass label to rx_align_for_label
329+ * config/rx/rx.c (rx_align_for_label): Add label and
330+ uses_threshold parameters. Do not align when the label is not
331+ used enough.
332+ * config/rx/rx-protos.h (rx_align_for_label): Update prototype.
333+
334+2011-05-10 Jakub Jelinek <jakub@redhat.com>
335+
336+ Backported from mainline
337+ 2011-05-07 Zdenek Dvorak <ook@ucw.cz>
338+
339+ PR tree-optimization/48837
340+ * tree-tailcall.c (tree_optimize_tail_calls_1): Do not mark tailcalls
341+ when accumulator transformation is performed.
342+
343+2011-05-10 Jakub Jelinek <jakub@redhat.com>
344+
345+ PR tree-optimization/48611
346+ PR tree-optimization/48794
347+ * tree-eh.c (remove_unreachable_handlers): Don't remove regions
348+ referenced from RESX or EH_DISPATCH arguments.
349+
350+2011-05-09 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
351+
352+ * config/s390/s390.md (TD/TF mem to reg move splitter): Make the
353+ temporary register to match Pmode.
354+
355+2011-05-09 Eric Botcazou <ebotcazou@adacore.com>
356+
357+ * var-tracking.c (find_mem_expr_in_1pdv): Fix thinko.
358+ (dataflow_set_preserve_mem_locs): Likewise.
359+
360+2011-05-06 Uros Bizjak <ubizjak@gmail.com>
361+
362+ * config/i386/i386.md (*movdf_internal_nointeger): Apply "*"
363+ constraint modifier to "r".
364+
365+2011-05-06 Alan Modra <amodra@gmail.com>
366+
367+ PR target/48900
368+ * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Use
369+ const0_rtx as the arg to the dummy __tls_get_addr libcall.
370+
371+2011-05-06 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
372+
373+ * config/s390/s390.c (s390_asm_trampoline_template): Comment
374+ instruction sizes.
375+ (s390_trampoline_init): Replace UNITS_PER_WORD with UNITS_PER_LONG.
376+
377 2011-05-06 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
378
379 PR target/48252
380- * config/arm/neon.md (neon_vtrn<mode>): Fix typo
381- from earlier commit.
382+ * config/arm/neon.md (neon_vtrn<mode>): Fix typo from earlier commit.
383
384 2011-05-05 Michael Meissner <meissner@linux.vnet.ibm.com>
385
386
387=== modified file 'gcc/DATESTAMP'
388--- gcc/DATESTAMP 2011-05-06 00:19:00 +0000
389+++ gcc/DATESTAMP 2011-05-26 15:02:13 +0000
390@@ -1,1 +1,1 @@
391-20110506
392+20110526
393
394=== modified file 'gcc/Makefile.in'
395--- gcc/Makefile.in 2011-04-18 11:31:29 +0000
396+++ gcc/Makefile.in 2011-05-26 15:02:13 +0000
397@@ -2922,7 +2922,8 @@
398 dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
399 $(RTL_H) $(FLAGS_H) $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) $(FUNCTION_H) \
400 langhooks.h insn-config.h reload.h $(GSTAB_H) xcoffout.h output.h dbxout.h \
401- toplev.h $(DIAGNOSTIC_CORE_H) $(GGC_H) $(OBSTACK_H) $(EXPR_H) gt-dbxout.h
402+ toplev.h $(DIAGNOSTIC_CORE_H) $(GGC_H) $(OBSTACK_H) $(EXPR_H) $(CGRAPH_H) \
403+ gt-dbxout.h
404 debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H)
405 sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) debug.h \
406 $(TREE_H) $(GGC_H) $(RTL_H) $(REGS_H) $(FLAGS_H) insn-config.h \
407
408=== modified file 'gcc/c-decl.c'
409--- gcc/c-decl.c 2011-03-20 01:55:25 +0000
410+++ gcc/c-decl.c 2011-05-26 15:02:13 +0000
411@@ -1,6 +1,6 @@
412 /* Process declarations and variables for C compiler.
413 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
414- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
415+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
416 Free Software Foundation, Inc.
417
418 This file is part of GCC.
419@@ -3948,7 +3948,7 @@
420 return 0;
421
422 if (expr)
423- add_stmt (expr);
424+ add_stmt (fold_convert (void_type_node, expr));
425
426 if (TREE_CODE (decl) != FUNCTION_DECL && MAIN_NAME_P (DECL_NAME (decl)))
427 warning (OPT_Wmain, "%q+D is usually a function", decl);
428
429=== modified file 'gcc/config.gcc'
430--- gcc/config.gcc 2011-04-08 21:41:35 +0000
431+++ gcc/config.gcc 2011-05-26 15:02:13 +0000
432@@ -2522,12 +2522,12 @@
433 tmake_file="sparc/t-elf"
434 ;;
435 esac
436- tmake_file="${tmake_file} sparc/t-crtfm"
437+ tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm"
438 extra_parts="crtbegin.o crtend.o"
439 ;;
440 sparc-*-rtems*)
441 tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
442- tmake_file="sparc/t-elf sparc/t-crtfm t-rtems"
443+ tmake_file="sparc/t-elf sparc/t-crtin sparc/t-crtfm t-rtems"
444 extra_parts="crtbegin.o crtend.o"
445 ;;
446 sparc-*-linux*)
447@@ -2585,7 +2585,7 @@
448 tm_file="${tm_file} sol2-gld.h sparc/sol2-gld-bi.h"
449 fi
450 tm_file="${tm_file} tm-dwarf2.h"
451- tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtfm"
452+ tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtin sparc/t-crtfm"
453 if test x$gnu_ld = xyes; then
454 tmake_file="$tmake_file t-slibgcc-elf-ver"
455 else
456@@ -2598,7 +2598,7 @@
457 cxx_target_objs="sol2-c.o"
458 extra_objs="sol2.o"
459 tm_p_file="${tm_p_file} sol2-protos.h"
460- extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
461+ extra_parts="crt1.o gcrt1.o gmon.o crtbegin.o crtend.o"
462 case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
463 "":yes:* | yes:yes:* )
464 thread_file=posix
465@@ -2615,13 +2615,13 @@
466 sparc64-*-elf*)
467 tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h"
468 extra_options="${extra_options} sparc/little-endian.opt"
469- tmake_file="${tmake_file} sparc/t-crtfm"
470+ tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm"
471 extra_parts="crtbegin.o crtend.o"
472 ;;
473 sparc64-*-rtems*)
474 tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h sparc/rtemself.h rtems.h"
475 extra_options="${extra_options} sparc/little-endian.opt"
476- tmake_file="${tmake_file} sparc/t-crtfm t-rtems"
477+ tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm t-rtems"
478 extra_parts="crtbegin.o crtend.o"
479 ;;
480 sparc64-*-linux*)
481
482=== modified file 'gcc/config/i386/constraints.md'
483--- gcc/config/i386/constraints.md 2009-07-08 15:41:23 +0000
484+++ gcc/config/i386/constraints.md 2011-05-26 15:02:13 +0000
485@@ -149,7 +149,7 @@
486 (define_constraint "G"
487 "Standard 80387 floating point constant."
488 (and (match_code "const_double")
489- (match_test "standard_80387_constant_p (op)")))
490+ (match_test "standard_80387_constant_p (op) > 0")))
491
492 ;; This can theoretically be any mode's CONST0_RTX.
493 (define_constraint "C"
494
495=== modified file 'gcc/config/i386/cpuid.h'
496--- gcc/config/i386/cpuid.h 2010-11-10 22:02:34 +0000
497+++ gcc/config/i386/cpuid.h 2011-05-26 15:02:13 +0000
498@@ -57,6 +57,7 @@
499 #define bit_TBM (1 << 21)
500
501 /* %edx */
502+#define bit_MMXEXT (1 << 22)
503 #define bit_LM (1 << 29)
504 #define bit_3DNOWP (1 << 30)
505 #define bit_3DNOW (1 << 31)
506
507=== modified file 'gcc/config/i386/driver-i386.c'
508--- gcc/config/i386/driver-i386.c 2011-01-06 22:59:46 +0000
509+++ gcc/config/i386/driver-i386.c 2011-05-26 15:02:13 +0000
510@@ -395,7 +395,7 @@
511 unsigned int has_movbe = 0, has_sse4_1 = 0, has_sse4_2 = 0;
512 unsigned int has_popcnt = 0, has_aes = 0, has_avx = 0;
513 unsigned int has_pclmul = 0, has_abm = 0, has_lwp = 0;
514- unsigned int has_fma4 = 0, has_xop = 0;
515+ unsigned int has_fma = 0, has_fma4 = 0, has_xop = 0;
516 unsigned int has_bmi = 0, has_tbm = 0;
517
518 bool arch;
519@@ -443,6 +443,7 @@
520 has_popcnt = ecx & bit_POPCNT;
521 has_aes = ecx & bit_AES;
522 has_pclmul = ecx & bit_PCLMUL;
523+ has_fma = ecx & bit_FMA;
524
525 has_cmpxchg8b = edx & bit_CMPXCHG8B;
526 has_cmov = edx & bit_CMOV;
527@@ -681,37 +682,26 @@
528
529 if (arch)
530 {
531- if (has_cmpxchg16b)
532- options = concat (options, " -mcx16", NULL);
533- if (has_lahf_lm)
534- options = concat (options, " -msahf", NULL);
535- if (has_movbe)
536- options = concat (options, " -mmovbe", NULL);
537- if (has_aes)
538- options = concat (options, " -maes", NULL);
539- if (has_pclmul)
540- options = concat (options, " -mpclmul", NULL);
541- if (has_popcnt)
542- options = concat (options, " -mpopcnt", NULL);
543- if (has_abm)
544- options = concat (options, " -mabm", NULL);
545- if (has_lwp)
546- options = concat (options, " -mlwp", NULL);
547- if (has_fma4)
548- options = concat (options, " -mfma4", NULL);
549- if (has_xop)
550- options = concat (options, " -mxop", NULL);
551- if (has_bmi)
552- options = concat (options, " -mbmi", NULL);
553- if (has_tbm)
554- options = concat (options, " -mtbm", NULL);
555+ const char *cx16 = has_cmpxchg16b ? " -mcx16" : " -mno-cx16";
556+ const char *sahf = has_lahf_lm ? " -msahf" : " -mno-sahf";
557+ const char *movbe = has_movbe ? " -mmovbe" : " -mno-movbe";
558+ const char *ase = has_aes ? " -maes" : " -mno-aes";
559+ const char *pclmul = has_pclmul ? " -mpclmul" : " -mno-pclmul";
560+ const char *popcnt = has_popcnt ? " -mpopcnt" : " -mno-popcnt";
561+ const char *abm = has_abm ? " -mabm" : " -mno-abm";
562+ const char *lwp = has_lwp ? " -mlwp" : " -mno-lwp";
563+ const char *fma = has_fma ? " -mfma" : " -mno-fma";
564+ const char *fma4 = has_fma4 ? " -mfma4" : " -mno-fma4";
565+ const char *xop = has_xop ? " -mxop" : " -mno-xop";
566+ const char *bmi = has_bmi ? " -mbmi" : " -mno-bmi";
567+ const char *tbm = has_tbm ? " -mtbm" : " -mno-tbm";
568+ const char *avx = has_avx ? " -mavx" : " -mno-avx";
569+ const char *sse4_2 = has_sse4_2 ? " -msse4.2" : " -mno-sse4.2";
570+ const char *sse4_1 = has_sse4_1 ? " -msse4.1" : " -mno-sse4.1";
571
572- if (has_avx)
573- options = concat (options, " -mavx", NULL);
574- else if (has_sse4_2)
575- options = concat (options, " -msse4.2", NULL);
576- else if (has_sse4_1)
577- options = concat (options, " -msse4.1", NULL);
578+ options = concat (options, cx16, sahf, movbe, ase, pclmul,
579+ popcnt, abm, lwp, fma, fma4, xop, bmi, tbm,
580+ avx, sse4_2, sse4_1, NULL);
581 }
582
583 done:
584
585=== modified file 'gcc/config/i386/i386.c'
586--- gcc/config/i386/i386.c 2011-05-03 13:06:06 +0000
587+++ gcc/config/i386/i386.c 2011-05-26 15:02:13 +0000
588@@ -4164,8 +4164,9 @@
589 }
590
591 /* For sane SSE instruction set generation we need fcomi instruction.
592- It is safe to enable all CMOVE instructions. */
593- if (TARGET_SSE)
594+ It is safe to enable all CMOVE instructions. Also, RDRAND intrinsic
595+ expands to a sequence that includes conditional move. */
596+ if (TARGET_SSE || TARGET_RDRND)
597 TARGET_CMOVE = 1;
598
599 /* Figure out what ASM_GENERATE_INTERNAL_LABEL builds as a prefix. */
600@@ -27450,6 +27451,12 @@
601 op0 = gen_reg_rtx (mode0);
602 emit_insn (GEN_FCN (icode) (op0));
603
604+ arg0 = CALL_EXPR_ARG (exp, 0);
605+ op1 = expand_normal (arg0);
606+ if (!address_operand (op1, VOIDmode))
607+ op1 = copy_addr_to_reg (op1);
608+ emit_move_insn (gen_rtx_MEM (mode0, op1), op0);
609+
610 op1 = gen_reg_rtx (SImode);
611 emit_move_insn (op1, CONST1_RTX (SImode));
612
613@@ -27464,17 +27471,13 @@
614 else
615 op2 = gen_rtx_SUBREG (SImode, op0, 0);
616
617+ if (target == 0)
618+ target = gen_reg_rtx (SImode);
619+
620 pat = gen_rtx_GEU (VOIDmode, gen_rtx_REG (CCCmode, FLAGS_REG),
621 const0_rtx);
622- emit_insn (gen_rtx_SET (VOIDmode, op1,
623+ emit_insn (gen_rtx_SET (VOIDmode, target,
624 gen_rtx_IF_THEN_ELSE (SImode, pat, op2, op1)));
625- emit_move_insn (target, op1);
626-
627- arg0 = CALL_EXPR_ARG (exp, 0);
628- op1 = expand_normal (arg0);
629- if (!address_operand (op1, VOIDmode))
630- op1 = copy_addr_to_reg (op1);
631- emit_move_insn (gen_rtx_MEM (mode0, op1), op0);
632 return target;
633
634 default:
635@@ -28252,7 +28255,7 @@
636 zero above. We only want to wind up preferring 80387 registers if
637 we plan on doing computation with them. */
638 if (TARGET_80387
639- && standard_80387_constant_p (x))
640+ && standard_80387_constant_p (x) > 0)
641 {
642 /* Limit class to non-sse. */
643 if (regclass == FLOAT_SSE_REGS)
644
645=== modified file 'gcc/config/i386/i386.md'
646--- gcc/config/i386/i386.md 2011-05-04 17:01:43 +0000
647+++ gcc/config/i386/i386.md 2011-05-26 15:02:13 +0000
648@@ -2836,6 +2836,7 @@
649 "optimize_function_for_speed_p (cfun)
650 && !(MEM_P (operands[0]) && MEM_P (operands[1]))
651 && (reload_in_progress || reload_completed
652+ || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
653 || GET_CODE (operands[1]) != CONST_DOUBLE
654 || memory_operand (operands[0], XFmode))"
655 {
656@@ -2865,7 +2866,8 @@
657 "optimize_function_for_size_p (cfun)
658 && !(MEM_P (operands[0]) && MEM_P (operands[1]))
659 && (reload_in_progress || reload_completed
660- || standard_80387_constant_p (operands[1])
661+ || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
662+ || standard_80387_constant_p (operands[1]) > 0
663 || GET_CODE (operands[1]) != CONST_DOUBLE
664 || memory_operand (operands[0], XFmode))"
665 {
666@@ -2911,7 +2913,7 @@
667 || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
668 || (!(TARGET_SSE2 && TARGET_SSE_MATH)
669 && optimize_function_for_size_p (cfun)
670- && standard_80387_constant_p (operands[1]))
671+ && standard_80387_constant_p (operands[1]) > 0)
672 || GET_CODE (operands[1]) != CONST_DOUBLE
673 || memory_operand (operands[0], DFmode))"
674 {
675@@ -3078,9 +3080,6 @@
676 && TARGET_INTEGER_DFMODE_MOVES
677 && (reload_in_progress || reload_completed
678 || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
679- || (!(TARGET_SSE2 && TARGET_SSE_MATH)
680- && optimize_function_for_size_p (cfun)
681- && standard_80387_constant_p (operands[1]))
682 || GET_CODE (operands[1]) != CONST_DOUBLE
683 || memory_operand (operands[0], DFmode))"
684 {
685@@ -3240,7 +3239,7 @@
686 [(set (match_operand:DF 0 "nonimmediate_operand"
687 "=f,m,f,*r ,o ,Y2*x,Y2*x,Y2*x ,m ")
688 (match_operand:DF 1 "general_operand"
689- "fm,f,G,*roF,*Fr,C ,Y2*x,mY2*x,Y2*x"))]
690+ "fm,f,G,*roF,F*r,C ,Y2*x,mY2*x,Y2*x"))]
691 "!TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
692 && (optimize_function_for_size_p (cfun)
693 || !TARGET_INTEGER_DFMODE_MOVES)
694@@ -3249,11 +3248,10 @@
695 || (!(TARGET_SSE2 && TARGET_SSE_MATH)
696 && optimize_function_for_size_p (cfun)
697 && !memory_operand (operands[0], DFmode)
698- && standard_80387_constant_p (operands[1]))
699+ && standard_80387_constant_p (operands[1]) > 0)
700 || GET_CODE (operands[1]) != CONST_DOUBLE
701 || ((optimize_function_for_size_p (cfun)
702- || !TARGET_MEMORY_MISMATCH_STALL
703- || reload_in_progress || reload_completed)
704+ || !TARGET_MEMORY_MISMATCH_STALL)
705 && memory_operand (operands[0], DFmode)))"
706 {
707 switch (which_alternative)
708@@ -3427,7 +3425,7 @@
709 && (reload_in_progress || reload_completed
710 || (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
711 || (!TARGET_SSE_MATH && optimize_function_for_size_p (cfun)
712- && standard_80387_constant_p (operands[1]))
713+ && standard_80387_constant_p (operands[1]) > 0)
714 || GET_CODE (operands[1]) != CONST_DOUBLE
715 || memory_operand (operands[0], SFmode))"
716 {
717@@ -3540,7 +3538,7 @@
718 }
719 else if (FP_REG_P (r))
720 {
721- if (!standard_80387_constant_p (c))
722+ if (standard_80387_constant_p (c) < 1)
723 FAIL;
724 }
725 else if (MMX_REG_P (r))
726@@ -3572,7 +3570,7 @@
727 }
728 else if (FP_REG_P (r))
729 {
730- if (!standard_80387_constant_p (c))
731+ if (standard_80387_constant_p (c) < 1)
732 FAIL;
733 }
734 else if (MMX_REG_P (r))
735
736=== modified file 'gcc/config/i386/sse.md'
737--- gcc/config/i386/sse.md 2011-05-04 17:01:43 +0000
738+++ gcc/config/i386/sse.md 2011-05-26 15:02:13 +0000
739@@ -4950,24 +4950,22 @@
740 ;; Avoid combining registers from different units in a single alternative,
741 ;; see comment above inline_secondary_memory_needed function in i386.c
742 (define_insn "sse2_loadhpd"
743- [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o")
744+ [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,o,o,o")
745 (vec_concat:V2DF
746 (vec_select:DF
747- (match_operand:V2DF 1 "nonimmediate_operand" " 0,0,x,0,0,0")
748+ (match_operand:V2DF 1 "nonimmediate_operand" " 0,0,0,0,0")
749 (parallel [(const_int 0)]))
750- (match_operand:DF 2 "nonimmediate_operand" " m,x,0,x,*f,r")))]
751+ (match_operand:DF 2 "nonimmediate_operand" " m,x,x,*f,r")))]
752 "TARGET_SSE2 && !(MEM_P (operands[1]) && MEM_P (operands[2]))"
753 "@
754 movhpd\t{%2, %0|%0, %2}
755 unpcklpd\t{%2, %0|%0, %2}
756- shufpd\t{$1, %1, %0|%0, %1, 1}
757 #
758 #
759 #"
760- [(set_attr "type" "ssemov,sselog,sselog,ssemov,fmov,imov")
761- (set_attr "prefix_data16" "1,*,*,*,*,*")
762- (set_attr "length_immediate" "*,*,1,*,*,*")
763- (set_attr "mode" "V1DF,V2DF,V2DF,DF,DF,DF")])
764+ [(set_attr "type" "ssemov,sselog,ssemov,fmov,imov")
765+ (set_attr "prefix_data16" "1,*,*,*,*")
766+ (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
767
768 (define_split
769 [(set (match_operand:V2DF 0 "memory_operand" "")
770@@ -12017,12 +12015,13 @@
771 "&& reload_completed"
772 [(const_int 0)]
773 {
774+ rtx op0 = operands[0];
775 rtx op1 = operands[1];
776- if (REG_P (op1))
777+ if (REG_P (op0))
778+ op0 = gen_rtx_REG (<avxhalfvecmode>mode, REGNO (op0));
779+ else
780 op1 = gen_rtx_REG (<MODE>mode, REGNO (op1));
781- else
782- op1 = gen_lowpart (<MODE>mode, op1);
783- emit_move_insn (operands[0], op1);
784+ emit_move_insn (op0, op1);
785 DONE;
786 })
787
788
789=== modified file 'gcc/config/i386/sync.md'
790--- gcc/config/i386/sync.md 2010-05-17 19:28:56 +0000
791+++ gcc/config/i386/sync.md 2011-05-26 15:02:13 +0000
792@@ -1,5 +1,5 @@
793 ;; GCC machine description for i386 synchronization instructions.
794-;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
795+;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
796 ;; Free Software Foundation, Inc.
797 ;;
798 ;; This file is part of GCC.
799@@ -164,13 +164,16 @@
800 "!TARGET_64BIT && TARGET_CMPXCHG8B && flag_pic"
801 "xchg{l}\t%%ebx, %3\;lock{%;} cmpxchg8b\t%1\;xchg{l}\t%%ebx, %3")
802
803+;; For operand 2 nonmemory_operand predicate is used instead of
804+;; register_operand to allow combiner to better optimize atomic
805+;; additions of constants.
806 (define_insn "sync_old_add<mode>"
807 [(set (match_operand:SWI 0 "register_operand" "=<r>")
808 (unspec_volatile:SWI
809 [(match_operand:SWI 1 "memory_operand" "+m")] UNSPECV_XCHG))
810 (set (match_dup 1)
811 (plus:SWI (match_dup 1)
812- (match_operand:SWI 2 "register_operand" "0")))
813+ (match_operand:SWI 2 "nonmemory_operand" "0")))
814 (clobber (reg:CC FLAGS_REG))]
815 "TARGET_XADD"
816 "lock{%;} xadd{<imodesuffix>}\t{%0, %1|%1, %0}")
817
818=== modified file 'gcc/config/rs6000/rs6000.c'
819--- gcc/config/rs6000/rs6000.c 2011-05-05 21:32:40 +0000
820+++ gcc/config/rs6000/rs6000.c 2011-05-26 15:02:13 +0000
821@@ -6545,10 +6545,11 @@
822
823 if (model == TLS_MODEL_GLOBAL_DYNAMIC)
824 {
825- r3 = gen_rtx_REG (Pmode, 3);
826 tga = rs6000_tls_get_addr ();
827- emit_library_call_value (tga, dest, LCT_CONST, Pmode, 1, r3, Pmode);
828+ emit_library_call_value (tga, dest, LCT_CONST, Pmode,
829+ 1, const0_rtx, Pmode);
830
831+ r3 = gen_rtx_REG (Pmode, 3);
832 if (DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
833 insn = gen_tls_gd_aix64 (r3, got, addr, tga, const0_rtx);
834 else if (DEFAULT_ABI == ABI_AIX && !TARGET_64BIT)
835@@ -6565,11 +6566,12 @@
836 }
837 else if (model == TLS_MODEL_LOCAL_DYNAMIC)
838 {
839- r3 = gen_rtx_REG (Pmode, 3);
840 tga = rs6000_tls_get_addr ();
841 tmp1 = gen_reg_rtx (Pmode);
842- emit_library_call_value (tga, tmp1, LCT_CONST, Pmode, 1, r3, Pmode);
843+ emit_library_call_value (tga, tmp1, LCT_CONST, Pmode,
844+ 1, const0_rtx, Pmode);
845
846+ r3 = gen_rtx_REG (Pmode, 3);
847 if (DEFAULT_ABI == ABI_AIX && TARGET_64BIT)
848 insn = gen_tls_ld_aix64 (r3, got, tga, const0_rtx);
849 else if (DEFAULT_ABI == ABI_AIX && !TARGET_64BIT)
850@@ -7889,7 +7891,7 @@
851
852 /* Nonzero if we can use an AltiVec register to pass this arg. */
853 #define USE_ALTIVEC_FOR_ARG_P(CUM,MODE,TYPE,NAMED) \
854- ((ALTIVEC_VECTOR_MODE (MODE) || VSX_VECTOR_MODE (MODE)) \
855+ (ALTIVEC_OR_VSX_VECTOR_MODE (MODE) \
856 && (CUM)->vregno <= ALTIVEC_ARG_MAX_REG \
857 && TARGET_ALTIVEC_ABI \
858 && (NAMED))
859@@ -8089,8 +8091,7 @@
860 }
861 if (SCALAR_FLOAT_MODE_P (return_mode))
862 rs6000_passes_float = true;
863- else if (ALTIVEC_VECTOR_MODE (return_mode)
864- || VSX_VECTOR_MODE (return_mode)
865+ else if (ALTIVEC_OR_VSX_VECTOR_MODE (return_mode)
866 || SPE_VECTOR_MODE (return_mode))
867 rs6000_passes_vector = true;
868 }
869@@ -8188,7 +8189,7 @@
870 existing library interfaces.
871
872 Doubleword align SPE vectors.
873- Quadword align Altivec vectors.
874+ Quadword align Altivec/VSX vectors.
875 Quadword align large synthetic vector types. */
876
877 static unsigned int
878@@ -8205,7 +8206,7 @@
879 && int_size_in_bytes (type) >= 8
880 && int_size_in_bytes (type) < 16))
881 return 64;
882- else if ((ALTIVEC_VECTOR_MODE (mode) || VSX_VECTOR_MODE (mode))
883+ else if (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
884 || (type && TREE_CODE (type) == VECTOR_TYPE
885 && int_size_in_bytes (type) >= 16))
886 return 128;
887@@ -8425,7 +8426,7 @@
888 {
889 if (SCALAR_FLOAT_MODE_P (mode))
890 rs6000_passes_float = true;
891- else if (named && (ALTIVEC_VECTOR_MODE (mode) || VSX_VECTOR_MODE (mode)))
892+ else if (named && ALTIVEC_OR_VSX_VECTOR_MODE (mode))
893 rs6000_passes_vector = true;
894 else if (SPE_VECTOR_MODE (mode)
895 && !cum->stdarg
896@@ -8435,8 +8436,7 @@
897 #endif
898
899 if (TARGET_ALTIVEC_ABI
900- && (ALTIVEC_VECTOR_MODE (mode)
901- || VSX_VECTOR_MODE (mode)
902+ && (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
903 || (type && TREE_CODE (type) == VECTOR_TYPE
904 && int_size_in_bytes (type) == 16)))
905 {
906@@ -9054,8 +9054,7 @@
907 else
908 return gen_rtx_REG (mode, cum->vregno);
909 else if (TARGET_ALTIVEC_ABI
910- && (ALTIVEC_VECTOR_MODE (mode)
911- || VSX_VECTOR_MODE (mode)
912+ && (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
913 || (type && TREE_CODE (type) == VECTOR_TYPE
914 && int_size_in_bytes (type) == 16)))
915 {
916@@ -19981,7 +19980,7 @@
917
918 /* Some cases that need register indexed addressing. */
919 if ((TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode))
920- || (TARGET_VSX && VSX_VECTOR_MODE (mode))
921+ || (TARGET_VSX && ALTIVEC_OR_VSX_VECTOR_MODE (mode))
922 || (TARGET_E500_DOUBLE && mode == DFmode)
923 || (TARGET_SPE_ABI
924 && SPE_VECTOR_MODE (mode)
925@@ -27264,13 +27263,12 @@
926 else if (TREE_CODE (valtype) == COMPLEX_TYPE
927 && targetm.calls.split_complex_arg)
928 return rs6000_complex_function_value (mode);
929+ /* VSX is a superset of Altivec and adds V2DImode/V2DFmode. Since the same
930+ return register is used in both cases, and we won't see V2DImode/V2DFmode
931+ for pure altivec, combine the two cases. */
932 else if (TREE_CODE (valtype) == VECTOR_TYPE
933 && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI
934- && ALTIVEC_VECTOR_MODE (mode))
935- regno = ALTIVEC_ARG_RETURN;
936- else if (TREE_CODE (valtype) == VECTOR_TYPE
937- && TARGET_VSX && TARGET_ALTIVEC_ABI
938- && VSX_VECTOR_MODE (mode))
939+ && ALTIVEC_OR_VSX_VECTOR_MODE (mode))
940 regno = ALTIVEC_ARG_RETURN;
941 else if (TARGET_E500_DOUBLE && TARGET_HARD_FLOAT
942 && (mode == DFmode || mode == DCmode
943@@ -27310,12 +27308,12 @@
944 && TARGET_HARD_FLOAT && TARGET_FPRS
945 && ((TARGET_SINGLE_FLOAT && mode == SFmode) || TARGET_DOUBLE_FLOAT))
946 regno = FP_ARG_RETURN;
947- else if (ALTIVEC_VECTOR_MODE (mode)
948+ /* VSX is a superset of Altivec and adds V2DImode/V2DFmode. Since the same
949+ return register is used in both cases, and we won't see V2DImode/V2DFmode
950+ for pure altivec, combine the two cases. */
951+ else if (ALTIVEC_OR_VSX_VECTOR_MODE (mode)
952 && TARGET_ALTIVEC && TARGET_ALTIVEC_ABI)
953 regno = ALTIVEC_ARG_RETURN;
954- else if (VSX_VECTOR_MODE (mode)
955- && TARGET_VSX && TARGET_ALTIVEC_ABI)
956- regno = ALTIVEC_ARG_RETURN;
957 else if (COMPLEX_MODE_P (mode) && targetm.calls.split_complex_arg)
958 return rs6000_complex_function_value (mode);
959 else if (TARGET_E500_DOUBLE && TARGET_HARD_FLOAT
960
961=== modified file 'gcc/config/rs6000/rs6000.h'
962--- gcc/config/rs6000/rs6000.h 2011-03-07 19:27:09 +0000
963+++ gcc/config/rs6000/rs6000.h 2011-05-26 15:02:13 +0000
964@@ -1007,10 +1007,9 @@
965
966 /* When setting up caller-save slots (MODE == VOIDmode) ensure we allocate
967 enough space to account for vectors in FP regs. */
968-#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
969- (TARGET_VSX \
970- && ((MODE) == VOIDmode || VSX_VECTOR_MODE (MODE) \
971- || ALTIVEC_VECTOR_MODE (MODE)) \
972+#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
973+ (TARGET_VSX \
974+ && ((MODE) == VOIDmode || ALTIVEC_OR_VSX_VECTOR_MODE (MODE)) \
975 && FP_REGNO_P (REGNO) \
976 ? V2DFmode \
977 : choose_hard_reg_mode ((REGNO), (NREGS), false))
978@@ -1026,25 +1025,16 @@
979 ((MODE) == V4SFmode \
980 || (MODE) == V2DFmode) \
981
982-#define VSX_SCALAR_MODE(MODE) \
983- ((MODE) == DFmode)
984-
985-#define VSX_MODE(MODE) \
986- (VSX_VECTOR_MODE (MODE) \
987- || VSX_SCALAR_MODE (MODE))
988-
989-#define VSX_MOVE_MODE(MODE) \
990- (VSX_VECTOR_MODE (MODE) \
991- || VSX_SCALAR_MODE (MODE) \
992- || ALTIVEC_VECTOR_MODE (MODE) \
993- || (MODE) == TImode)
994-
995 #define ALTIVEC_VECTOR_MODE(MODE) \
996 ((MODE) == V16QImode \
997 || (MODE) == V8HImode \
998 || (MODE) == V4SFmode \
999 || (MODE) == V4SImode)
1000
1001+#define ALTIVEC_OR_VSX_VECTOR_MODE(MODE) \
1002+ (ALTIVEC_VECTOR_MODE (MODE) || VSX_VECTOR_MODE (MODE) \
1003+ || (MODE) == V2DImode)
1004+
1005 #define SPE_VECTOR_MODE(MODE) \
1006 ((MODE) == V4HImode \
1007 || (MODE) == V2SFmode \
1008@@ -1080,10 +1070,10 @@
1009 ? ALTIVEC_VECTOR_MODE (MODE2) \
1010 : ALTIVEC_VECTOR_MODE (MODE2) \
1011 ? ALTIVEC_VECTOR_MODE (MODE1) \
1012- : VSX_VECTOR_MODE (MODE1) \
1013- ? VSX_VECTOR_MODE (MODE2) \
1014- : VSX_VECTOR_MODE (MODE2) \
1015- ? VSX_VECTOR_MODE (MODE1) \
1016+ : ALTIVEC_OR_VSX_VECTOR_MODE (MODE1) \
1017+ ? ALTIVEC_OR_VSX_VECTOR_MODE (MODE2) \
1018+ : ALTIVEC_OR_VSX_VECTOR_MODE (MODE2) \
1019+ ? ALTIVEC_OR_VSX_VECTOR_MODE (MODE1) \
1020 : 1)
1021
1022 /* Post-reload, we can't use any new AltiVec registers, as we already
1023
1024=== modified file 'gcc/config/rx/rx-protos.h'
1025--- gcc/config/rx/rx-protos.h 2011-03-29 12:27:07 +0000
1026+++ gcc/config/rx/rx-protos.h 2011-05-26 15:02:13 +0000
1027@@ -30,7 +30,7 @@
1028 extern int rx_initial_elimination_offset (int, int);
1029
1030 #ifdef RTX_CODE
1031-extern int rx_align_for_label (void);
1032+extern int rx_align_for_label (rtx, int);
1033 extern void rx_emit_stack_popm (rtx *, bool);
1034 extern void rx_emit_stack_pushm (rtx *);
1035 extern void rx_expand_epilogue (bool);
1036@@ -38,7 +38,7 @@
1037 extern bool rx_is_legitimate_constant (rtx);
1038 extern bool rx_is_restricted_memory_address (rtx, Mmode);
1039 extern bool rx_match_ccmode (rtx, Mmode);
1040-extern void rx_notice_update_cc (rtx body, rtx insn);
1041+extern void rx_notice_update_cc (rtx, rtx);
1042 extern void rx_split_cbranch (Mmode, Rcode, rtx, rtx, rtx);
1043 extern Mmode rx_select_cc_mode (Rcode, rtx, rtx);
1044 #endif
1045
1046=== modified file 'gcc/config/rx/rx.c'
1047--- gcc/config/rx/rx.c 2011-03-29 12:27:07 +0000
1048+++ gcc/config/rx/rx.c 2011-05-26 15:02:13 +0000
1049@@ -2451,8 +2451,7 @@
1050
1051 default:
1052 /* FIXME: Can this ever happen ? */
1053- abort ();
1054- return false;
1055+ gcc_unreachable ();
1056 }
1057 break;
1058
1059@@ -2593,9 +2592,11 @@
1060 }
1061
1062
1063 static int
1064-rx_memory_move_cost (enum machine_mode mode, reg_class_t regclass, bool in)
1065+rx_memory_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
1066+ reg_class_t regclass ATTRIBUTE_UNUSED,
1067+ bool in)
1068 {
1069- return 2 + memory_move_secondary_cost (mode, regclass, in);
1070+ return (in ? 2 : 0) + REGISTER_MOVE_COST (mode, regclass, regclass);
1071 }
1072
1073 /* Convert a CC_MODE to the set of flags that it represents. */
1074@@ -2752,8 +2753,15 @@
1075
1076
1077
1078 int
1079-rx_align_for_label (void)
1080+rx_align_for_label (rtx lab, int uses_threshold)
1081 {
1082+ /* This is a simple heuristic to guess when an alignment would not be useful
1083+ because the delay due to the inserted NOPs would be greater than the delay
1084+ due to the misaligned branch. If uses_threshold is zero then the alignment
1085+ is always useful. */
1086+ if (LABEL_P (lab) && LABEL_NUSES (lab) < uses_threshold)
1087+ return 0;
1088+
1089 return optimize_size ? 1 : 3;
1090 }
1091
1092@@ -2768,7 +2776,7 @@
1093 op = lab;
1094 do
1095 {
1096- op = next_nonnote_insn (op);
1097+ op = next_nonnote_nondebug_insn (op);
1098 }
1099 while (op && (LABEL_P (op)
1100 || (INSN_P (op) && GET_CODE (PATTERN (op)) == USE)));
1101
1102=== modified file 'gcc/config/rx/rx.h'
1103--- gcc/config/rx/rx.h 2011-03-29 12:27:07 +0000
1104+++ gcc/config/rx/rx.h 2011-05-26 15:02:13 +0000
1105@@ -155,7 +155,7 @@
1106
1107 #define LEGITIMATE_CONSTANT_P(X) rx_is_legitimate_constant (X)
1108
1109-#define HAVE_PRE_DECCREMENT 1
1110+#define HAVE_PRE_DECREMENT 1
1111 #define HAVE_POST_INCREMENT 1
1112
1113 #define MOVE_RATIO(SPEED) ((SPEED) ? 4 : 2)
1114@@ -617,7 +617,13 @@
1115
1116 #define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode((OP), (X), (Y))
1117
1118-#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label ()
1119+/* Compute the alignment needed for label X in various situations.
1120+ If the user has specified an alignment then honour that, otherwise
1121+ use rx_align_for_label. */
1122+#define JUMP_ALIGN(x) (align_jumps ? align_jumps : rx_align_for_label (x, 0))
1123+#define LABEL_ALIGN(x) (align_labels ? align_labels : rx_align_for_label (x, 3))
1124+#define LOOP_ALIGN(x) (align_loops ? align_loops : rx_align_for_label (x, 2))
1125+#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label (x, 0)
1126
1127 #define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
1128 do \
1129
1130=== modified file 'gcc/config/rx/rx.md'
1131--- gcc/config/rx/rx.md 2011-03-29 12:27:07 +0000
1132+++ gcc/config/rx/rx.md 2011-05-26 15:02:13 +0000
1133@@ -904,6 +904,39 @@
1134 (set_attr "length" "3,4,5,6,7,6")]
1135 )
1136
1137+;; Peepholes to match:
1138+;; (set (reg A) (reg B))
1139+;; (set (CC) (compare:CC (reg A/reg B) (const_int 0)))
1140+;; and replace them with the addsi3_flags pattern, using an add
1141+;; of zero to copy the register and set the condition code bits.
1142+(define_peephole2
1143+ [(set (match_operand:SI 0 "register_operand")
1144+ (match_operand:SI 1 "register_operand"))
1145+ (set (reg:CC CC_REG)
1146+ (compare:CC (match_dup 0)
1147+ (const_int 0)))]
1148+ ""
1149+ [(parallel [(set (match_dup 0)
1150+ (plus:SI (match_dup 1) (const_int 0)))
1151+ (set (reg:CC_ZSC CC_REG)
1152+ (compare:CC_ZSC (plus:SI (match_dup 1) (const_int 0))
1153+ (const_int 0)))])]
1154+)
1155+
1156+(define_peephole2
1157+ [(set (match_operand:SI 0 "register_operand")
1158+ (match_operand:SI 1 "register_operand"))
1159+ (set (reg:CC CC_REG)
1160+ (compare:CC (match_dup 1)
1161+ (const_int 0)))]
1162+ ""
1163+ [(parallel [(set (match_dup 0)
1164+ (plus:SI (match_dup 1) (const_int 0)))
1165+ (set (reg:CC_ZSC CC_REG)
1166+ (compare:CC_ZSC (plus:SI (match_dup 1) (const_int 0))
1167+ (const_int 0)))])]
1168+)
1169+
1170 (define_expand "adddi3"
1171 [(set (match_operand:DI 0 "register_operand")
1172 (plus:DI (match_operand:DI 1 "register_operand")
1173@@ -1668,6 +1701,35 @@
1174 (extend_types:SI (match_dup 1))))]
1175 )
1176
1177+;; Convert:
1178+;; (set (reg1) (sign_extend (mem))
1179+;; (set (reg2) (zero_extend (reg1))
1180+;; into
1181+;; (set (reg2) (zero_extend (mem)))
1182+(define_peephole2
1183+ [(set (match_operand:SI 0 "register_operand")
1184+ (sign_extend:SI (match_operand:small_int_modes 1 "memory_operand")))
1185+ (set (match_operand:SI 2 "register_operand")
1186+ (zero_extend:SI (match_operand:small_int_modes 3 "register_operand")))]
1187+ "REGNO (operands[0]) == REGNO (operands[3])
1188+ && (REGNO (operands[0]) == REGNO (operands[2])
1189+ || peep2_regno_dead_p (2, REGNO (operands[0])))"
1190+ [(set (match_dup 2)
1191+ (zero_extend:SI (match_dup 1)))]
1192+)
1193+
1194+;; Remove the redundant sign extension from:
1195+;; (set (reg) (extend (mem)))
1196+;; (set (reg) (extend (reg)))
1197+(define_peephole2
1198+ [(set (match_operand:SI 0 "register_operand")
1199+ (extend_types:SI (match_operand:small_int_modes 1 "memory_operand")))
1200+ (set (match_dup 0)
1201+ (extend_types:SI (match_operand:small_int_modes 2 "register_operand")))]
1202+ "REGNO (operands[0]) == REGNO (operands[2])"
1203+ [(set (match_dup 0) (extend_types:SI (match_dup 1)))]
1204+)
1205+
1206 (define_insn "*comparesi3_<extend_types:code><small_int_modes:mode>"
1207 [(set (reg:CC CC_REG)
1208 (compare:CC (match_operand:SI 0 "register_operand" "=r")
1209@@ -1769,7 +1831,7 @@
1210 )
1211
1212 (define_insn "*bitset_in_memory"
1213- [(set (match_operand:QI 0 "memory_operand" "+Q")
1214+ [(set (match_operand:QI 0 "rx_restricted_mem_operand" "+Q")
1215 (ior:QI (ashift:QI (const_int 1)
1216 (match_operand:QI 1 "nonmemory_operand" "ri"))
1217 (match_dup 0)))]
1218@@ -1790,7 +1852,7 @@
1219 )
1220
1221 (define_insn "*bitinvert_in_memory"
1222- [(set (match_operand:QI 0 "memory_operand" "+Q")
1223+ [(set (match_operand:QI 0 "rx_restricted_mem_operand" "+Q")
1224 (xor:QI (ashift:QI (const_int 1)
1225 (match_operand:QI 1 "nonmemory_operand" "ri"))
1226 (match_dup 0)))]
1227@@ -1813,7 +1875,7 @@
1228 )
1229
1230 (define_insn "*bitclr_in_memory"
1231- [(set (match_operand:QI 0 "memory_operand" "+Q")
1232+ [(set (match_operand:QI 0 "rx_restricted_mem_operand" "+Q")
1233 (and:QI (not:QI
1234 (ashift:QI
1235 (const_int 1)
1236
1237=== modified file 'gcc/config/s390/s390.c'
1238--- gcc/config/s390/s390.c 2011-03-29 11:57:40 +0000
1239+++ gcc/config/s390/s390.c 2011-05-26 15:02:13 +0000
1240@@ -9281,16 +9281,16 @@
1241
1242 if (TARGET_64BIT)
1243 {
1244- output_asm_insn ("basr\t%1,0", op);
1245- output_asm_insn ("lmg\t%0,%1,14(%1)", op);
1246- output_asm_insn ("br\t%1", op);
1247+ output_asm_insn ("basr\t%1,0", op); /* 2 byte */
1248+ output_asm_insn ("lmg\t%0,%1,14(%1)", op); /* 6 byte */
1249+ output_asm_insn ("br\t%1", op); /* 2 byte */
1250 ASM_OUTPUT_SKIP (file, (HOST_WIDE_INT)(TRAMPOLINE_SIZE - 10));
1251 }
1252 else
1253 {
1254- output_asm_insn ("basr\t%1,0", op);
1255- output_asm_insn ("lm\t%0,%1,6(%1)", op);
1256- output_asm_insn ("br\t%1", op);
1257+ output_asm_insn ("basr\t%1,0", op); /* 2 byte */
1258+ output_asm_insn ("lm\t%0,%1,6(%1)", op); /* 4 byte */
1259+ output_asm_insn ("br\t%1", op); /* 2 byte */
1260 ASM_OUTPUT_SKIP (file, (HOST_WIDE_INT)(TRAMPOLINE_SIZE - 8));
1261 }
1262 }
1263@@ -9306,11 +9306,11 @@
1264 rtx mem;
1265
1266 emit_block_move (m_tramp, assemble_trampoline_template (),
1267- GEN_INT (2*UNITS_PER_WORD), BLOCK_OP_NORMAL);
1268+ GEN_INT (2 * UNITS_PER_LONG), BLOCK_OP_NORMAL);
1269
1270- mem = adjust_address (m_tramp, Pmode, 2*UNITS_PER_WORD);
1271+ mem = adjust_address (m_tramp, Pmode, 2 * UNITS_PER_LONG);
1272 emit_move_insn (mem, cxt);
1273- mem = adjust_address (m_tramp, Pmode, 3*UNITS_PER_WORD);
1274+ mem = adjust_address (m_tramp, Pmode, 3 * UNITS_PER_LONG);
1275 emit_move_insn (mem, fnaddr);
1276 }
1277
1278
1279=== modified file 'gcc/config/s390/s390.md'
1280--- gcc/config/s390/s390.md 2011-04-15 12:43:40 +0000
1281+++ gcc/config/s390/s390.md 2011-05-26 15:02:13 +0000
1282@@ -2026,6 +2026,7 @@
1283 [(set (match_dup 0) (match_dup 1))]
1284 {
1285 rtx addr = operand_subword (operands[0], 1, 0, <MODE>mode);
1286+ addr = gen_lowpart (Pmode, addr);
1287 s390_load_address (addr, XEXP (operands[1], 0));
1288 operands[1] = replace_equiv_address (operands[1], addr);
1289 })
1290
1291=== modified file 'gcc/config/sparc/sp64-elf.h'
1292--- gcc/config/sparc/sp64-elf.h 2011-01-14 18:41:05 +0000
1293+++ gcc/config/sparc/sp64-elf.h 2011-05-26 15:02:13 +0000
1294@@ -53,18 +53,13 @@
1295 %{mlittle-endian:-EL} \
1296 "
1297
1298-/* We need something a little simpler for the embedded environment.
1299- Profiling doesn't really work yet so we just copy the default. */
1300 #undef STARTFILE_SPEC
1301-#define STARTFILE_SPEC "\
1302-%{!shared:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}} \
1303-crtbegin.o%s \
1304-"
1305+#define STARTFILE_SPEC "crt0.o%s crti.o%s crtbegin.o%s"
1306
1307 #undef ENDFILE_SPEC
1308 #define ENDFILE_SPEC \
1309 "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
1310- crtend.o%s"
1311+ crtend.o%s crtn.o%s"
1312
1313 /* Use the default (for now). */
1314 #undef LIB_SPEC
1315
1316=== modified file 'gcc/config/sparc/sparc.c'
1317--- gcc/config/sparc/sparc.c 2011-03-11 16:51:29 +0000
1318+++ gcc/config/sparc/sparc.c 2011-05-26 15:02:13 +0000
1319@@ -970,6 +970,12 @@
1320 ? 64 : 32),
1321 global_options.x_param_values,
1322 global_options_set.x_param_values);
1323+
1324+ /* Disable save slot sharing for call-clobbered registers by default.
1325+ The IRA sharing algorithm works on single registers only and this
1326+ pessimizes for double floating-point registers. */
1327+ if (!global_options_set.x_flag_ira_share_save_slots)
1328+ flag_ira_share_save_slots = 0;
1329 }
1330
1331
1332 /* Miscellaneous utilities. */
1333@@ -2845,11 +2851,6 @@
1334 if (get_attr_length (trial) != 1)
1335 return 0;
1336
1337- /* If there are any call-saved registers, we should scan TRIAL if it
1338- does not reference them. For now just make it easy. */
1339- if (num_gfregs)
1340- return 0;
1341-
1342 /* If the function uses __builtin_eh_return, the eh_return machinery
1343 occupies the delay slot. */
1344 if (crtl->calls_eh_return)
1345@@ -4421,7 +4422,7 @@
1346 emit_move_insn (gen_rtx_REG (mode, regno), mem);
1347
1348 /* Always preserve double-word alignment. */
1349- offset = (offset + 7) & -8;
1350+ offset = (offset + 8) & -8;
1351 }
1352 }
1353
1354@@ -4528,7 +4529,7 @@
1355 example, the regrename pass has special provisions to not rename to
1356 non-leaf registers in a leaf function. */
1357 sparc_leaf_function_p
1358- = optimize > 0 && leaf_function_p () && only_leaf_regs_used ();
1359+ = optimize > 0 && current_function_is_leaf && only_leaf_regs_used ();
1360
1361 /* Need to use actual_fsize, since we are also allocating
1362 space for our callee (and our own register save area). */
1363@@ -4658,6 +4659,7 @@
1364 sparc_can_use_return_insn_p (void)
1365 {
1366 return sparc_prologue_data_valid_p
1367+ && num_gfregs == 0
1368 && (actual_fsize == 0 || !sparc_leaf_function_p);
1369 }
1370
1371@@ -9680,7 +9682,7 @@
1372 bool
1373 sparc_frame_pointer_required (void)
1374 {
1375- return !(leaf_function_p () && only_leaf_regs_used ());
1376+ return !(current_function_is_leaf && only_leaf_regs_used ());
1377 }
1378
1379 /* The way this is structured, we can't eliminate SFP in favor of SP
1380
1381=== modified file 'gcc/config/sparc/sparc.md'
1382--- gcc/config/sparc/sparc.md 2010-12-19 12:19:12 +0000
1383+++ gcc/config/sparc/sparc.md 2011-05-26 15:02:13 +0000
1384@@ -6507,8 +6507,8 @@
1385 (const_int 4)))])
1386
1387 ;; For __builtin_setjmp we need to flush register windows iff the function
1388-;; calls alloca as well, because otherwise the register window might be
1389-;; saved after %sp adjustment and thus setjmp would crash
1390+;; calls alloca as well, because otherwise the current register window might
1391+;; be saved after the %sp adjustment and thus setjmp would crash.
1392 (define_expand "builtin_setjmp_setup"
1393 [(match_operand 0 "register_operand" "r")]
1394 ""
1395@@ -6547,19 +6547,26 @@
1396 (eq_attr "pic" "true")
1397 (const_int 4)] (const_int 3)))])
1398
1399-;; Pattern for use after a setjmp to store FP and the return register
1400-;; into the stack area.
1401+;; Pattern for use after a setjmp to store registers into the save area.
1402
1403 (define_expand "setjmp"
1404 [(const_int 0)]
1405 ""
1406 {
1407 rtx mem;
1408-
1409+
1410+ if (flag_pic)
1411+ {
1412+ mem = gen_rtx_MEM (Pmode,
1413+ plus_constant (stack_pointer_rtx,
1414+ SPARC_STACK_BIAS + 7 * UNITS_PER_WORD));
1415+ emit_insn (gen_rtx_SET (VOIDmode, mem, pic_offset_table_rtx));
1416+ }
1417+
1418 mem = gen_rtx_MEM (Pmode,
1419 plus_constant (stack_pointer_rtx,
1420 SPARC_STACK_BIAS + 14 * UNITS_PER_WORD));
1421- emit_insn (gen_rtx_SET (VOIDmode, mem, frame_pointer_rtx));
1422+ emit_insn (gen_rtx_SET (VOIDmode, mem, hard_frame_pointer_rtx));
1423
1424 mem = gen_rtx_MEM (Pmode,
1425 plus_constant (stack_pointer_rtx,
1426
1427=== added file 'gcc/config/sparc/t-crtin'
1428--- gcc/config/sparc/t-crtin 1970-01-01 00:00:00 +0000
1429+++ gcc/config/sparc/t-crtin 2011-05-26 15:02:13 +0000
1430@@ -0,0 +1,6 @@
1431+EXTRA_PARTS += crti.o crtn.o
1432+
1433+$(T)crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
1434+ $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm
1435+$(T)crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
1436+ $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm
1437
1438=== modified file 'gcc/config/sparc/t-linux64'
1439--- gcc/config/sparc/t-linux64 2011-01-03 20:52:22 +0000
1440+++ gcc/config/sparc/t-linux64 2011-05-26 15:02:13 +0000
1441@@ -31,9 +31,6 @@
1442 LIBGCC = stmp-multilib
1443 INSTALL_LIBGCC = install-multilib
1444
1445-EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o \
1446- crtfastmath.o
1447-
1448 CRTSTUFF_T_CFLAGS = `if test x$$($(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) \
1449 -print-multi-os-directory) \
1450 = x../lib64; then echo -mcmodel=medany; fi`
1451
1452=== modified file 'gcc/config/sparc/t-sol2'
1453--- gcc/config/sparc/t-sol2 2009-04-21 18:03:23 +0000
1454+++ gcc/config/sparc/t-sol2 2011-05-26 15:02:13 +0000
1455@@ -26,10 +26,6 @@
1456 # Assemble startup files.
1457 $(T)crt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES)
1458 $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm
1459-$(T)crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
1460- $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm
1461-$(T)crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
1462- $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm
1463 $(T)gcrt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES)
1464 $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -DGCRT1 -o $(T)gcrt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm
1465
1466
1467=== modified file 'gcc/config/sparc/t-sol2-64'
1468--- gcc/config/sparc/t-sol2-64 2010-03-10 23:25:37 +0000
1469+++ gcc/config/sparc/t-sol2-64 2011-05-26 15:02:13 +0000
1470@@ -5,6 +5,3 @@
1471
1472 LIBGCC = stmp-multilib
1473 INSTALL_LIBGCC = install-multilib
1474-
1475-EXTRA_MULTILIB_PARTS=crtbegin.o crtend.o gmon.o crt1.o crti.o crtn.o gcrt1.o \
1476- crtfastmath.o
1477
1478=== modified file 'gcc/cp/ChangeLog'
1479--- gcc/cp/ChangeLog 2011-05-06 08:34:10 +0000
1480+++ gcc/cp/ChangeLog 2011-05-26 15:02:13 +0000
1481@@ -1,3 +1,201 @@
1482+2011-05-25 Jason Merrill <jason@redhat.com>
1483+
1484+ PR c++/44994
1485+ PR c++/49156
1486+ * error.c (dump_template_bindings): Set processing_template_decl
1487+ for a partial instantiation.
1488+
1489+ PR c++/45401
1490+ * decl.c (grokdeclarator): Don't change type when adding rvalue ref
1491+ to another reference type.
1492+
1493+2011-05-26 Fabien Chêne <fabien@gcc.gnu.org>
1494+ * init.c (diagnose_uninitialized_cst_or_ref_member_1): Use
1495+ permerror instead of error, adjust the error count.
1496+
1497+2011-05-25 Jason Merrill <jason@redhat.com>
1498+
1499+ PR c++/44311
1500+ * decl.c (case_conversion): New.
1501+ (finish_case_label): Use it.
1502+
1503+ PR c++/45698
1504+ * pt.c (dependent_template_arg_p): See through ARGUMENT_PACK_SELECT.
1505+
1506+ PR c++/46145
1507+ * decl.c (grokdeclarator): Complain about auto typedef.
1508+
1509+ PR c++/46245
1510+ * decl.c (grokdeclarator): Complain later for auto parameter.
1511+ * pt.c (splice_late_return_type): Handle use in a template
1512+ type-parameter.
1513+
1514+ PR c++/46696
1515+ * typeck.c (cp_build_modify_expr): Check DECL_DEFAULTED_FN.
1516+
1517+ PR c++/47184
1518+ * parser.c (cp_parser_parameter_declaration): Recognize
1519+ list-initialization.
1520+ (cp_parser_direct_declarator): Check for the closing
1521+ paren before parsing definitely.
1522+
1523+ PR c++/48935
1524+ * parser.c (cp_parser_constructor_declarator_p): Don't check
1525+ constructor_name_p for enums.
1526+ (cp_parser_diagnose_invalid_type_name): Correct error message.
1527+
1528+2011-05-25 Jason Merrill <jason@redhat.com>
1529+
1530+ PR c++/45418
1531+ * init.c (perform_member_init): Handle list-initialization
1532+ of array of non-trivial class type.
1533+
1534+ PR c++/45080
1535+ * pt.c (instantiate_class_template_1): Call maybe_add_lambda_conv_op.
1536+ * semantics.c (lambda_function): Check COMPLETE_OR_OPEN_TYPE_P.
1537+
1538+ PR c++/48292
1539+ * pt.c (tsubst_decl) [PARM_DECL]: Handle partial instantiation of
1540+ function parameter pack.
1541+ (tsubst_pack_expansion): Likewise.
1542+
1543+2011-05-25 Jakub Jelinek <jakub@redhat.com>
1544+
1545+ PR c++/49136
1546+ * semantics.c (cxx_eval_bit_field_ref): Handle the
1547+ case when BIT_FIELD_REF doesn't cover only a single field.
1548+
1549+2011-05-24 Jason Merrill <jason@redhat.com>
1550+
1551+ PR c++/49042
1552+ * pt.c (get_mostly_instantiated_function_type): Use
1553+ push_deferring_access_checks rather than set flag_access_control.
1554+
1555+ PR c++/48884
1556+ * pt.c (fn_type_unification): Disable access control during
1557+ substitution.
1558+
1559+ PR c++/49105
1560+ * typeck.c (build_const_cast_1): Handle rvalue references.
1561+
1562+ PR c++/47263
1563+ * decl.c (use_eh_spec_block): Do use an EH spec block for a
1564+ lambda op().
1565+
1566+ PR c++/47336
1567+ * error.c (dump_template_bindings): Suppress access control.
1568+
1569+ PR c++/47544
1570+ * pt.c (instantiate_decl): Handle =default.
1571+
1572+ PR c++/48617
1573+ * pt.c (invalid_nontype_parm_type_p): Allow DECLTYPE_TYPE.
1574+
1575+2011-05-22 Jason Merrill <jason@redhat.com>
1576+
1577+ PR c++/48647
1578+ * typeck.c (composite_pointer_type_r): Return error_mark_node
1579+ on error in SFINAE context.
1580+
1581+2011-05-20 Jason Merrill <jason@redhat.com>
1582+
1583+ PR c++/48945
1584+ * decl.c (revert_static_member_fn): Ignore const on constexpr fn.
1585+
1586+ PR c++/48780
1587+ * cvt.c (type_promotes_to): Warn about promoting scoped enums.
1588+
1589+ PR c++/49066
1590+ * decl.c (duplicate_decls): Preserve DECL_DELETED_FN.
1591+
1592+ DR 1073
1593+ PR c++/49082
1594+ * typeck.c (comp_except_specs): noexcept(false) is not compatible
1595+ with throw(type-list).
1596+ * typeck2.c (merge_exception_specifiers): noexcept(false)
1597+ beats any more limited specification.
1598+
1599+ PR c++/48948
1600+ * class.c (finalize_literal_type_property): Only check
1601+ for constexpr member functions of non-literal class.
1602+ * decl.c (cp_finish_decl): Don't call validate_constexpr_fundecl.
1603+ * semantics.c (literal_type_p): Call complete_type.
1604+
1605+ * semantics.c (validate_constexpr_fundecl): Check DECL_TEMPLATE_INFO
1606+ rather than DECL_TEMPLATE_INSTANTIATION.
1607+ (cxx_eval_call_expression): Likewise.
1608+
1609+ * semantics.c (register_constexpr_fundef): Add to hash table here.
1610+ (validate_constexpr_fundecl): Not here.
1611+
1612+ PR c++/48745
1613+ * pt.c (value_dependent_expr_p): Handle CONSTRUCTOR.
1614+
1615+ PR c++/48736
1616+ * pt.c (tsubst_copy_and_build): Handle substitution of a pack
1617+ expansion producing another expansion.
1618+
1619+ PR c++/48873
1620+ * tree.c (stabilize_expr): Don't make gratuitous copies of classes.
1621+
1622+2011-05-19 Jakub Jelinek <jakub@redhat.com>
1623+
1624+ PR c++/49043
1625+ * decl.c (check_omp_return): Stop searching on sk_function_parms.
1626+
1627+ PR c++/48869
1628+ * method.c (get_dtor, get_copy_ctor): Add COMPLAIN argument,
1629+ pass it down to locate_fn_flags.
1630+ * cp-tree.h (get_dtor, get_copy_ctor): Adjust prototypes.
1631+ * semantics.c (cxx_omp_create_clause_info): Adjust callers.
1632+ * cp-gimplify.c: Include splay-tree.h.
1633+ (splay_tree_compare_decl_uid, omp_var_to_track,
1634+ omp_cxx_notice_variable): New functions.
1635+ (struct cp_genericize_omp_taskreg): New type.
1636+ (struct cp_genericize_data): Add omp_ctx field.
1637+ (cp_genericize_r): Attempt to determine implicitly determined
1638+ firstprivate class type variables.
1639+ (cp_genericize): Clear omp_ctx.
1640+ * Make-lang.in (cp/cp-gimplify.o): Depend on $(SPLAY_TREE_H).
1641+
1642+2011-05-11 Jason Merrill <jason@redhat.com>
1643+
1644+ * pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p.
1645+
1646+2011-05-11 Fabien Chêne <fabien@gcc.gnu.org>
1647+
1648+ PR c++/48859
1649+ * init.c (diagnose_uninitialized_cst_or_ref_member_1): stop the
1650+ recursion if there is user defined constructor.
1651+
1652+2011-05-09 Dodji Seketeli <dodji@redhat.com>
1653+
1654+ PR c++/48574
1655+ * class.c (fixed_type_or_null): Use type_dependent_p_push to test
1656+ if the instance has a dependent initializer.
1657+
1658+2011-05-06 Jason Merrill <jason@redhat.com>
1659+
1660+ PR c++/48909
1661+ * semantics.c (cxx_eval_conditional_expression): Check
1662+ integer_zerop instead.
1663+ (potential_constant_expression_1): Likewise.
1664+
1665+ PR c++/48911
1666+ * semantics.c (cxx_eval_array_reference): Handle implicit
1667+ initializers.
1668+
1669+ PR c++/48446
1670+ * decl.c (stabilize_save_expr_r, stabilize_vla_size): New.
1671+ (grokdeclarator): Use stabilize_vla_size.
1672+ * init.c (get_temp_regvar): No longer static.
1673+ * cp-tree.h: Declare it.
1674+
1675+ PR c++/48089
1676+ * semantics.c (potential_constant_expression_1): Don't allow *this
1677+ in a constructor.
1678+ (register_constexpr_fundef): Use potential_rvalue_constant_expression.
1679+
1680 2011-05-06 Dodji Seketeli <dodji@redhat.com>
1681
1682 PR c++/48838
1683
1684=== modified file 'gcc/cp/Make-lang.in'
1685--- gcc/cp/Make-lang.in 2011-02-13 19:57:30 +0000
1686+++ gcc/cp/Make-lang.in 2011-05-26 15:02:13 +0000
1687@@ -1,6 +1,6 @@
1688 # Top level -*- makefile -*- fragment for GNU C++.
1689 # Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
1690-# 2005, 2007, 2008, 2009, 2010
1691+# 2005, 2007, 2008, 2009, 2010, 2011
1692 # Free Software Foundation, Inc.
1693
1694 #This file is part of GCC.
1695@@ -318,7 +318,7 @@
1696 gt-cp-parser.h output.h $(TARGET_H) $(PLUGIN_H) intl.h \
1697 c-family/c-objc.h
1698 cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) $(C_COMMON_H) \
1699- $(TM_H) coretypes.h pointer-set.h tree-iterator.h
1700+ $(TM_H) coretypes.h pointer-set.h tree-iterator.h $(SPLAY_TREE_H)
1701
1702 cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
1703 $(TM_H) $(CXX_TREE_H) $(TIMEVAR_H) gt-cp-name-lookup.h \
1704
1705=== modified file 'gcc/cp/class.c'
1706--- gcc/cp/class.c 2011-05-05 02:51:01 +0000
1707+++ gcc/cp/class.c 2011-05-26 15:02:13 +0000
1708@@ -4559,10 +4559,17 @@
1709 && !TYPE_HAS_CONSTEXPR_CTOR (t))
1710 CLASSTYPE_LITERAL_P (t) = false;
1711
1712- for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
1713- if (DECL_DECLARED_CONSTEXPR_P (fn)
1714- && TREE_CODE (fn) != TEMPLATE_DECL)
1715- validate_constexpr_fundecl (fn);
1716+ if (!CLASSTYPE_LITERAL_P (t))
1717+ for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
1718+ if (DECL_DECLARED_CONSTEXPR_P (fn)
1719+ && TREE_CODE (fn) != TEMPLATE_DECL
1720+ && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1721+ && !DECL_CONSTRUCTOR_P (fn))
1722+ {
1723+ DECL_DECLARED_CONSTEXPR_P (fn) = false;
1724+ if (!DECL_TEMPLATE_INFO (fn))
1725+ error ("enclosing class of %q+#D is not a literal type", fn);
1726+ }
1727 }
1728
1729 /* Check the validity of the bases and members declared in T. Add any
1730@@ -5937,7 +5944,7 @@
1731 itself. */
1732 if (TREE_CODE (instance) == VAR_DECL
1733 && DECL_INITIAL (instance)
1734- && !type_dependent_expression_p (DECL_INITIAL (instance))
1735+ && !type_dependent_expression_p_push (DECL_INITIAL (instance))
1736 && !htab_find (ht, instance))
1737 {
1738 tree type;
1739
1740=== modified file 'gcc/cp/cp-gimplify.c'
1741--- gcc/cp/cp-gimplify.c 2010-12-15 17:50:34 +0000
1742+++ gcc/cp/cp-gimplify.c 2011-05-26 15:02:13 +0000
1743@@ -1,6 +1,6 @@
1744 /* C++-specific tree lowering bits; see also c-gimplify.c and tree-gimple.c.
1745
1746- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
1747+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
1748 Free Software Foundation, Inc.
1749 Contributed by Jason Merrill <jason@redhat.com>
1750
1751@@ -32,6 +32,7 @@
1752 #include "hashtab.h"
1753 #include "pointer-set.h"
1754 #include "flags.h"
1755+#include "splay-tree.h"
1756
1757 /* Local declarations. */
1758
1759@@ -731,10 +732,105 @@
1760 return ((const struct cxx_int_tree_map *)item)->uid;
1761 }
1762
1763+/* A stable comparison routine for use with splay trees and DECLs. */
1764+
1765+static int
1766+splay_tree_compare_decl_uid (splay_tree_key xa, splay_tree_key xb)
1767+{
1768+ tree a = (tree) xa;
1769+ tree b = (tree) xb;
1770+
1771+ return DECL_UID (a) - DECL_UID (b);
1772+}
1773+
1774+/* OpenMP context during genericization. */
1775+
1776+struct cp_genericize_omp_taskreg
1777+{
1778+ bool is_parallel;
1779+ bool default_shared;
1780+ struct cp_genericize_omp_taskreg *outer;
1781+ splay_tree variables;
1782+};
1783+
1784+/* Return true if genericization should try to determine if
1785+ DECL is firstprivate or shared within task regions. */
1786+
1787+static bool
1788+omp_var_to_track (tree decl)
1789+{
1790+ tree type = TREE_TYPE (decl);
1791+ if (is_invisiref_parm (decl))
1792+ type = TREE_TYPE (type);
1793+ while (TREE_CODE (type) == ARRAY_TYPE)
1794+ type = TREE_TYPE (type);
1795+ if (type == error_mark_node || !CLASS_TYPE_P (type))
1796+ return false;
1797+ if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
1798+ return false;
1799+ if (cxx_omp_predetermined_sharing (decl) != OMP_CLAUSE_DEFAULT_UNSPECIFIED)
1800+ return false;
1801+ return true;
1802+}
1803+
1804+/* Note DECL use in OpenMP region OMP_CTX during genericization. */
1805+
1806+static void
1807+omp_cxx_notice_variable (struct cp_genericize_omp_taskreg *omp_ctx, tree decl)
1808+{
1809+ splay_tree_node n = splay_tree_lookup (omp_ctx->variables,
1810+ (splay_tree_key) decl);
1811+ if (n == NULL)
1812+ {
1813+ int flags = OMP_CLAUSE_DEFAULT_SHARED;
1814+ if (omp_ctx->outer)
1815+ omp_cxx_notice_variable (omp_ctx->outer, decl);
1816+ if (!omp_ctx->default_shared)
1817+ {
1818+ struct cp_genericize_omp_taskreg *octx;
1819+
1820+ for (octx = omp_ctx->outer; octx; octx = octx->outer)
1821+ {
1822+ n = splay_tree_lookup (octx->variables, (splay_tree_key) decl);
1823+ if (n && n->value != OMP_CLAUSE_DEFAULT_SHARED)
1824+ {
1825+ flags = OMP_CLAUSE_DEFAULT_FIRSTPRIVATE;
1826+ break;
1827+ }
1828+ if (octx->is_parallel)
1829+ break;
1830+ }
1831+ if (octx == NULL
1832+ && (TREE_CODE (decl) == PARM_DECL
1833+ || (!(TREE_STATIC (decl) || DECL_EXTERNAL (decl))
1834+ && DECL_CONTEXT (decl) == current_function_decl)))
1835+ flags = OMP_CLAUSE_DEFAULT_FIRSTPRIVATE;
1836+ if (flags == OMP_CLAUSE_DEFAULT_FIRSTPRIVATE)
1837+ {
1838+ /* DECL is implicitly determined firstprivate in
1839+ the current task construct. Ensure copy ctor and
1840+ dtor are instantiated, because during gimplification
1841+ it will be already too late. */
1842+ tree type = TREE_TYPE (decl);
1843+ if (is_invisiref_parm (decl))
1844+ type = TREE_TYPE (type);
1845+ while (TREE_CODE (type) == ARRAY_TYPE)
1846+ type = TREE_TYPE (type);
1847+ get_copy_ctor (type, tf_none);
1848+ get_dtor (type, tf_none);
1849+ }
1850+ }
1851+ splay_tree_insert (omp_ctx->variables, (splay_tree_key) decl, flags);
1852+ }
1853+}
1854+
1855+/* Genericization context. */
1856+
1857 struct cp_genericize_data
1858 {
1859 struct pointer_set_t *p_set;
1860 VEC (tree, heap) *bind_expr_stack;
1861+ struct cp_genericize_omp_taskreg *omp_ctx;
1862 };
1863
1864 /* Perform any pre-gimplification lowering of C++ front end trees to
1865@@ -747,6 +843,14 @@
1866 struct cp_genericize_data *wtd = (struct cp_genericize_data *) data;
1867 struct pointer_set_t *p_set = wtd->p_set;
1868
1869+ /* If in an OpenMP context, note var uses. */
1870+ if (__builtin_expect (wtd->omp_ctx != NULL, 0)
1871+ && (TREE_CODE (stmt) == VAR_DECL
1872+ || TREE_CODE (stmt) == PARM_DECL
1873+ || TREE_CODE (stmt) == RESULT_DECL)
1874+ && omp_var_to_track (stmt))
1875+ omp_cxx_notice_variable (wtd->omp_ctx, stmt);
1876+
1877 if (is_invisiref_parm (stmt)
1878 /* Don't dereference parms in a thunk, pass the references through. */
1879 && !(DECL_THUNK_P (current_function_decl)
1880@@ -786,6 +890,10 @@
1881 if (TREE_CODE (stmt) == ADDR_EXPR
1882 && is_invisiref_parm (TREE_OPERAND (stmt, 0)))
1883 {
1884+ /* If in an OpenMP context, note var uses. */
1885+ if (__builtin_expect (wtd->omp_ctx != NULL, 0)
1886+ && omp_var_to_track (TREE_OPERAND (stmt, 0)))
1887+ omp_cxx_notice_variable (wtd->omp_ctx, TREE_OPERAND (stmt, 0));
1888 *stmt_p = convert (TREE_TYPE (stmt), TREE_OPERAND (stmt, 0));
1889 *walk_subtrees = 0;
1890 }
1891@@ -808,6 +916,22 @@
1892 }
1893 break;
1894 case OMP_CLAUSE_PRIVATE:
1895+ /* Don't dereference an invisiref in OpenMP clauses. */
1896+ if (is_invisiref_parm (OMP_CLAUSE_DECL (stmt)))
1897+ *walk_subtrees = 0;
1898+ else if (wtd->omp_ctx != NULL)
1899+ {
1900+ /* Private clause doesn't cause any references to the
1901+ var in outer contexts, avoid calling
1902+ omp_cxx_notice_variable for it. */
1903+ struct cp_genericize_omp_taskreg *old = wtd->omp_ctx;
1904+ wtd->omp_ctx = NULL;
1905+ cp_walk_tree (&OMP_CLAUSE_DECL (stmt), cp_genericize_r,
1906+ data, NULL);
1907+ wtd->omp_ctx = old;
1908+ *walk_subtrees = 0;
1909+ }
1910+ break;
1911 case OMP_CLAUSE_SHARED:
1912 case OMP_CLAUSE_FIRSTPRIVATE:
1913 case OMP_CLAUSE_COPYIN:
1914@@ -876,6 +1000,25 @@
1915
1916 else if (TREE_CODE (stmt) == BIND_EXPR)
1917 {
1918+ if (__builtin_expect (wtd->omp_ctx != NULL, 0))
1919+ {
1920+ tree decl;
1921+ for (decl = BIND_EXPR_VARS (stmt); decl; decl = DECL_CHAIN (decl))
1922+ if (TREE_CODE (decl) == VAR_DECL
1923+ && !DECL_EXTERNAL (decl)
1924+ && omp_var_to_track (decl))
1925+ {
1926+ splay_tree_node n
1927+ = splay_tree_lookup (wtd->omp_ctx->variables,
1928+ (splay_tree_key) decl);
1929+ if (n == NULL)
1930+ splay_tree_insert (wtd->omp_ctx->variables,
1931+ (splay_tree_key) decl,
1932+ TREE_STATIC (decl)
1933+ ? OMP_CLAUSE_DEFAULT_SHARED
1934+ : OMP_CLAUSE_DEFAULT_PRIVATE);
1935+ }
1936+ }
1937 VEC_safe_push (tree, heap, wtd->bind_expr_stack, stmt);
1938 cp_walk_tree (&BIND_EXPR_BODY (stmt),
1939 cp_genericize_r, data, NULL);
1940@@ -922,6 +1065,50 @@
1941 *stmt_p = build1 (NOP_EXPR, void_type_node, integer_zero_node);
1942 *walk_subtrees = 0;
1943 }
1944+ else if (TREE_CODE (stmt) == OMP_PARALLEL || TREE_CODE (stmt) == OMP_TASK)
1945+ {
1946+ struct cp_genericize_omp_taskreg omp_ctx;
1947+ tree c, decl;
1948+ splay_tree_node n;
1949+
1950+ *walk_subtrees = 0;
1951+ cp_walk_tree (&OMP_CLAUSES (stmt), cp_genericize_r, data, NULL);
1952+ omp_ctx.is_parallel = TREE_CODE (stmt) == OMP_PARALLEL;
1953+ omp_ctx.default_shared = omp_ctx.is_parallel;
1954+ omp_ctx.outer = wtd->omp_ctx;
1955+ omp_ctx.variables = splay_tree_new (splay_tree_compare_decl_uid, 0, 0);
1956+ wtd->omp_ctx = &omp_ctx;
1957+ for (c = OMP_CLAUSES (stmt); c; c = OMP_CLAUSE_CHAIN (c))
1958+ switch (OMP_CLAUSE_CODE (c))
1959+ {
1960+ case OMP_CLAUSE_SHARED:
1961+ case OMP_CLAUSE_PRIVATE:
1962+ case OMP_CLAUSE_FIRSTPRIVATE:
1963+ case OMP_CLAUSE_LASTPRIVATE:
1964+ decl = OMP_CLAUSE_DECL (c);
1965+ if (decl == error_mark_node || !omp_var_to_track (decl))
1966+ break;
1967+ n = splay_tree_lookup (omp_ctx.variables, (splay_tree_key) decl);
1968+ if (n != NULL)
1969+ break;
1970+ splay_tree_insert (omp_ctx.variables, (splay_tree_key) decl,
1971+ OMP_CLAUSE_CODE (c) == OMP_CLAUSE_SHARED
1972+ ? OMP_CLAUSE_DEFAULT_SHARED
1973+ : OMP_CLAUSE_DEFAULT_PRIVATE);
1974+ if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_PRIVATE
1975+ && omp_ctx.outer)
1976+ omp_cxx_notice_variable (omp_ctx.outer, decl);
1977+ break;
1978+ case OMP_CLAUSE_DEFAULT:
1979+ if (OMP_CLAUSE_DEFAULT_KIND (c) == OMP_CLAUSE_DEFAULT_SHARED)
1980+ omp_ctx.default_shared = true;
1981+ default:
1982+ break;
1983+ }
1984+ cp_walk_tree (&OMP_BODY (stmt), cp_genericize_r, data, NULL);
1985+ wtd->omp_ctx = omp_ctx.outer;
1986+ splay_tree_delete (omp_ctx.variables);
1987+ }
1988
1989 pointer_set_insert (p_set, *stmt_p);
1990
1991@@ -985,6 +1172,7 @@
1992 walk_tree's hash functionality. */
1993 wtd.p_set = pointer_set_create ();
1994 wtd.bind_expr_stack = NULL;
1995+ wtd.omp_ctx = NULL;
1996 cp_walk_tree (&DECL_SAVED_TREE (fndecl), cp_genericize_r, &wtd, NULL);
1997 pointer_set_destroy (wtd.p_set);
1998 VEC_free (tree, heap, wtd.bind_expr_stack);
1999
2000=== modified file 'gcc/cp/cp-tree.h'
2001--- gcc/cp/cp-tree.h 2011-05-06 08:34:10 +0000
2002+++ gcc/cp/cp-tree.h 2011-05-26 15:02:13 +0000
2003@@ -4958,6 +4958,7 @@
2004 extern tree build_new (VEC(tree,gc) **, tree, tree,
2005 VEC(tree,gc) **, int,
2006 tsubst_flags_t);
2007+extern tree get_temp_regvar (tree, tree);
2008 extern tree build_vec_init (tree, tree, tree, bool, int,
2009 tsubst_flags_t);
2010 extern tree build_delete (tree, tree,
2011@@ -5002,10 +5003,10 @@
2012 extern tree skip_artificial_parms_for (const_tree, tree);
2013 extern int num_artificial_parms_for (const_tree);
2014 extern tree make_alias_for (tree, tree);
2015-extern tree get_copy_ctor (tree);
2016+extern tree get_copy_ctor (tree, tsubst_flags_t);
2017 extern tree get_copy_assign (tree);
2018 extern tree get_default_ctor (tree);
2019-extern tree get_dtor (tree);
2020+extern tree get_dtor (tree, tsubst_flags_t);
2021 extern tree locate_ctor (tree);
2022
2023 /* In optimize.c */
2024
2025=== modified file 'gcc/cp/cvt.c'
2026--- gcc/cp/cvt.c 2011-04-12 00:20:32 +0000
2027+++ gcc/cp/cvt.c 2011-05-26 15:02:13 +0000
2028@@ -1621,6 +1621,9 @@
2029 int precision = MAX (TYPE_PRECISION (type),
2030 TYPE_PRECISION (integer_type_node));
2031 tree totype = c_common_type_for_size (precision, 0);
2032+ if (SCOPED_ENUM_P (type))
2033+ warning (OPT_Wabi, "scoped enum %qT will not promote to an integral "
2034+ "type in a future version of GCC", type);
2035 if (TREE_CODE (type) == ENUMERAL_TYPE)
2036 type = ENUM_UNDERLYING_TYPE (type);
2037 if (TYPE_UNSIGNED (type)
2038
2039=== modified file 'gcc/cp/decl.c'
2040--- gcc/cp/decl.c 2011-04-26 23:42:50 +0000
2041+++ gcc/cp/decl.c 2011-05-26 15:02:13 +0000
2042@@ -1686,6 +1686,7 @@
2043 error ("deleted definition of %qD", newdecl);
2044 error ("after previous declaration %q+D", olddecl);
2045 }
2046+ DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2047 }
2048
2049 /* Deal with C++: must preserve virtual function table size. */
2050@@ -2807,6 +2808,8 @@
2051 error ("invalid exit from OpenMP structured block");
2052 return false;
2053 }
2054+ else if (b->kind == sk_function_parms)
2055+ break;
2056 return true;
2057 }
2058
2059@@ -2917,6 +2920,28 @@
2060 free (cs);
2061 }
2062
2063+/* Convert a case constant VALUE in a switch to the type TYPE of the switch
2064+ condition. Note that if TYPE and VALUE are already integral we don't
2065+ really do the conversion because the language-independent
2066+ warning/optimization code will work better that way. */
2067+
2068+static tree
2069+case_conversion (tree type, tree value)
2070+{
2071+ if (value == NULL_TREE)
2072+ return value;
2073+
2074+ if (cxx_dialect >= cxx0x
2075+ && (SCOPED_ENUM_P (type)
2076+ || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
2077+ {
2078+ if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2079+ type = type_promotes_to (type);
2080+ value = perform_implicit_conversion (type, value, tf_warning_or_error);
2081+ }
2082+ return cxx_constant_value (value);
2083+}
2084+
2085 /* Note that we've seen a definition of a case label, and complain if this
2086 is a bad place for one. */
2087
2088@@ -2925,6 +2950,7 @@
2089 {
2090 tree cond, r;
2091 struct cp_binding_level *p;
2092+ tree type;
2093
2094 if (processing_template_decl)
2095 {
2096@@ -2944,13 +2970,12 @@
2097 if (!check_switch_goto (switch_stack->level))
2098 return error_mark_node;
2099
2100- if (low_value)
2101- low_value = cxx_constant_value (low_value);
2102- if (high_value)
2103- high_value = cxx_constant_value (high_value);
2104-
2105- r = c_add_case_label (loc, switch_stack->cases, cond,
2106- SWITCH_STMT_TYPE (switch_stack->switch_stmt),
2107+ type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
2108+
2109+ low_value = case_conversion (type, low_value);
2110+ high_value = case_conversion (type, high_value);
2111+
2112+ r = c_add_case_label (loc, switch_stack->cases, cond, type,
2113 low_value, high_value);
2114
2115 /* After labels, make any new cleanups in the function go into their
2116@@ -5795,13 +5820,7 @@
2117 }
2118 }
2119
2120- if (TREE_CODE (decl) == FUNCTION_DECL
2121- /* For members, defer until finalize_literal_type_property. */
2122- && (!DECL_CLASS_SCOPE_P (decl)
2123- || !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))))
2124- validate_constexpr_fundecl (decl);
2125-
2126- else if (!ensure_literal_type_for_constexpr_object (decl))
2127+ if (!ensure_literal_type_for_constexpr_object (decl))
2128 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
2129
2130 if (init && TREE_CODE (decl) == FUNCTION_DECL)
2131@@ -7499,6 +7518,39 @@
2132 return 0;
2133 }
2134
2135+/* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
2136+ SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
2137+ expressions out into temporary variables so that walk_tree doesn't
2138+ step into them (c++/15764). */
2139+
2140+static tree
2141+stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
2142+{
2143+ struct pointer_set_t *pset = (struct pointer_set_t *)data;
2144+ tree expr = *expr_p;
2145+ if (TREE_CODE (expr) == SAVE_EXPR)
2146+ {
2147+ tree op = TREE_OPERAND (expr, 0);
2148+ cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
2149+ if (TREE_SIDE_EFFECTS (op))
2150+ TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
2151+ *walk_subtrees = 0;
2152+ }
2153+ else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
2154+ *walk_subtrees = 0;
2155+ return NULL;
2156+}
2157+
2158+/* Entry point for the above. */
2159+
2160+static void
2161+stabilize_vla_size (tree size)
2162+{
2163+ struct pointer_set_t *pset = pointer_set_create ();
2164+ /* Break out any function calls into temporary variables. */
2165+ cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
2166+}
2167+
2168 /* Given the SIZE (i.e., number of elements) in an array, compute an
2169 appropriate index type for the array. If non-NULL, NAME is the
2170 name of the thing being declared. */
2171@@ -8529,12 +8581,6 @@
2172 || thread_p)
2173 error ("storage class specifiers invalid in parameter declarations");
2174
2175- if (type_uses_auto (type))
2176- {
2177- error ("parameter declared %<auto%>");
2178- type = error_mark_node;
2179- }
2180-
2181 /* Function parameters cannot be constexpr. If we saw one, moan
2182 and pretend it wasn't there. */
2183 if (constexpr_p)
2184@@ -8951,7 +8997,12 @@
2185 && (decl_context == NORMAL || decl_context == FIELD)
2186 && at_function_scope_p ()
2187 && variably_modified_type_p (type, NULL_TREE))
2188- finish_expr_stmt (TYPE_SIZE (type));
2189+ {
2190+ /* First break out any side-effects. */
2191+ stabilize_vla_size (TYPE_SIZE (type));
2192+ /* And then force evaluation of the SAVE_EXPR. */
2193+ finish_expr_stmt (TYPE_SIZE (type));
2194+ }
2195
2196 if (declarator->kind == cdk_reference)
2197 {
2198@@ -8966,13 +9017,18 @@
2199 to create the type "rvalue reference to cv TD' creates the
2200 type TD."
2201 */
2202- if (!VOID_TYPE_P (type))
2203+ if (VOID_TYPE_P (type))
2204+ /* We already gave an error. */;
2205+ else if (TREE_CODE (type) == REFERENCE_TYPE)
2206+ {
2207+ if (declarator->u.reference.rvalue_ref)
2208+ /* Leave type alone. */;
2209+ else
2210+ type = cp_build_reference_type (TREE_TYPE (type), false);
2211+ }
2212+ else
2213 type = cp_build_reference_type
2214- ((TREE_CODE (type) == REFERENCE_TYPE
2215- ? TREE_TYPE (type) : type),
2216- (declarator->u.reference.rvalue_ref
2217- && (TREE_CODE(type) != REFERENCE_TYPE
2218- || TYPE_REF_IS_RVALUE (type))));
2219+ (type, declarator->u.reference.rvalue_ref);
2220
2221 /* In C++0x, we need this check for direct reference to
2222 reference declarations, which are forbidden by
2223@@ -9026,6 +9082,14 @@
2224 }
2225 }
2226
2227+ /* We need to stabilize side-effects in VLA sizes for regular array
2228+ declarations too, not just pointers to arrays. */
2229+ if (type != error_mark_node && !TYPE_NAME (type)
2230+ && (decl_context == NORMAL || decl_context == FIELD)
2231+ && at_function_scope_p ()
2232+ && variably_modified_type_p (type, NULL_TREE))
2233+ stabilize_vla_size (TYPE_SIZE (type));
2234+
2235 /* A `constexpr' specifier used in an object declaration declares
2236 the object as `const'. */
2237 if (constexpr_p && innermost_code != cdk_function)
2238@@ -9267,6 +9331,12 @@
2239 memfn_quals = TYPE_UNQUALIFIED;
2240 }
2241
2242+ if (type_uses_auto (type))
2243+ {
2244+ error ("typedef declared %<auto%>");
2245+ type = error_mark_node;
2246+ }
2247+
2248 if (decl_context == FIELD)
2249 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
2250 else
2251@@ -9507,6 +9577,12 @@
2252 if (ctype || in_namespace)
2253 error ("cannot use %<::%> in parameter declaration");
2254
2255+ if (type_uses_auto (type))
2256+ {
2257+ error ("parameter declared %<auto%>");
2258+ type = error_mark_node;
2259+ }
2260+
2261 /* A parameter declared as an array of T is really a pointer to T.
2262 One declared as a function is really a pointer to a function.
2263 One declared as a member is really a pointer to member. */
2264@@ -12527,7 +12603,7 @@
2265 not creating the EH_SPEC_BLOCK we save a little memory,
2266 and we avoid spurious warnings about unreachable
2267 code. */
2268- && !DECL_ARTIFICIAL (fn));
2269+ && !DECL_DEFAULTED_FN (fn));
2270 }
2271
2272 /* Store the parameter declarations into the current function declaration.
2273@@ -13351,10 +13427,15 @@
2274 revert_static_member_fn (tree decl)
2275 {
2276 tree stype = static_fn_type (decl);
2277+ cp_cv_quals quals = type_memfn_quals (stype);
2278
2279- if (type_memfn_quals (stype) != TYPE_UNQUALIFIED)
2280+ if (quals != TYPE_UNQUALIFIED)
2281 {
2282- error ("static member function %q#D declared with type qualifiers", decl);
2283+ if (quals == TYPE_QUAL_CONST && DECL_DECLARED_CONSTEXPR_P (decl))
2284+ /* The const was implicit, don't complain. */;
2285+ else
2286+ error ("static member function %q#D declared with type qualifiers",
2287+ decl);
2288 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
2289 }
2290 TREE_TYPE (decl) = stype;
2291
2292=== modified file 'gcc/cp/error.c'
2293--- gcc/cp/error.c 2011-02-20 23:18:11 +0000
2294+++ gcc/cp/error.c 2011-05-26 15:02:13 +0000
2295@@ -306,13 +306,20 @@
2296
2297 FOR_EACH_VEC_ELT (tree, typenames, i, t)
2298 {
2299+ bool dependent = uses_template_parms (args);
2300 if (need_comma)
2301 pp_separate_with_comma (cxx_pp);
2302 dump_type (t, TFF_PLAIN_IDENTIFIER);
2303 pp_cxx_whitespace (cxx_pp);
2304 pp_equal (cxx_pp);
2305 pp_cxx_whitespace (cxx_pp);
2306+ push_deferring_access_checks (dk_no_check);
2307+ if (dependent)
2308+ ++processing_template_decl;
2309 t = tsubst (t, args, tf_none, NULL_TREE);
2310+ if (dependent)
2311+ --processing_template_decl;
2312+ pop_deferring_access_checks ();
2313 /* Strip typedefs. We can't just use TFF_CHASE_TYPEDEF because
2314 pp_simple_type_specifier doesn't know about it. */
2315 t = strip_typedefs (t);
2316
2317=== modified file 'gcc/cp/init.c'
2318--- gcc/cp/init.c 2011-04-18 23:29:30 +0000
2319+++ gcc/cp/init.c 2011-05-26 15:02:13 +0000
2320@@ -45,7 +45,6 @@
2321 static tree sort_mem_initializers (tree, tree);
2322 static tree initializing_context (tree);
2323 static void expand_cleanup_for_base (tree, tree);
2324-static tree get_temp_regvar (tree, tree);
2325 static tree dfs_initialize_vtbl_ptrs (tree, void *);
2326 static tree build_dtor_call (tree, special_function_kind, int);
2327 static tree build_field_list (tree, tree, int *);
2328@@ -529,6 +528,8 @@
2329 {
2330 gcc_assert (TREE_CHAIN (init) == NULL_TREE);
2331 init = TREE_VALUE (init);
2332+ if (BRACE_ENCLOSED_INITIALIZER_P (init))
2333+ init = digest_init (type, init);
2334 }
2335 if (init == NULL_TREE
2336 || same_type_ignoring_top_level_qualifiers_p (type,
2337@@ -1892,6 +1893,7 @@
2338 {
2339 tree field;
2340 int error_count = 0;
2341+ bool permissive = global_dc->permissive;
2342
2343 if (type_has_user_provided_constructor (type))
2344 return 0;
2345@@ -1905,34 +1907,50 @@
2346
2347 field_type = strip_array_types (TREE_TYPE (field));
2348
2349+ if (type_has_user_provided_constructor (field_type))
2350+ continue;
2351+
2352 if (TREE_CODE (field_type) == REFERENCE_TYPE)
2353 {
2354- ++ error_count;
2355 if (complain)
2356 {
2357+ if (!permissive || !using_new)
2358+ ++ error_count;
2359+
2360 if (using_new)
2361- error ("uninitialized reference member in %q#T "
2362- "using %<new%> without new-initializer", origin);
2363+ permerror (input_location,
2364+ "uninitialized reference member in %q#T "
2365+ "using %<new%> without new-initializer", origin);
2366 else
2367- error ("uninitialized reference member in %q#T", origin);
2368+ error ("uninitialized reference member in %q#T", origin);
2369+
2370 inform (DECL_SOURCE_LOCATION (field),
2371 "%qD should be initialized", field);
2372 }
2373+ else
2374+ ++ error_count;
2375 }
2376
2377 if (CP_TYPE_CONST_P (field_type))
2378 {
2379- ++ error_count;
2380 if (complain)
2381 {
2382+ if (!permissive)
2383+ ++ error_count;
2384+
2385 if (using_new)
2386- error ("uninitialized const member in %q#T "
2387- "using %<new%> without new-initializer", origin);
2388- else
2389- error ("uninitialized const member in %q#T", origin);
2390+ permerror (input_location,
2391+ "uninitialized const member in %q#T "
2392+ "using %<new%> without new-initializer", origin);
2393+ else
2394+ permerror (input_location,
2395+ "uninitialized const member in %q#T", origin);
2396+
2397 inform (DECL_SOURCE_LOCATION (field),
2398 "%qD should be initialized", field);
2399 }
2400+ else
2401+ ++ error_count;
2402 }
2403
2404 if (CLASS_TYPE_P (field_type))
2405@@ -2871,7 +2889,7 @@
2406 things when it comes time to do final cleanups (which take place
2407 "outside" the binding contour of the function). */
2408
2409-static tree
2410+tree
2411 get_temp_regvar (tree type, tree init)
2412 {
2413 tree decl;
2414
2415=== modified file 'gcc/cp/method.c'
2416--- gcc/cp/method.c 2011-03-31 20:33:07 +0000
2417+++ gcc/cp/method.c 2011-05-26 15:02:13 +0000
2418@@ -1,7 +1,7 @@
2419 /* Handle the hair of processing (but not expanding) inline functions.
2420 Also manage function and variable name overloading.
2421 Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
2422- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
2423+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
2424 Free Software Foundation, Inc.
2425 Contributed by Michael Tiemann (tiemann@cygnus.com)
2426
2427@@ -838,10 +838,10 @@
2428 /* Locate the dtor of TYPE. */
2429
2430 tree
2431-get_dtor (tree type)
2432+get_dtor (tree type, tsubst_flags_t complain)
2433 {
2434 tree fn = locate_fn_flags (type, complete_dtor_identifier, NULL_TREE,
2435- LOOKUP_NORMAL, tf_warning_or_error);
2436+ LOOKUP_NORMAL, complain);
2437 if (fn == error_mark_node)
2438 return NULL_TREE;
2439 return fn;
2440@@ -878,13 +878,13 @@
2441 /* Locate the copy ctor of TYPE. */
2442
2443 tree
2444-get_copy_ctor (tree type)
2445+get_copy_ctor (tree type, tsubst_flags_t complain)
2446 {
2447 int quals = (TYPE_HAS_CONST_COPY_CTOR (type)
2448 ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED);
2449 tree argtype = build_stub_type (type, quals, false);
2450 tree fn = locate_fn_flags (type, complete_ctor_identifier, argtype,
2451- LOOKUP_NORMAL, tf_warning_or_error);
2452+ LOOKUP_NORMAL, complain);
2453 if (fn == error_mark_node)
2454 return NULL_TREE;
2455 return fn;
2456
2457=== modified file 'gcc/cp/parser.c'
2458--- gcc/cp/parser.c 2011-04-27 15:57:06 +0000
2459+++ gcc/cp/parser.c 2011-05-26 15:02:13 +0000
2460@@ -2788,7 +2788,7 @@
2461 "%qT is a dependent scope",
2462 parser->scope, id, parser->scope);
2463 else if (TYPE_P (parser->scope))
2464- error_at (location, "%qE in class %qT does not name a type",
2465+ error_at (location, "%qE in %q#T does not name a type",
2466 id, parser->scope);
2467 else
2468 gcc_unreachable ();
2469@@ -15031,6 +15031,9 @@
2470 parser->num_template_parameter_lists
2471 = saved_num_template_parameter_lists;
2472
2473+ /* Consume the `)'. */
2474+ cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
2475+
2476 /* If all went well, parse the cv-qualifier-seq and the
2477 exception-specification. */
2478 if (member_p || cp_parser_parse_definitely (parser))
2479@@ -15044,8 +15047,6 @@
2480 if (ctor_dtor_or_conv_p)
2481 *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
2482 first = false;
2483- /* Consume the `)'. */
2484- cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
2485
2486 /* Parse the cv-qualifier-seq. */
2487 cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
2488@@ -16132,6 +16133,7 @@
2489 of some object of type "char" to "int". */
2490 && !parser->in_type_id_in_expr_p
2491 && cp_parser_uncommitted_to_tentative_parse_p (parser)
2492+ && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
2493 && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
2494 cp_parser_commit_to_tentative_parse (parser);
2495 /* Parse the declarator. */
2496@@ -19642,7 +19644,7 @@
2497 /* If we have a class scope, this is easy; DR 147 says that S::S always
2498 names the constructor, and no other qualified name could. */
2499 if (constructor_p && nested_name_specifier
2500- && TYPE_P (nested_name_specifier))
2501+ && CLASS_TYPE_P (nested_name_specifier))
2502 {
2503 tree id = cp_parser_unqualified_id (parser,
2504 /*template_keyword_p=*/false,
2505
2506=== modified file 'gcc/cp/pt.c'
2507--- gcc/cp/pt.c 2011-04-25 21:53:57 +0000
2508+++ gcc/cp/pt.c 2011-05-26 15:02:13 +0000
2509@@ -8557,6 +8557,9 @@
2510 }
2511 }
2512
2513+ if (CLASSTYPE_LAMBDA_EXPR (type))
2514+ maybe_add_lambda_conv_op (type);
2515+
2516 /* Set the file and line number information to whatever is given for
2517 the class itself. This puts error messages involving generated
2518 implicit functions at a predictable point, and the same point
2519@@ -8690,7 +8693,12 @@
2520 have the wrong value for a recursive call. Just make a
2521 dummy decl, since it's only used for its type. */
2522 arg_pack = tsubst_decl (parm_pack, args, complain);
2523- arg_pack = make_fnparm_pack (arg_pack);
2524+ if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
2525+ /* Partial instantiation of the parm_pack, we can't build
2526+ up an argument pack yet. */
2527+ arg_pack = NULL_TREE;
2528+ else
2529+ arg_pack = make_fnparm_pack (arg_pack);
2530 }
2531 }
2532 else
2533@@ -9780,14 +9788,14 @@
2534 if (DECL_TEMPLATE_PARM_P (t))
2535 SET_DECL_TEMPLATE_PARM_P (r);
2536
2537- /* An argument of a function parameter pack is not a parameter
2538- pack. */
2539- FUNCTION_PARAMETER_PACK_P (r) = false;
2540-
2541 if (expanded_types)
2542 /* We're on the Ith parameter of the function parameter
2543 pack. */
2544 {
2545+ /* An argument of a function parameter pack is not a parameter
2546+ pack. */
2547+ FUNCTION_PARAMETER_PACK_P (r) = false;
2548+
2549 /* Get the Ith type. */
2550 type = TREE_VEC_ELT (expanded_types, i);
2551
2552@@ -13221,7 +13229,8 @@
2553 ce->value = tsubst_pack_expansion (ce->value, args, complain,
2554 in_decl);
2555
2556- if (ce->value == error_mark_node)
2557+ if (ce->value == error_mark_node
2558+ || PACK_EXPANSION_P (ce->value))
2559 ;
2560 else if (TREE_VEC_LENGTH (ce->value) == 1)
2561 /* Just move the argument into place. */
2562@@ -13742,7 +13751,9 @@
2563 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
2564
2565 processing_template_decl += incomplete;
2566+ push_deferring_access_checks (dk_no_check);
2567 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
2568+ pop_deferring_access_checks ();
2569 processing_template_decl -= incomplete;
2570
2571 if (fntype == error_mark_node)
2572@@ -13829,7 +13840,10 @@
2573 substitution results in an invalid type, as described above,
2574 type deduction fails. */
2575 {
2576- tree substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
2577+ tree substed;
2578+ push_deferring_access_checks (dk_no_check);
2579+ substed = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
2580+ pop_deferring_access_checks ();
2581 if (substed == error_mark_node)
2582 return 1;
2583
2584@@ -17209,7 +17223,8 @@
2585 args = gen_args;
2586
2587 if (TREE_CODE (d) == FUNCTION_DECL)
2588- pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
2589+ pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
2590+ || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
2591 else
2592 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
2593
2594@@ -17404,6 +17419,8 @@
2595 cp_finish_decl (d, init, const_init, NULL_TREE, 0);
2596 pop_nested_class ();
2597 }
2598+ else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
2599+ synthesize_method (d);
2600 else if (TREE_CODE (d) == FUNCTION_DECL)
2601 {
2602 htab_t saved_local_specializations;
2603@@ -17791,7 +17808,7 @@
2604 ;
2605 else
2606 {
2607- int i, save_access_control;
2608+ int i;
2609 tree partial_args;
2610
2611 /* Replace the innermost level of the TARGS with NULL_TREEs to
2612@@ -17806,8 +17823,7 @@
2613
2614 /* Disable access control as this function is used only during
2615 name-mangling. */
2616- save_access_control = flag_access_control;
2617- flag_access_control = 0;
2618+ push_deferring_access_checks (dk_no_check);
2619
2620 ++processing_template_decl;
2621 /* Now, do the (partial) substitution to figure out the
2622@@ -17822,7 +17838,7 @@
2623 TREE_VEC_LENGTH (partial_args)--;
2624 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
2625
2626- flag_access_control = save_access_control;
2627+ pop_deferring_access_checks ();
2628 }
2629
2630 return fn_type;
2631@@ -17866,6 +17882,8 @@
2632 return 0;
2633 else if (TREE_CODE (type) == TYPENAME_TYPE)
2634 return 0;
2635+ else if (TREE_CODE (type) == DECLTYPE_TYPE)
2636+ return 0;
2637
2638 if (complain & tf_error)
2639 error ("%q#T is not a valid type for a template constant parameter", type);
2640@@ -18230,6 +18248,16 @@
2641 type-dependent. */
2642 return type_dependent_expression_p (expression);
2643
2644+ case CONSTRUCTOR:
2645+ {
2646+ unsigned ix;
2647+ tree val;
2648+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
2649+ if (value_dependent_expression_p (val))
2650+ return true;
2651+ return false;
2652+ }
2653+
2654 default:
2655 /* A constant expression is value-dependent if any subexpression is
2656 value-dependent. */
2657@@ -18484,6 +18512,9 @@
2658 if (arg == error_mark_node)
2659 return true;
2660
2661+ if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
2662+ arg = ARGUMENT_PACK_SELECT_ARG (arg);
2663+
2664 if (TREE_CODE (arg) == TEMPLATE_DECL
2665 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
2666 return dependent_template_p (arg);
2667@@ -18810,10 +18841,6 @@
2668 {
2669 tree inner_expr;
2670
2671- /* Preserve null pointer constants so that the type of things like
2672- "p == 0" where "p" is a pointer can be determined. */
2673- if (null_ptr_cst_p (expr))
2674- return expr;
2675 /* Preserve OVERLOADs; the functions must be available to resolve
2676 types. */
2677 inner_expr = expr;
2678@@ -19037,7 +19064,12 @@
2679 return type;
2680 argvec = make_tree_vec (1);
2681 TREE_VEC_ELT (argvec, 0) = late_return_type;
2682- if (processing_template_decl)
2683+ if (processing_template_parmlist)
2684+ /* For a late-specified return type in a template type-parameter, we
2685+ need to add a dummy argument level for its parmlist. */
2686+ argvec = add_to_template_args
2687+ (make_tree_vec (processing_template_parmlist), argvec);
2688+ if (current_template_parms)
2689 argvec = add_to_template_args (current_template_args (), argvec);
2690 return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
2691 }
2692
2693=== modified file 'gcc/cp/semantics.c'
2694--- gcc/cp/semantics.c 2011-05-06 08:34:10 +0000
2695+++ gcc/cp/semantics.c 2011-05-26 15:02:13 +0000
2696@@ -3667,7 +3667,7 @@
2697 if (need_default_ctor)
2698 t = get_default_ctor (type);
2699 else
2700- t = get_copy_ctor (type);
2701+ t = get_copy_ctor (type, tf_warning_or_error);
2702
2703 if (t && !trivial_fn_p (t))
2704 TREE_VEC_ELT (info, 0) = t;
2705@@ -3675,7 +3675,7 @@
2706
2707 if ((need_default_ctor || need_copy_ctor)
2708 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2709- TREE_VEC_ELT (info, 1) = get_dtor (type);
2710+ TREE_VEC_ELT (info, 1) = get_dtor (type, tf_warning_or_error);
2711
2712 if (need_copy_assignment)
2713 {
2714@@ -5327,7 +5327,7 @@
2715 if (SCALAR_TYPE_P (t))
2716 return true;
2717 if (CLASS_TYPE_P (t))
2718- return CLASSTYPE_LITERAL_P (t);
2719+ return CLASSTYPE_LITERAL_P (complete_type (t));
2720 if (TREE_CODE (t) == ARRAY_TYPE)
2721 return literal_type_p (strip_array_types (t));
2722 return false;
2723@@ -5439,6 +5439,7 @@
2724 rettype, fun);
2725 }
2726
2727+ /* Check this again here for cxx_eval_call_expression. */
2728 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
2729 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
2730 {
2731@@ -5459,36 +5460,18 @@
2732 tree
2733 validate_constexpr_fundecl (tree fun)
2734 {
2735- constexpr_fundef entry;
2736- constexpr_fundef **slot;
2737-
2738 if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
2739 return NULL;
2740 else if (DECL_CLONED_FUNCTION_P (fun))
2741 /* We already checked the original function. */
2742 return fun;
2743
2744- if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INSTANTIATION (fun)))
2745+ if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INFO (fun)))
2746 {
2747 DECL_DECLARED_CONSTEXPR_P (fun) = false;
2748 return NULL;
2749 }
2750
2751- /* Create the constexpr function table if necessary. */
2752- if (constexpr_fundef_table == NULL)
2753- constexpr_fundef_table = htab_create_ggc (101,
2754- constexpr_fundef_hash,
2755- constexpr_fundef_equal,
2756- ggc_free);
2757- entry.decl = fun;
2758- entry.body = NULL;
2759- slot = (constexpr_fundef **)
2760- htab_find_slot (constexpr_fundef_table, &entry, INSERT);
2761- if (*slot == NULL)
2762- {
2763- *slot = ggc_alloc_constexpr_fundef ();
2764- **slot = entry;
2765- }
2766 return fun;
2767 }
2768
2769@@ -5679,8 +5662,8 @@
2770 tree
2771 register_constexpr_fundef (tree fun, tree body)
2772 {
2773- constexpr_fundef *fundef = retrieve_constexpr_fundef (fun);
2774- gcc_assert (fundef != NULL && fundef->body == NULL);
2775+ constexpr_fundef entry;
2776+ constexpr_fundef **slot;
2777
2778 if (DECL_CONSTRUCTOR_P (fun))
2779 body = build_constexpr_constructor_member_initializers
2780@@ -5704,14 +5687,29 @@
2781 body = unshare_expr (TREE_OPERAND (body, 0));
2782 }
2783
2784- if (!potential_constant_expression (body))
2785+ if (!potential_rvalue_constant_expression (body))
2786 {
2787 DECL_DECLARED_CONSTEXPR_P (fun) = false;
2788- if (!DECL_TEMPLATE_INSTANTIATION (fun))
2789- require_potential_constant_expression (body);
2790+ if (!DECL_TEMPLATE_INFO (fun))
2791+ require_potential_rvalue_constant_expression (body);
2792 return NULL;
2793 }
2794- fundef->body = body;
2795+
2796+ /* Create the constexpr function table if necessary. */
2797+ if (constexpr_fundef_table == NULL)
2798+ constexpr_fundef_table = htab_create_ggc (101,
2799+ constexpr_fundef_hash,
2800+ constexpr_fundef_equal,
2801+ ggc_free);
2802+ entry.decl = fun;
2803+ entry.body = body;
2804+ slot = (constexpr_fundef **)
2805+ htab_find_slot (constexpr_fundef_table, &entry, INSERT);
2806+
2807+ gcc_assert (*slot == NULL);
2808+ *slot = ggc_alloc_constexpr_fundef ();
2809+ **slot = entry;
2810+
2811 return fun;
2812 }
2813
2814@@ -6036,7 +6034,7 @@
2815 if (!allow_non_constant)
2816 {
2817 error_at (loc, "%qD is not a constexpr function", fun);
2818- if (DECL_TEMPLATE_INSTANTIATION (fun)
2819+ if (DECL_TEMPLATE_INFO (fun)
2820 && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
2821 (DECL_TI_TEMPLATE (fun))))
2822 is_valid_constexpr_fn (fun, true);
2823@@ -6255,13 +6253,12 @@
2824 allow_non_constant, addr,
2825 non_constant_p);
2826 VERIFY_CONSTANT (val);
2827- if (val == boolean_true_node)
2828- return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
2829+ /* Don't VERIFY_CONSTANT the other operands. */
2830+ if (integer_zerop (val))
2831+ return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
2832 allow_non_constant, addr,
2833 non_constant_p);
2834- gcc_assert (val == boolean_false_node);
2835- /* Don't VERIFY_CONSTANT here. */
2836- return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
2837+ return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
2838 allow_non_constant, addr,
2839 non_constant_p);
2840 }
2841@@ -6280,6 +6277,7 @@
2842 non_constant_p);
2843 tree index, oldidx;
2844 HOST_WIDE_INT i;
2845+ tree elem_type;
2846 unsigned len, elem_nchars = 1;
2847 if (*non_constant_p)
2848 return t;
2849@@ -6292,16 +6290,27 @@
2850 return t;
2851 else if (addr)
2852 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
2853+ elem_type = TREE_TYPE (TREE_TYPE (ary));
2854 if (TREE_CODE (ary) == CONSTRUCTOR)
2855 len = CONSTRUCTOR_NELTS (ary);
2856 else
2857 {
2858- elem_nchars = (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (ary)))
2859+ elem_nchars = (TYPE_PRECISION (elem_type)
2860 / TYPE_PRECISION (char_type_node));
2861 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
2862 }
2863 if (compare_tree_int (index, len) >= 0)
2864 {
2865+ if (tree_int_cst_lt (index, array_type_nelts_top (TREE_TYPE (ary))))
2866+ {
2867+ /* If it's within the array bounds but doesn't have an explicit
2868+ initializer, it's value-initialized. */
2869+ tree val = build_value_init (elem_type, tf_warning_or_error);
2870+ return cxx_eval_constant_expression (call, val,
2871+ allow_non_constant, addr,
2872+ non_constant_p);
2873+ }
2874+
2875 if (!allow_non_constant)
2876 error ("array subscript out of bound");
2877 *non_constant_p = true;
2878@@ -6382,6 +6391,9 @@
2879 bool *non_constant_p)
2880 {
2881 tree orig_whole = TREE_OPERAND (t, 0);
2882+ tree retval, fldval, utype, mask;
2883+ bool fld_seen = false;
2884+ HOST_WIDE_INT istart, isize;
2885 tree whole = cxx_eval_constant_expression (call, orig_whole,
2886 allow_non_constant, addr,
2887 non_constant_p);
2888@@ -6402,12 +6414,47 @@
2889 return t;
2890
2891 start = TREE_OPERAND (t, 2);
2892+ istart = tree_low_cst (start, 0);
2893+ isize = tree_low_cst (TREE_OPERAND (t, 1), 0);
2894+ utype = TREE_TYPE (t);
2895+ if (!TYPE_UNSIGNED (utype))
2896+ utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
2897+ retval = build_int_cst (utype, 0);
2898 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2899 {
2900- if (bit_position (field) == start)
2901+ tree bitpos = bit_position (field);
2902+ if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
2903 return value;
2904+ if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
2905+ && TREE_CODE (value) == INTEGER_CST
2906+ && host_integerp (bitpos, 0)
2907+ && host_integerp (DECL_SIZE (field), 0))
2908+ {
2909+ HOST_WIDE_INT bit = tree_low_cst (bitpos, 0);
2910+ HOST_WIDE_INT sz = tree_low_cst (DECL_SIZE (field), 0);
2911+ HOST_WIDE_INT shift;
2912+ if (bit >= istart && bit + sz <= istart + isize)
2913+ {
2914+ fldval = fold_convert (utype, value);
2915+ mask = build_int_cst_type (utype, -1);
2916+ mask = fold_build2 (LSHIFT_EXPR, utype, mask,
2917+ size_int (TYPE_PRECISION (utype) - sz));
2918+ mask = fold_build2 (RSHIFT_EXPR, utype, mask,
2919+ size_int (TYPE_PRECISION (utype) - sz));
2920+ fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
2921+ shift = bit - istart;
2922+ if (BYTES_BIG_ENDIAN)
2923+ shift = TYPE_PRECISION (utype) - shift - sz;
2924+ fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
2925+ size_int (shift));
2926+ retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
2927+ fld_seen = true;
2928+ }
2929+ }
2930 }
2931- gcc_unreachable();
2932+ if (fld_seen)
2933+ return fold_convert (TREE_TYPE (t), retval);
2934+ gcc_unreachable ();
2935 return error_mark_node;
2936 }
2937
2938@@ -7560,7 +7607,16 @@
2939 tree x = TREE_OPERAND (t, 0);
2940 STRIP_NOPS (x);
2941 if (is_this_parameter (x))
2942- return true;
2943+ {
2944+ if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval)
2945+ {
2946+ if (flags & tf_error)
2947+ sorry ("use of the value of the object being constructed "
2948+ "in a constant expression");
2949+ return false;
2950+ }
2951+ return true;
2952+ }
2953 return potential_constant_expression_1 (x, rval, flags);
2954 }
2955
2956@@ -7807,12 +7863,12 @@
2957 tmp = TREE_OPERAND (t, 0);
2958 if (!potential_constant_expression_1 (tmp, rval, flags))
2959 return false;
2960- else if (tmp == boolean_true_node)
2961+ else if (integer_zerop (tmp))
2962+ return potential_constant_expression_1 (TREE_OPERAND (t, 2),
2963+ want_rval, flags);
2964+ else if (TREE_CODE (tmp) == INTEGER_CST)
2965 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
2966 want_rval, flags);
2967- else if (tmp == boolean_false_node)
2968- return potential_constant_expression_1 (TREE_OPERAND (t, 2),
2969- want_rval, flags);
2970 for (i = 1; i < 3; ++i)
2971 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
2972 want_rval, tf_none))
2973@@ -8030,7 +8086,8 @@
2974 type = lambda;
2975 gcc_assert (LAMBDA_TYPE_P (type));
2976 /* Don't let debug_tree cause instantiation. */
2977- if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
2978+ if (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
2979+ && !COMPLETE_OR_OPEN_TYPE_P (type))
2980 return NULL_TREE;
2981 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
2982 /*protect=*/0, /*want_type=*/false);
2983
2984=== modified file 'gcc/cp/tree.c'
2985--- gcc/cp/tree.c 2011-05-06 08:34:10 +0000
2986+++ gcc/cp/tree.c 2011-05-26 15:02:13 +0000
2987@@ -3124,7 +3124,8 @@
2988
2989 if (!TREE_SIDE_EFFECTS (exp))
2990 init_expr = NULL_TREE;
2991- else if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp))
2992+ else if ((!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp))
2993+ && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (exp)))
2994 || !lvalue_or_rvalue_with_address_p (exp))
2995 {
2996 init_expr = get_target_expr (exp);
2997
2998=== modified file 'gcc/cp/typeck.c'
2999--- gcc/cp/typeck.c 2011-04-20 06:31:51 +0000
3000+++ gcc/cp/typeck.c 2011-05-26 15:02:13 +0000
3001@@ -516,7 +516,8 @@
3002 {
3003 if (complain & tf_error)
3004 composite_pointer_error (DK_PERMERROR, t1, t2, operation);
3005-
3006+ else
3007+ return error_mark_node;
3008 result_type = void_type_node;
3009 }
3010 result_type = cp_build_qualified_type (result_type,
3011@@ -527,9 +528,13 @@
3012 if (TYPE_PTR_TO_MEMBER_P (t1))
3013 {
3014 if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
3015- TYPE_PTRMEM_CLASS_TYPE (t2))
3016- && (complain & tf_error))
3017- composite_pointer_error (DK_PERMERROR, t1, t2, operation);
3018+ TYPE_PTRMEM_CLASS_TYPE (t2)))
3019+ {
3020+ if (complain & tf_error)
3021+ composite_pointer_error (DK_PERMERROR, t1, t2, operation);
3022+ else
3023+ return error_mark_node;
3024+ }
3025 result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
3026 result_type);
3027 }
3028@@ -986,14 +991,14 @@
3029 /* First handle noexcept. */
3030 if (exact < ce_exact)
3031 {
3032- /* noexcept(false) is compatible with any throwing dynamic-exc-spec
3033+ /* noexcept(false) is compatible with no exception-specification,
3034 and stricter than any spec. */
3035 if (t1 == noexcept_false_spec)
3036- return !nothrow_spec_p (t2) || exact == ce_derived;
3037- /* Even a derived noexcept(false) is compatible with a throwing
3038- dynamic spec. */
3039+ return t2 == NULL_TREE || exact == ce_derived;
3040+ /* Even a derived noexcept(false) is compatible with no
3041+ exception-specification. */
3042 if (t2 == noexcept_false_spec)
3043- return !nothrow_spec_p (t1);
3044+ return t1 == NULL_TREE;
3045
3046 /* Otherwise, if we aren't looking for an exact match, noexcept is
3047 equivalent to throw(). */
3048@@ -6215,14 +6220,29 @@
3049
3050 /* [expr.const.cast]
3051
3052- An lvalue of type T1 can be explicitly converted to an lvalue of
3053- type T2 using the cast const_cast<T2&> (where T1 and T2 are object
3054- types) if a pointer to T1 can be explicitly converted to the type
3055- pointer to T2 using a const_cast. */
3056+ For two object types T1 and T2, if a pointer to T1 can be explicitly
3057+ converted to the type "pointer to T2" using a const_cast, then the
3058+ following conversions can also be made:
3059+
3060+ -- an lvalue of type T1 can be explicitly converted to an lvalue of
3061+ type T2 using the cast const_cast<T2&>;
3062+
3063+ -- a glvalue of type T1 can be explicitly converted to an xvalue of
3064+ type T2 using the cast const_cast<T2&&>; and
3065+
3066+ -- if T1 is a class type, a prvalue of type T1 can be explicitly
3067+ converted to an xvalue of type T2 using the cast const_cast<T2&&>. */
3068+
3069 if (TREE_CODE (dst_type) == REFERENCE_TYPE)
3070 {
3071 reference_type = dst_type;
3072- if (! real_lvalue_p (expr))
3073+ if (!TYPE_REF_IS_RVALUE (dst_type)
3074+ ? real_lvalue_p (expr)
3075+ : (CLASS_TYPE_P (TREE_TYPE (dst_type))
3076+ ? lvalue_p (expr)
3077+ : lvalue_or_rvalue_with_address_p (expr)))
3078+ /* OK. */;
3079+ else
3080 {
3081 if (complain)
3082 error ("invalid const_cast of an rvalue of type %qT to type %qT",
3083@@ -6707,7 +6727,7 @@
3084
3085 /* Allow array assignment in compiler-generated code. */
3086 else if (!current_function_decl
3087- || !DECL_ARTIFICIAL (current_function_decl))
3088+ || !DECL_DEFAULTED_FN (current_function_decl))
3089 {
3090 /* This routine is used for both initialization and assignment.
3091 Make sure the diagnostic message differentiates the context. */
3092
3093=== modified file 'gcc/cp/typeck2.c'
3094--- gcc/cp/typeck2.c 2011-01-14 13:08:11 +0000
3095+++ gcc/cp/typeck2.c 2011-05-26 15:02:13 +0000
3096@@ -1672,10 +1672,13 @@
3097 tree
3098 merge_exception_specifiers (tree list, tree add)
3099 {
3100- if (!list || !add)
3101- return NULL_TREE;
3102+ /* No exception-specifier or noexcept(false) are less strict than
3103+ anything else. Prefer the newer variant (LIST). */
3104+ if (!list || list == noexcept_false_spec)
3105+ return list;
3106+ else if (!add || add == noexcept_false_spec)
3107+ return add;
3108 /* For merging noexcept(true) and throw(), take the more recent one (LIST).
3109- A throw(type-list) spec takes precedence over a noexcept(false) spec.
3110 Any other noexcept-spec should only be merged with an equivalent one.
3111 So the !TREE_VALUE code below is correct for all cases. */
3112 else if (!TREE_VALUE (add))
3113
3114=== modified file 'gcc/cppspec.c'
3115--- gcc/cppspec.c 2010-08-22 12:19:01 +0000
3116+++ gcc/cppspec.c 2011-05-26 15:02:13 +0000
3117@@ -1,5 +1,5 @@
3118 /* Specific flags and argument handling of the C preprocessor.
3119- Copyright (C) 1999, 2007, 2010 Free Software Foundation, Inc.
3120+ Copyright (C) 1999, 2007, 2010, 2011 Free Software Foundation, Inc.
3121
3122 This file is part of GCC.
3123
3124@@ -158,7 +158,7 @@
3125
3126 new_decoded_options = XNEWVEC (struct cl_decoded_option, new_argc);
3127
3128- new_decoded_options[0] = new_decoded_options[0];
3129+ new_decoded_options[0] = decoded_options[0];
3130 j = 1;
3131
3132 if (need_E)
3133
3134=== modified file 'gcc/dbxout.c'
3135--- gcc/dbxout.c 2010-12-22 03:49:00 +0000
3136+++ gcc/dbxout.c 2011-05-26 15:02:13 +0000
3137@@ -1,7 +1,7 @@
3138 /* Output dbx-format symbol table information from GNU compiler.
3139 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3140- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3141- Free Software Foundation, Inc.
3142+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
3143+ 2011 Free Software Foundation, Inc.
3144
3145 This file is part of GCC.
3146
3147@@ -91,6 +91,7 @@
3148 #include "langhooks.h"
3149 #include "obstack.h"
3150 #include "expr.h"
3151+#include "cgraph.h"
3152
3153 #ifdef XCOFF_DEBUGGING_INFO
3154 #include "xcoffout.h"
3155@@ -2393,6 +2394,20 @@
3156 disable debug info for these variables. */
3157 if (!targetm.have_tls && DECL_THREAD_LOCAL_P (expr))
3158 return NULL;
3159+ if (TREE_STATIC (expr)
3160+ && !TREE_ASM_WRITTEN (expr)
3161+ && !DECL_HAS_VALUE_EXPR_P (expr)
3162+ && !TREE_PUBLIC (expr)
3163+ && DECL_RTL_SET_P (expr)
3164+ && MEM_P (DECL_RTL (expr)))
3165+ {
3166+ /* If this is a var that might not be actually output,
3167+ return NULL, otherwise stabs might reference an undefined
3168+ symbol. */
3169+ struct varpool_node *node = varpool_get_node (expr);
3170+ if (!node || !node->needed)
3171+ return NULL;
3172+ }
3173 /* FALLTHRU */
3174
3175 case PARM_DECL:
3176
3177=== modified file 'gcc/expmed.c'
3178--- gcc/expmed.c 2011-04-06 20:39:20 +0000
3179+++ gcc/expmed.c 2011-05-26 15:02:13 +0000
3180@@ -1875,8 +1875,6 @@
3181 /* To extract a signed bit-field, first shift its msb to the msb of the word,
3182 then arithmetic-shift its lsb to the lsb of the word. */
3183 op0 = force_reg (mode, op0);
3184- if (mode != tmode)
3185- target = 0;
3186
3187 /* Find the narrowest integer mode that contains the field. */
3188
3189@@ -1888,6 +1886,9 @@
3190 break;
3191 }
3192
3193+ if (mode != tmode)
3194+ target = 0;
3195+
3196 if (GET_MODE_BITSIZE (mode) != (bitsize + bitpos))
3197 {
3198 tree amount
3199
3200=== modified file 'gcc/expr.c'
3201--- gcc/expr.c 2011-05-06 11:28:27 +0000
3202+++ gcc/expr.c 2011-05-26 15:02:13 +0000
3203@@ -8134,7 +8134,10 @@
3204 op1 = gen_label_rtx ();
3205 jumpifnot_1 (code, treeop0, treeop1, op1, -1);
3206
3207- emit_move_insn (target, const1_rtx);
3208+ if (TYPE_PRECISION (type) == 1 && !TYPE_UNSIGNED (type))
3209+ emit_move_insn (target, constm1_rtx);
3210+ else
3211+ emit_move_insn (target, const1_rtx);
3212
3213 emit_label (op1);
3214 return target;
3215@@ -10091,7 +10094,8 @@
3216
3217 if ((code == NE || code == EQ)
3218 && TREE_CODE (arg0) == BIT_AND_EXPR && integer_zerop (arg1)
3219- && integer_pow2p (TREE_OPERAND (arg0, 1)))
3220+ && integer_pow2p (TREE_OPERAND (arg0, 1))
3221+ && (TYPE_PRECISION (ops->type) != 1 || TYPE_UNSIGNED (ops->type)))
3222 {
3223 tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
3224 return expand_expr (fold_single_bit_test (loc,
3225@@ -10111,7 +10115,9 @@
3226
3227 /* Try a cstore if possible. */
3228 return emit_store_flag_force (target, code, op0, op1,
3229- operand_mode, unsignedp, 1);
3230+ operand_mode, unsignedp,
3231+ (TYPE_PRECISION (ops->type) == 1
3232+ && !TYPE_UNSIGNED (ops->type)) ? -1 : 1);
3233 }
3234
3235
3236
3237
3238=== modified file 'gcc/fold-const.c'
3239--- gcc/fold-const.c 2011-04-23 10:18:54 +0000
3240+++ gcc/fold-const.c 2011-05-26 15:02:13 +0000
3241@@ -5953,8 +5953,10 @@
3242 return value ? integer_one_node : integer_zero_node;
3243 else if (type == boolean_type_node)
3244 return value ? boolean_true_node : boolean_false_node;
3245+ else if (type)
3246+ return build_int_cst_type (type, value);
3247 else
3248- return build_int_cst (type, value);
3249+ return build_int_cst (NULL_TREE, value);
3250 }
3251
3252
3253
3254=== modified file 'gcc/fortran/ChangeLog'
3255--- gcc/fortran/ChangeLog 2011-05-04 19:18:01 +0000
3256+++ gcc/fortran/ChangeLog 2011-05-26 15:02:13 +0000
3257@@ -1,3 +1,9 @@
3258+2011-05-11 Tobias Burnus <burnus@net-b.de>
3259+
3260+ PR fortran/48889
3261+ * expr.c (gfc_is_constant_expr): Use e->value.function.esym
3262+ instead of e->symtree->n.sym, if available.
3263+
3264 2011-05-04 Steven G. Kargl <kargl@gcc.gnu.org>
3265
3266 PR fortran/48720
3267
3268=== modified file 'gcc/fortran/expr.c'
3269--- gcc/fortran/expr.c 2011-04-28 18:47:28 +0000
3270+++ gcc/fortran/expr.c 2011-05-26 15:02:13 +0000
3271@@ -894,6 +894,9 @@
3272 case EXPR_FUNCTION:
3273 case EXPR_PPC:
3274 case EXPR_COMPCALL:
3275+ gcc_assert (e->symtree || e->value.function.esym
3276+ || e->value.function.isym);
3277+
3278 /* Call to intrinsic with at least one argument. */
3279 if (e->value.function.isym && e->value.function.actual)
3280 {
3281@@ -902,13 +905,14 @@
3282 return 0;
3283 }
3284
3285- /* Make sure we have a symbol. */
3286- gcc_assert (e->symtree);
3287-
3288- sym = e->symtree->n.sym;
3289-
3290 /* Specification functions are constant. */
3291 /* F95, 7.1.6.2; F2003, 7.1.7 */
3292+ sym = NULL;
3293+ if (e->symtree)
3294+ sym = e->symtree->n.sym;
3295+ if (e->value.function.esym)
3296+ sym = e->value.function.esym;
3297+
3298 if (sym
3299 && sym->attr.function
3300 && sym->attr.pure
3301
3302=== modified file 'gcc/gimple-fold.c'
3303--- gcc/gimple-fold.c 2011-04-18 21:58:03 +0000
3304+++ gcc/gimple-fold.c 2011-05-26 15:02:13 +0000
3305@@ -1,5 +1,5 @@
3306 /* Statement simplification on GIMPLE.
3307- Copyright (C) 2010 Free Software Foundation, Inc.
3308+ Copyright (C) 2010, 2011 Free Software Foundation, Inc.
3309 Split out from tree-ssa-ccp.c.
3310
3311 This file is part of GCC.
3312@@ -2183,10 +2183,22 @@
3313 code2, op2a, op2b))
3314 return NULL_TREE;
3315 }
3316- else if (TREE_CODE (arg) == SSA_NAME)
3317+ else if (TREE_CODE (arg) == SSA_NAME
3318+ && !SSA_NAME_IS_DEFAULT_DEF (arg))
3319 {
3320- tree temp = and_var_with_comparison (arg, invert,
3321- code2, op2a, op2b);
3322+ tree temp;
3323+ gimple def_stmt = SSA_NAME_DEF_STMT (arg);
3324+ /* In simple cases we can look through PHI nodes,
3325+ but we have to be careful with loops.
3326+ See PR49073. */
3327+ if (! dom_info_available_p (CDI_DOMINATORS)
3328+ || gimple_bb (def_stmt) == gimple_bb (stmt)
3329+ || dominated_by_p (CDI_DOMINATORS,
3330+ gimple_bb (def_stmt),
3331+ gimple_bb (stmt)))
3332+ return NULL_TREE;
3333+ temp = and_var_with_comparison (arg, invert, code2,
3334+ op2a, op2b);
3335 if (!temp)
3336 return NULL_TREE;
3337 else if (!result)
3338@@ -2633,10 +2645,22 @@
3339 code2, op2a, op2b))
3340 return NULL_TREE;
3341 }
3342- else if (TREE_CODE (arg) == SSA_NAME)
3343+ else if (TREE_CODE (arg) == SSA_NAME
3344+ && !SSA_NAME_IS_DEFAULT_DEF (arg))
3345 {
3346- tree temp = or_var_with_comparison (arg, invert,
3347- code2, op2a, op2b);
3348+ tree temp;
3349+ gimple def_stmt = SSA_NAME_DEF_STMT (arg);
3350+ /* In simple cases we can look through PHI nodes,
3351+ but we have to be careful with loops.
3352+ See PR49073. */
3353+ if (! dom_info_available_p (CDI_DOMINATORS)
3354+ || gimple_bb (def_stmt) == gimple_bb (stmt)
3355+ || dominated_by_p (CDI_DOMINATORS,
3356+ gimple_bb (def_stmt),
3357+ gimple_bb (stmt)))
3358+ return NULL_TREE;
3359+ temp = or_var_with_comparison (arg, invert, code2,
3360+ op2a, op2b);
3361 if (!temp)
3362 return NULL_TREE;
3363 else if (!result)
3364
3365=== modified file 'gcc/gimple.c'
3366--- gcc/gimple.c 2011-04-21 14:18:54 +0000
3367+++ gcc/gimple.c 2011-05-26 15:02:13 +0000
3368@@ -2286,6 +2286,10 @@
3369 if (gimple_has_volatile_ops (s))
3370 return true;
3371
3372+ if (gimple_code (s) == GIMPLE_ASM
3373+ && gimple_asm_volatile_p (s))
3374+ return true;
3375+
3376 if (is_gimple_call (s))
3377 {
3378 unsigned nargs = gimple_call_num_args (s);
3379@@ -2299,7 +2303,7 @@
3380 if (gimple_call_lhs (s)
3381 && TREE_SIDE_EFFECTS (gimple_call_lhs (s)))
3382 {
3383- gcc_assert (gimple_has_volatile_ops (s));
3384+ gcc_checking_assert (gimple_has_volatile_ops (s));
3385 return true;
3386 }
3387
3388@@ -2309,7 +2313,7 @@
3389 for (i = 0; i < nargs; i++)
3390 if (TREE_SIDE_EFFECTS (gimple_call_arg (s, i)))
3391 {
3392- gcc_assert (gimple_has_volatile_ops (s));
3393+ gcc_checking_assert (gimple_has_volatile_ops (s));
3394 return true;
3395 }
3396
3397@@ -2318,11 +2322,14 @@
3398 else
3399 {
3400 for (i = 0; i < gimple_num_ops (s); i++)
3401- if (TREE_SIDE_EFFECTS (gimple_op (s, i)))
3402- {
3403- gcc_assert (gimple_has_volatile_ops (s));
3404- return true;
3405- }
3406+ {
3407+ tree op = gimple_op (s, i);
3408+ if (op && TREE_SIDE_EFFECTS (op))
3409+ {
3410+ gcc_checking_assert (gimple_has_volatile_ops (s));
3411+ return true;
3412+ }
3413+ }
3414 }
3415
3416 return false;
3417
3418=== modified file 'gcc/ipa-inline.c'
3419--- gcc/ipa-inline.c 2011-04-26 12:59:22 +0000
3420+++ gcc/ipa-inline.c 2011-05-26 15:02:13 +0000
3421@@ -895,7 +895,7 @@
3422 continue;
3423 }
3424
3425- if (max_count)
3426+ if (max_count && node->count)
3427 {
3428 if (!cgraph_maybe_hot_edge_p (curr))
3429 {
3430
3431=== modified file 'gcc/objc/ChangeLog'
3432--- gcc/objc/ChangeLog 2011-03-25 16:54:16 +0000
3433+++ gcc/objc/ChangeLog 2011-05-26 15:02:13 +0000
3434@@ -1,3 +1,12 @@
3435+2011-05-21 Nicola Pero <nicola.pero@meta-innovation.com>
3436+
3437+ Backport from mainline
3438+ 2011-05-21 Nicola Pero <nicola.pero@meta-innovation.com>
3439+
3440+ * config-lang.in (gtfiles): Updated order of files to fix building
3441+ when the gcc/cp directory is missing, as in the case of some
3442+ release tarballs.
3443+
3444 2011-03-25 Release Manager
3445
3446 * GCC 4.6.0 released.
3447
3448=== modified file 'gcc/objc/config-lang.in'
3449--- gcc/objc/config-lang.in 2011-02-18 00:07:38 +0000
3450+++ gcc/objc/config-lang.in 2011-05-26 15:02:13 +0000
3451@@ -33,4 +33,7 @@
3452 # Most of the object files for cc1obj actually come from C.
3453 lang_requires="c"
3454
3455-gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-runtime-shared-support.c \$(srcdir)/objc/objc-gnu-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-02.c \$(srcdir)/c-parser.c \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-lang.h \$(srcdir)/c-objc-common.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-objc.h \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c"
3456+# Order is important. If you change this list, make sure you test
3457+# building without C++ as well; that is, remove the gcc/cp directory,
3458+# and build with --enable-languages=c,objc.
3459+gtfiles="\$(srcdir)/c-family/c-objc.h \$(srcdir)/objc/objc-act.h \$(srcdir)/objc/objc-act.c \$(srcdir)/objc/objc-runtime-shared-support.c \$(srcdir)/objc/objc-gnu-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-01.c \$(srcdir)/objc/objc-next-runtime-abi-02.c \$(srcdir)/c-parser.c \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-lang.h \$(srcdir)/c-objc-common.c \$(srcdir)/c-family/c-common.c \$(srcdir)/c-family/c-common.h \$(srcdir)/c-family/c-cppbuiltin.c \$(srcdir)/c-family/c-pragma.h \$(srcdir)/c-family/c-pragma.c"
3460
3461=== modified file 'gcc/po/ChangeLog'
3462--- gcc/po/ChangeLog 2011-04-26 14:57:30 +0000
3463+++ gcc/po/ChangeLog 2011-05-26 15:02:13 +0000
3464@@ -1,3 +1,11 @@
3465+2011-05-19 Joseph Myers <joseph@codesourcery.com>
3466+
3467+ * zh_CN.po: Update.
3468+
3469+2011-05-14 Joseph Myers <joseph@codesourcery.com>
3470+
3471+ * zh_CN.po: Update.
3472+
3473 2011-04-26 Joseph Myers <joseph@codesourcery.com>
3474
3475 * de.po: Update.
3476
3477=== modified file 'gcc/po/zh_CN.po'
3478--- gcc/po/zh_CN.po 2011-04-03 11:30:58 +0000
3479+++ gcc/po/zh_CN.po 2011-05-26 15:02:13 +0000
3480@@ -1,14 +1,14 @@
3481 # Simplified Chinese translation for gcc.
3482 # Copyright (C) 2005 Free Software Foundation, Inc.
3483 # This file is distributed under the same license as the gcc package.
3484-# Meng Jie <zuxy.meng@gmail.com>, 2005-2010.
3485+# Meng Jie <zuxy.meng@gmail.com>, 2005-2011.
3486 #
3487 msgid ""
3488 msgstr ""
3489-"Project-Id-Version: gcc 4.5.0\n"
3490+"Project-Id-Version: gcc 4.6.0\n"
3491 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
3492 "POT-Creation-Date: 2011-03-24 16:45+0000\n"
3493-"PO-Revision-Date: 2010-04-19 14:57+0800\n"
3494+"PO-Revision-Date: 2011-05-19 15:04+0800\n"
3495 "Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n"
3496 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
3497 "Language: zh_CN\n"
3498@@ -17,7 +17,7 @@
3499 "Content-Transfer-Encoding: 8bit\n"
3500 "X-Poedit-Language: Chinese\n"
3501 "X-Poedit-Country: CHINA\n"
3502-"X-Poedit-Basepath: C:\\MSYS\\source\\gcc-4.5.0\\gcc\n"
3503+"X-Poedit-Basepath: C:\\MSYS\\source\\gcc-4.6.0\\gcc\n"
3504 "Plural-Forms: nplurals=1; plural=0;\n"
3505
3506 #: c-decl.c:4660 c-typeck.c:5851 toplev.c:1013 c-family/c-pretty-print.c:423
3507@@ -112,9 +112,8 @@
3508 msgstr "需要 %<while%>"
3509
3510 #: c-parser.c:6076
3511-#, fuzzy
3512 msgid "expected %<.%>"
3513-msgstr "需要%<;%>"
3514+msgstr "需要%<.%>"
3515
3516 #: c-parser.c:6854 c-parser.c:6886 c-parser.c:7109 cp/parser.c:22319
3517 #: cp/parser.c:22392
3518@@ -128,9 +127,9 @@
3519 msgstr "需要 %<>%>"
3520
3521 #: c-parser.c:8836 cp/parser.c:20962
3522-#, fuzzy, gcc-internal-format
3523+#, gcc-internal-format
3524 msgid "expected %<,%> or %<)%>"
3525-msgstr "需要 %<,%> 或 % <)%>"
3526+msgstr "需要 %<,%> 或 %<)%>"
3527
3528 #: c-parser.c:9266 c-parser.c:3841 cp/parser.c:20941
3529 #, gcc-internal-format
3530@@ -319,14 +318,14 @@
3531 msgstr "找不到库 lib%s"
3532
3533 #: diagnostic.c:136
3534-#, fuzzy, c-format
3535+#, c-format
3536 msgid "%s: all warnings being treated as errors\n"
3537-msgstr "所有的警告都当作是错误"
3538+msgstr "%s:所有的警告都被当作是错误\n"
3539
3540 #: diagnostic.c:141
3541-#, fuzzy, c-format
3542+#, c-format
3543 msgid "%s: some warnings being treated as errors\n"
3544-msgstr "%s:警告:没有文件‘%s’的读权限\n"
3545+msgstr "%s:有些警告被当作是错误\n"
3546
3547 #: diagnostic.c:219
3548 #, c-format
3549@@ -334,9 +333,9 @@
3550 msgstr "编译因为 -Wfatal-errors 而中止。\n"
3551
3552 #: diagnostic.c:229
3553-#, fuzzy, c-format
3554+#, c-format
3555 msgid "compilation terminated due to -fmax-errors=%u.\n"
3556-msgstr "编译因为 -Wfatal-errors 而中止。\n"
3557+msgstr "编译中止因为 -fmax-errors=%u。\n"
3558
3559 #: diagnostic.c:240
3560 #, c-format
3561@@ -873,9 +872,9 @@
3562 msgstr " -u, --unconditional-branches 同时显示无条件跳转数\n"
3563
3564 #: gcov.c:431
3565-#, fuzzy, c-format
3566+#, c-format
3567 msgid " -d, --display-progress Display progress information\n"
3568-msgstr " --help 显示此帮助说明\n"
3569+msgstr " -d, --display-progress 显示进度信息\n"
3570
3571 #: gcov.c:432
3572 #, c-format
3573@@ -1112,14 +1111,14 @@
3574 msgstr "常量/复制传递被禁用"
3575
3576 #: gengtype-state.c:150
3577-#, fuzzy, c-format
3578+#, c-format
3579 msgid "%s:%d:%d: Invalid state file; %s"
3580-msgstr "%s:%d:%d:自%qs实例化\n"
3581+msgstr "%s:%d:%d:状态文件无效;%s"
3582
3583 #: gengtype-state.c:154
3584-#, fuzzy, c-format
3585+#, c-format
3586 msgid "%s:%d: Invalid state file; %s"
3587-msgstr "%s:无效的文件名:%s\n"
3588+msgstr "%s:%d:状态文件无效;%s"
3589
3590 #. Fatal printf-like message while reading state. This can't be a
3591 #. function, because there is no way to pass a va_arg to a variant of
3592@@ -1127,17 +1126,17 @@
3593 #: gengtype-state.c:165
3594 #, c-format
3595 msgid "%s:%d:%d: Invalid state file; "
3596-msgstr ""
3597+msgstr "%s:%d:%d:状态文件无效;"
3598
3599 #: gengtype-state.c:170
3600-#, fuzzy, c-format
3601+#, c-format
3602 msgid "%s:%d: Invalid state file; "
3603-msgstr "%s:无效的文件名:%s\n"
3604+msgstr "%s:%d:状态文件无效;"
3605
3606 #: gengtype-state.c:695
3607 #, c-format
3608 msgid "Option tag unknown"
3609-msgstr ""
3610+msgstr "未知的选项标记"
3611
3612 #: gengtype-state.c:750
3613 #, fuzzy, c-format
3614@@ -1150,9 +1149,9 @@
3615 msgstr "cris_print_base 中有非预期的基类型"
3616
3617 #: gengtype-state.c:969
3618-#, fuzzy, c-format
3619+#, c-format
3620 msgid "Unexpected type..."
3621-msgstr "非预期的文件结束"
3622+msgstr "非预期的类型……"
3623
3624 #: gengtype-state.c:1149
3625 #, fuzzy, c-format
3626@@ -1175,9 +1174,9 @@
3627 msgstr "%s:无法关闭输出文件 %s\n"
3628
3629 #: gengtype-state.c:1213
3630-#, c-format
3631+#, fuzzy, c-format
3632 msgid "failed to rename %s to state file %s [%s]"
3633-msgstr ""
3634+msgstr "无法更名模块文件“%s”到“%s”:%s"
3635
3636 #: gengtype-state.c:2395
3637 #, fuzzy, c-format
3638@@ -1345,7 +1344,7 @@
3639
3640 #: opts.c:1010
3641 msgid "[default]"
3642-msgstr ""
3643+msgstr "[默认]"
3644
3645 #: opts.c:1021
3646 msgid "[enabled]"
3647@@ -1415,9 +1414,8 @@
3648 msgstr "下列选项与语言相关"
3649
3650 #: opts.c:2010
3651-#, fuzzy
3652 msgid "enabled by default"
3653-msgstr "使“char”类型默认为有符号"
3654+msgstr "默认启用"
3655
3656 #: plugin.c:780
3657 msgid "Event"
3658@@ -1451,7 +1449,6 @@
3659 msgstr "输出有 VOIDmode"
3660
3661 #: reload1.c:8619
3662-#, fuzzy
3663 msgid "failure trying to reload:"
3664 msgstr "试图重新载入时失败:"
3665
3666@@ -1636,12 +1633,11 @@
3667
3668 #: cif-code.def:90
3669 msgid "indirect function call with a yet undetermined callee"
3670-msgstr ""
3671+msgstr "间接函数调用目标未定义"
3672
3673 #: cif-code.def:92
3674-#, fuzzy
3675 msgid "function body can be overwriten at linktime"
3676-msgstr "函数体不可用"
3677+msgstr "函数体可能在链接时被改写"
3678
3679 #. The remainder are real diagnostic types.
3680 #: diagnostic.def:33
3681@@ -1728,11 +1724,11 @@
3682
3683 #: params.def:124
3684 msgid "Probability that COMDAT function will be shared with different compilatoin unit"
3685-msgstr ""
3686+msgstr "与其他编译单元共享 COMDAT 函数的概率"
3687
3688 #: params.def:130
3689 msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen"
3690-msgstr ""
3691+msgstr "进行部分内联时分离区域入口基本块占函数入口基本块的百分比概率的上限"
3692
3693 #: params.def:137
3694 msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling"
3695@@ -1805,11 +1801,11 @@
3696
3697 #: params.def:248
3698 msgid "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations"
3699-msgstr ""
3700+msgstr "计算一个表达式被 GCSE 优化移动的最大距离时的比例因子"
3701
3702 #: params.def:254
3703 msgid "Cost at which GCSE optimizations will not constraint the distance an expression can travel"
3704-msgstr ""
3705+msgstr "指定 GCSE 优化不约束一个表达式能被移动的距离时的代价"
3706
3707 #: params.def:262
3708 msgid "Maximum depth of search in the dominator tree for expressions to hoist"
3709@@ -1970,7 +1966,7 @@
3710 #: params.def:488
3711 #, fuzzy
3712 msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer"
3713-msgstr "用在标量演化分析器中的表达式的大小上限"
3714+msgstr "捆绑于被使用在标量演化分析器中的表达式的大小"
3715
3716 #: params.def:493
3717 msgid "Bound on the number of variables in Omega constraint systems"
3718@@ -2203,17 +2199,15 @@
3719
3720 #: c-family/c-format.c:368
3721 msgid "format"
3722-msgstr ""
3723+msgstr "格式"
3724
3725 #: c-family/c-format.c:369
3726-#, fuzzy
3727 msgid "field width specifier"
3728-msgstr "域宽"
3729+msgstr "字段宽度限定"
3730
3731 #: c-family/c-format.c:370
3732-#, fuzzy
3733 msgid "field precision specifier"
3734-msgstr "字段精度"
3735+msgstr "字段精度限定"
3736
3737 #: c-family/c-format.c:484 c-family/c-format.c:508 config/i386/msformat-c.c:49
3738 msgid "' ' flag"
3739@@ -2820,7 +2814,6 @@
3740 #. Can't possibly get a GOT-needing-fixup for a function-call,
3741 #. right?
3742 #: config/cris/cris.c:3611
3743-#, fuzzy
3744 msgid "unidentifiable call op"
3745 msgstr "无法识别的 call 操作"
3746
3747@@ -3086,7 +3079,7 @@
3748 msgstr "对 %%d、%%x 或 %%X 的使用无效"
3749
3750 #: config/lm32/lm32.c:529
3751-#, fuzzy, c-format
3752+#, c-format
3753 msgid "only 0.0 can be loaded as an immediate"
3754 msgstr "只有 0.0 可以作为立即数装载"
3755
3756@@ -3193,27 +3186,27 @@
3757 #: config/microblaze/microblaze.c:1747
3758 #, fuzzy, c-format
3759 msgid "unknown punctuation '%c'"
3760-msgstr "未知的 spec 函数‘%s’"
3761+msgstr "PRINT_OPERAND:未知的标点‘%c’"
3762
3763 #: config/microblaze/microblaze.c:1756
3764-#, fuzzy, c-format
3765+#, c-format
3766 msgid "null pointer"
3767-msgstr "PRINT_OPERAND 空指针"
3768+msgstr "空指针"
3769
3770 #: config/microblaze/microblaze.c:1791
3771 #, fuzzy, c-format
3772 msgid "PRINT_OPERAND, invalid insn for %%C"
3773-msgstr "PRINT_OPERAND 空指针"
3774+msgstr "无效的 Z 寄存器替换"
3775
3776 #: config/microblaze/microblaze.c:1820
3777 #, fuzzy, c-format
3778 msgid "PRINT_OPERAND, invalid insn for %%N"
3779-msgstr "PRINT_OPERAND 空指针"
3780+msgstr "无效的 Z 寄存器替换"
3781
3782 #: config/microblaze/microblaze.c:1840 config/microblaze/microblaze.c:2001
3783 #, fuzzy
3784 msgid "insn contains an invalid address !"
3785-msgstr "无效地址"
3786+msgstr "无效的 Z 寄存器替换"
3787
3788 #: config/microblaze/microblaze.c:1854 config/microblaze/microblaze.c:2041
3789 #: config/xtensa/xtensa.c:2443
3790@@ -3488,7 +3481,7 @@
3791 #: config/s390/s390.c:5477
3792 #, fuzzy, c-format
3793 msgid "invalid constant for output modifier '%c'"
3794-msgstr "‘o’修饰符的操作数无效"
3795+msgstr "CHARACTER 常量的种别 %d 无效,在%C处"
3796
3797 #: config/s390/s390.c:5484
3798 #, fuzzy, c-format
3799@@ -3498,7 +3491,7 @@
3800 #: config/s390/s390.c:5487
3801 #, fuzzy, c-format
3802 msgid "invalid expression for output modifier '%c'"
3803-msgstr "‘o’修饰符的操作数无效"
3804+msgstr "无效的最小左值表达式"
3805
3806 #: config/score/score7.c:1207
3807 #, c-format
3808@@ -3725,9 +3718,8 @@
3809 msgstr "<返回值>"
3810
3811 #: cp/error.c:970
3812-#, fuzzy
3813 msgid "{anonymous}"
3814-msgstr "{{匿名}}"
3815+msgstr "{匿名}"
3816
3817 #: cp/error.c:1085
3818 msgid "<enumerator>"
3819@@ -3811,7 +3803,7 @@
3820 #: cp/error.c:2878
3821 #, fuzzy, c-format
3822 msgid "%s:%d:%d: recursively instantiated from %qs\n"
3823-msgstr "%s:%d:%d:自%qs实例化\n"
3824+msgstr " 内联自%qs于 %s:%d:%d"
3825
3826 #: cp/error.c:2879
3827 #, c-format
3828@@ -3821,7 +3813,7 @@
3829 #: cp/error.c:2884 cp/error.c:2885
3830 #, fuzzy, c-format
3831 msgid "%s:%d: recursively instantiated from %qs\n"
3832-msgstr "%s:%d:自%qs实例化\n"
3833+msgstr " 内联自%qs于 %s:%d:%d"
3834
3835 #: cp/error.c:2893
3836 #, fuzzy, c-format
3837@@ -3854,21 +3846,21 @@
3838 msgstr "%s:%d:[ 跳过 %d 个实例化上下文 ]\n"
3839
3840 #: cp/error.c:3009
3841-#, fuzzy, c-format
3842+#, c-format
3843 msgid "%s:%d:%d: in constexpr expansion of %qs"
3844-msgstr "%s:%d:%d:自%qs实例化\n"
3845+msgstr "%s:%d:%d:在%qs的广义常表达式扩展中"
3846
3847 #: cp/error.c:3013
3848-#, fuzzy, c-format
3849+#, c-format
3850 msgid "%s:%d: in constexpr expansion of %qs"
3851-msgstr "%s:%d:自%qs实例化\n"
3852+msgstr "%s:%d:在%qs的广义常表达式扩展中"
3853
3854 #: cp/pt.c:1725
3855 msgid "candidates are:"
3856 msgstr "备选为:"
3857
3858 #: cp/pt.c:16583 cp/call.c:3084
3859-#, fuzzy, gcc-internal-format
3860+#, gcc-internal-format
3861 msgid "candidate is:"
3862 msgid_plural "candidates are:"
3863 msgstr[0] "备选是:"
3864@@ -4120,19 +4112,19 @@
3865 #: fortran/io.c:1524
3866 #, c-format
3867 msgid "%s tag"
3868-msgstr ""
3869+msgstr "%s 标记"
3870
3871 #: fortran/io.c:2830
3872 #, fuzzy
3873 msgid "internal unit in WRITE"
3874-msgstr "内部函数"
3875+msgstr "gcc 内部放弃 %s,于 %s:%d"
3876
3877 #. For INQUIRE, all tags except FILE, ID and UNIT are variable definition
3878 #. contexts. Thus, use an extended RESOLVE_TAG macro for that.
3879 #: fortran/io.c:4025
3880-#, c-format
3881+#, fuzzy, c-format
3882 msgid "%s tag with INQUIRE"
3883-msgstr ""
3884+msgstr "%s 与%<%%%c%>%s 格式并用"
3885
3886 #: fortran/matchexp.c:28
3887 #, c-format
3888@@ -4334,7 +4326,7 @@
3889 #: fortran/resolve.c:6223
3890 #, fuzzy
3891 msgid "iterator variable"
3892-msgstr "循环变量"
3893+msgstr "未使用的变量%q+D"
3894
3895 #: fortran/resolve.c:6228
3896 msgid "Start expression in DO loop"
3897@@ -4349,26 +4341,29 @@
3898 msgstr "DO 循环中的步进表达式"
3899
3900 #: fortran/resolve.c:6483 fortran/resolve.c:6485
3901+#, fuzzy
3902 msgid "DEALLOCATE object"
3903-msgstr ""
3904+msgstr "减小目标文件"
3905
3906 #: fortran/resolve.c:6780 fortran/resolve.c:6782
3907+#, fuzzy
3908 msgid "ALLOCATE object"
3909-msgstr ""
3910+msgstr "减小目标文件"
3911
3912 #: fortran/resolve.c:6955
3913 #, fuzzy
3914 msgid "STAT variable"
3915-msgstr "循环变量"
3916+msgstr "未使用的变量%q+D"
3917
3918 #: fortran/resolve.c:6998
3919 #, fuzzy
3920 msgid "ERRMSG variable"
3921-msgstr "循环变量"
3922+msgstr "未使用的变量%q+D"
3923
3924 #: fortran/resolve.c:8063
3925+#, fuzzy
3926 msgid "item in READ"
3927-msgstr ""
3928+msgstr "读取链接脚本"
3929
3930 #: fortran/trans-array.c:1138
3931 #, c-format
3932@@ -4376,8 +4371,9 @@
3933 msgstr "数组构造函数中 CHARACTER 长度不同(%ld/%ld)"
3934
3935 #: fortran/trans-array.c:4393
3936+#, fuzzy
3937 msgid "Integer overflow when calculating the amount of memory to allocate"
3938-msgstr ""
3939+msgstr "试图分配负数大小的内存。可能有整数溢出"
3940
3941 #: fortran/trans-decl.c:4356
3942 #, c-format
3943@@ -4447,7 +4443,7 @@
3944
3945 #: fortran/trans.c:639 fortran/trans.c:1039
3946 msgid "Allocation would exceed memory limit"
3947-msgstr ""
3948+msgstr "内存分配将超过内存上限"
3949
3950 #: fortran/trans.c:729
3951 #, fuzzy, c-format
3952@@ -4457,7 +4453,7 @@
3953 #: fortran/trans.c:735
3954 #, fuzzy
3955 msgid "Attempting to allocate already allocated variable"
3956-msgstr "试图分配已经分配的数组"
3957+msgstr "试图分配已经分配的数组‘%s’"
3958
3959 #: fortran/trans.c:848 fortran/trans.c:928
3960 #, c-format
3961@@ -4707,9 +4703,8 @@
3962 msgstr ""
3963
3964 #: config/i386/nwld.h:34
3965-#, fuzzy
3966 msgid "static linking is not supported"
3967-msgstr "不支持静态链接。"
3968+msgstr "不支持静态链接"
3969
3970 #: config/pa/pa-hpux10.h:89 config/pa/pa-hpux10.h:92 config/pa/pa-hpux10.h:100
3971 #: config/pa/pa-hpux10.h:103 config/pa/pa-hpux11.h:108
3972@@ -4717,7 +4712,7 @@
3973 #: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
3974 #, fuzzy
3975 msgid "warning: consider linking with '-static' as system libraries with"
3976-msgstr "警告:考虑链接时使用‘-static’,因为系统库也使用了此选项"
3977+msgstr "警告:考虑链接时使用‘-static’因为系统库"
3978
3979 #: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101
3980 #: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109
3981@@ -4739,9 +4734,8 @@
3982 msgstr "-mbig-endian 和 -mlittle-endian 不能一起使用"
3983
3984 #: config/cris/cris.h:196
3985-#, fuzzy
3986 msgid "do not specify both -march=... and -mcpu=..."
3987-msgstr "不能同时指定 -march=... 和 -mcpu=..."
3988+msgstr "请勿同时指定 -march=... 和 -mcpu=..."
3989
3990 #: objcp/lang-specs.h:58
3991 msgid "objc++-cpp-output is deprecated; please use objective-c++-cpp-output instead"
3992@@ -4944,9 +4938,8 @@
3993 msgstr "对被截断的字符表达式给出警告"
3994
3995 #: fortran/lang.opt:223
3996-#, fuzzy
3997 msgid "Warn about most implicit conversions"
3998-msgstr "对隐式转换给出警告"
3999+msgstr "对大多数隐式类型转换给出警告"
4000
4001 #: fortran/lang.opt:227
4002 msgid "Warn about calls with implicit interface"
4003@@ -4981,9 +4974,8 @@
4004 msgstr "如果用户过程有与内建过程相同的名字则警告"
4005
4006 #: fortran/lang.opt:263
4007-#, fuzzy
4008 msgid "Warn about unused dummy arguments."
4009-msgstr "为可能的虚参重叠给出警告"
4010+msgstr "对未使用的哑元给出警告。"
4011
4012 #: fortran/lang.opt:267
4013 msgid "Enable preprocessing"
4014@@ -5181,7 +5173,7 @@
4015
4016 #: fortran/lang.opt:479
4017 msgid "Reallocate the LHS in assignments"
4018-msgstr ""
4019+msgstr "在赋值中重分配左值"
4020
4021 #: fortran/lang.opt:483
4022 msgid "Use a 4-byte record marker for unformatted files"
4023@@ -5201,7 +5193,7 @@
4024
4025 #: fortran/lang.opt:499
4026 msgid "-fcoarray=[...]\tSpecify which coarray parallelization should be used"
4027-msgstr ""
4028+msgstr "-fcoarray=[...]\t指定要使用的集合数组并行化"
4029
4030 #: fortran/lang.opt:503
4031 msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed"
4032@@ -5528,9 +5520,8 @@
4033 msgstr "目标为 AM33/2.0 处理器"
4034
4035 #: config/mn10300/mn10300.opt:31
4036-#, fuzzy
4037 msgid "Target the AM34 processor"
4038-msgstr "目标为 AM33 处理器"
4039+msgstr "目标为 AM34 处理器"
4040
4041 #: config/mn10300/mn10300.opt:35 config/arm/arm.opt:154
4042 msgid "Tune code for the given processor"
4043@@ -5549,9 +5540,8 @@
4044 msgstr "在 a0 和 d0 中返回指针"
4045
4046 #: config/mn10300/mn10300.opt:56
4047-#, fuzzy
4048 msgid "Allow gcc to generate LIW instructions"
4049-msgstr "允许 gcc 使用 repeat/erepeat 指令"
4050+msgstr "允许 gcc 生成 LIW 指令"
4051
4052 #: config/s390/tpf.opt:23
4053 msgid "Enable TPF-OS tracing code"
4054@@ -5786,7 +5776,7 @@
4055 #: config/ia64/ia64.opt:175
4056 #, fuzzy
4057 msgid "Disallow more than 'msched-max-memory-insns' in instruction group. Otherwise, limit is 'soft' (prefer non-memory operations when limit is reached)"
4058-msgstr "一个指令组中至多有‘msched-max-memory-insns’条指令。否则,限定值是`软的' (当达到限定值时优先选择非内存操作)"
4059+msgstr "在指令组中不准多于 `msched-max-memory-insns' 。否则,限定值是`软的' (当达到限定值时宁可非内存操作)"
4060
4061 #: config/ia64/ia64.opt:179
4062 msgid "Don't generate checks for control speculation in selective scheduling"
4063@@ -6193,9 +6183,8 @@
4064 msgstr "使用给定的 x86-64 代码模式"
4065
4066 #: config/i386/i386.opt:121
4067-#, fuzzy
4068 msgid "%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead"
4069-msgstr "不建议使用‘-mcpu=’。请改用‘-mtune=’或‘-march=’。"
4070+msgstr "不建议使用%<-mcpu=%>;请改用%<-mtune=%>或%<-march=%>"
4071
4072 #: config/i386/i386.opt:125
4073 msgid "Generate sin, cos, sqrt for FPU"
4074@@ -6222,9 +6211,8 @@
4075 msgstr "内联 memset/memcpy 字符串操作,但仅为较小的块使用内联版本"
4076
4077 #: config/i386/i386.opt:156
4078-#, fuzzy
4079 msgid "%<-mintel-syntax%> and %<-mno-intel-syntax%> are deprecated; use %<-masm=intel%> and %<-masm=att%> instead"
4080-msgstr "不建议使用‘-mintel-syntax’。请改用‘-masm=intel’。"
4081+msgstr "不建议使用%<-mintel-syntax%>和 %<-mno-intel-syntax%>;请改用%<-masm=intel%>和%<-masm=att%>"
4082
4083 #: config/i386/i386.opt:161
4084 msgid "Use native (MS) bitfield layout"
4085@@ -6297,7 +6285,7 @@
4086
4087 #: config/i386/i386.opt:249
4088 msgid "Return 8-byte vectors in memory"
4089-msgstr ""
4090+msgstr "将 8 字节向量在内存中返回"
4091
4092 #: config/i386/i386.opt:253
4093 msgid "Generate reciprocals instead of divss and sqrtss."
4094@@ -6313,11 +6301,11 @@
4095
4096 #: config/i386/i386.opt:266
4097 msgid "Do dispatch scheduling if processor is bdver1 and Haifa scheduling"
4098-msgstr ""
4099+msgstr "进行海法调度,当处理器是 bdver1 时也进行派遣调度"
4100
4101 #: config/i386/i386.opt:271
4102 msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
4103-msgstr ""
4104+msgstr "自动向量化时使用 128 位 AVX 指令而不是 256 位 AVX 指令"
4105
4106 #: config/i386/i386.opt:277
4107 msgid "Generate 32bit i386 code"
4108@@ -6368,9 +6356,8 @@
4109 msgstr "不支持 SSE4.1 和 SSE4.2 内建函数及代码生成"
4110
4111 #: config/i386/i386.opt:328
4112-#, fuzzy
4113 msgid "%<-msse5%> was removed"
4114-msgstr "‘-msse5’已被移除"
4115+msgstr "%<-msse5%>已被移除"
4116
4117 #: config/i386/i386.opt:333
4118 msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
4119@@ -6405,14 +6392,12 @@
4120 msgstr "支持生成 popcnt 指令。"
4121
4122 #: config/i386/i386.opt:365
4123-#, fuzzy
4124 msgid "Support BMI built-in functions and code generation"
4125-msgstr "支持 FMA4 内建函数及代码生成"
4126+msgstr "支持 BMI 内建函数及代码生成"
4127
4128 #: config/i386/i386.opt:369
4129-#, fuzzy
4130 msgid "Support TBM built-in functions and code generation"
4131-msgstr "支持 FMA4 内建函数及代码生成"
4132+msgstr "支持 TBM 内建函数及代码生成"
4133
4134 #: config/i386/i386.opt:373
4135 msgid "Support code generation of cmpxchg16b instruction."
4136@@ -6443,19 +6428,16 @@
4137 msgstr "支持带 VEX 前缀的 SSE 指令"
4138
4139 #: config/i386/i386.opt:401
4140-#, fuzzy
4141 msgid "Support FSGSBASE built-in functions and code generation"
4142-msgstr "支持 SSE5 内建函数及代码生成"
4143+msgstr "支持 FSGSBASE 内建函数及代码生成"
4144
4145 #: config/i386/i386.opt:405
4146-#, fuzzy
4147 msgid "Support RDRND built-in functions and code generation"
4148-msgstr "支持 AES 内建函数及代码生成"
4149+msgstr "支持 RDRND 内建函数及代码生成"
4150
4151 #: config/i386/i386.opt:409
4152-#, fuzzy
4153 msgid "Support F16C built-in functions and code generation"
4154-msgstr "支持 FMA4 内建函数及代码生成"
4155+msgstr "支持 F16C 内建函数及代码生成"
4156
4157 #: config/i386/i386.opt:413
4158 #, fuzzy
4159@@ -6464,7 +6446,7 @@
4160
4161 #: config/i386/i386.opt:417
4162 msgid "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-time check"
4163-msgstr ""
4164+msgstr "将 32/64 位整数除法扩展为带运行时检查的 8 位无符号整数除法"
4165
4166 #: config/i386/cygming.opt:23
4167 msgid "Create console application"
4168@@ -6604,7 +6586,7 @@
4169
4170 #: config/rs6000/rs6000.opt:224
4171 msgid "Under -ffast-math, generate a FRIZ instruction for (double)(long long) conversions"
4172-msgstr ""
4173+msgstr "在 -ffast-math 时,为 (double)(long long) 转换生成 FRIZ 指令"
4174
4175 #: config/rs6000/rs6000.opt:232
4176 msgid "Use vector/scalar (VSX) instructions"
4177@@ -6809,7 +6791,7 @@
4178
4179 #: config/rs6000/linux64.opt:28
4180 msgid "Select code model"
4181-msgstr ""
4182+msgstr "选择代码模型"
4183
4184 #: config/rs6000/sysv4.opt:24
4185 msgid "Select ABI calling convention"
4186@@ -7532,7 +7514,7 @@
4187 #: config/avr/avr.opt:60
4188 #, fuzzy
4189 msgid "Make the linker relaxation machine assume that a program counter wrap-around occurs."
4190-msgstr "使链接器松驰机假定会发生程序计数器环绕"
4191+msgstr "链接器松驰机器假定一个程序计数器环绕发生 。"
4192
4193 #: config/crx/crx.opt:23
4194 msgid "Support multiply accumulate instructions"
4195@@ -8185,9 +8167,8 @@
4196 msgstr "为 TDA 区域合格的数据设置最大尺寸"
4197
4198 #: config/v850/v850.opt:71
4199-#, fuzzy
4200 msgid "Do not enforce strict alignment"
4201-msgstr "强制严格对齐"
4202+msgstr "不强制严格对齐"
4203
4204 #: config/v850/v850.opt:75
4205 msgid "Put jump tables for switch statements into the .data section rather than the .code section"
4206@@ -8206,19 +8187,16 @@
4207 msgstr "为 v850e1 处理器编译"
4208
4209 #: config/v850/v850.opt:94
4210-#, fuzzy
4211 msgid "Compile for the v850es variant of the v850e1"
4212-msgstr "为 v850e 处理器编译"
4213+msgstr "为 v850e1 的 v850es 变种编译"
4214
4215 #: config/v850/v850.opt:98
4216-#, fuzzy
4217 msgid "Compile for the v850e2 processor"
4218-msgstr "为 v850e 处理器编译"
4219+msgstr "为 v850e2 处理器编译"
4220
4221 #: config/v850/v850.opt:102
4222-#, fuzzy
4223 msgid "Compile for the v850e2v3 processor"
4224-msgstr "为 v850e 处理器编译"
4225+msgstr "为 v850e2v3 处理器编译"
4226
4227 #: config/v850/v850.opt:106
4228 msgid "Set the max size of data eligible for the ZDA area"
4229@@ -8410,7 +8388,7 @@
4230
4231 #: config/darwin.opt:111
4232 msgid "Generate compile-time CFString objects"
4233-msgstr ""
4234+msgstr "生成编译时 CFString 对象"
4235
4236 #: config/darwin.opt:205
4237 msgid "Warn if constant CFString objects contain non-portable characters"
4238@@ -8418,7 +8396,7 @@
4239
4240 #: config/darwin.opt:210
4241 msgid "Generate AT&T-style stubs for Mach-O"
4242-msgstr ""
4243+msgstr "为 Mach-O 生成 AT&T 风格的占位代码"
4244
4245 #: config/darwin.opt:214
4246 msgid "Generate code suitable for executables (NOT shared libs)"
4247@@ -8478,16 +8456,15 @@
4248
4249 #: config/linux.opt:24
4250 msgid "Use Bionic C library"
4251-msgstr ""
4252+msgstr "使用 Bionic C 标准库"
4253
4254 #: config/linux.opt:28
4255 msgid "Use GNU C library"
4256-msgstr ""
4257+msgstr "使用 GNU C 标准库"
4258
4259 #: config/linux.opt:32
4260-#, fuzzy
4261 msgid "Use uClibc C library"
4262-msgstr "使用 uClibc 代替 GNU libc"
4263+msgstr "使用 uClibc C 标准库"
4264
4265 #: config/mep/mep.opt:21
4266 msgid "Enable absolute difference instructions"
4267@@ -8691,9 +8668,8 @@
4268 msgstr "使用软件浮点单元"
4269
4270 #: config/microblaze/microblaze.opt:44
4271-#, fuzzy
4272 msgid "Use hardware floating point instructions"
4273-msgstr "使用十进制浮点指令"
4274+msgstr "使用硬件浮点指令"
4275
4276 #: config/microblaze/microblaze.opt:48
4277 #, fuzzy
4278@@ -8701,26 +8677,24 @@
4279 msgstr "在树级别进行循环优化"
4280
4281 #: config/microblaze/microblaze.opt:52
4282-#, fuzzy
4283 msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU"
4284-msgstr "-mcpu=\t使用指定 CPU 的特性和调度代码"
4285+msgstr "-mcpu=处理器\t使用指定 CPU 的特性并为其调度代码"
4286
4287 #: config/microblaze/microblaze.opt:56
4288-#, fuzzy
4289 msgid "Don't optimize block moves, use memcpy"
4290-msgstr "不优化块移动"
4291+msgstr "不优化块移动,使用 memcpy"
4292
4293 #: config/microblaze/microblaze.opt:60
4294 msgid "Use the soft multiply emulation (default)"
4295-msgstr ""
4296+msgstr "使用软件模拟乘法(默认)"
4297
4298 #: config/microblaze/microblaze.opt:64
4299 msgid "Use the software emulation for divides (default)"
4300-msgstr ""
4301+msgstr "使用软件模拟除法(默认)"
4302
4303 #: config/microblaze/microblaze.opt:68
4304 msgid "Use the hardware barrel shifter instead of emulation"
4305-msgstr ""
4306+msgstr "使用硬件桶型移位器代替仿真"
4307
4308 #: config/microblaze/microblaze.opt:72
4309 #, fuzzy
4310@@ -8728,27 +8702,24 @@
4311 msgstr "使用浮点双精度指令"
4312
4313 #: config/microblaze/microblaze.opt:76
4314-#, fuzzy
4315 msgid "Check for stack overflow at runtime"
4316-msgstr "检查语法错误,然后停止"
4317+msgstr "在运行时检查栈溢出"
4318
4319 #: config/microblaze/microblaze.opt:84
4320 msgid "Clear the BSS to zero and place zero initialized in BSS"
4321-msgstr ""
4322+msgstr "将 BSS 清空为零并将初始值为零的放入 BSS 中"
4323
4324 #: config/microblaze/microblaze.opt:88
4325 msgid "Use multiply high instructions for high part of 32x32 multiply"
4326 msgstr ""
4327
4328 #: config/microblaze/microblaze.opt:92
4329-#, fuzzy
4330 msgid "Use hardware floating point conversion instructions"
4331-msgstr "使用十进制浮点指令"
4332+msgstr "使用浮点转换指令"
4333
4334 #: config/microblaze/microblaze.opt:96
4335-#, fuzzy
4336 msgid "Use hardware floating point square root instruction"
4337-msgstr "使用十进制浮点指令"
4338+msgstr "使用浮点平方根指令"
4339
4340 #: config/microblaze/microblaze.opt:100
4341 msgid "Description for mxl-mode-executable"
4342@@ -8767,23 +8738,20 @@
4343 msgstr ""
4344
4345 #: config/linux-android.opt:23
4346-#, fuzzy
4347 msgid "Generate code for the Android platform."
4348-msgstr "为 Android 操作系统生成代码"
4349+msgstr "为 Android 操作系统生成代码。"
4350
4351 #: config/g.opt:28
4352 msgid "-G<number>\tPut global and static data smaller than <number> bytes into a special section (on some targets)"
4353 msgstr "-G<N>\t将小于 N 字节的全局和静态数据放入一个特殊的节中(在某些目标机上)"
4354
4355 #: config/sol2.opt:35
4356-#, fuzzy
4357 msgid "Pass -z text to linker"
4358-msgstr "将 -assert pure-text 传递给链接器"
4359+msgstr "将 -z text 传递给链接器"
4360
4361 #: config/fused-madd.opt:23
4362-#, fuzzy
4363 msgid "%<-mfused-madd%> is deprecated; use %<-ffp-contract=%> instead"
4364-msgstr "不建议使用此开关;请改用 -Wextra"
4365+msgstr "不建议使用%<-mfused-madd%>;请改用%<-ffp-contract=%>"
4366
4367 #: c-family/c.opt:44 c-family/c.opt:47 c-family/c.opt:185
4368 #, c-format
4369@@ -9021,14 +8989,12 @@
4370 msgstr "对初始化为自身的变量给出警告。"
4371
4372 #: c-family/c.opt:411
4373-#, fuzzy
4374 msgid "Warn about implicit declarations"
4375 msgstr "对隐式函数声明给出警告"
4376
4377 #: c-family/c.opt:415
4378-#, fuzzy
4379 msgid "Warn about implicit conversions from \"float\" to \"double\""
4380-msgstr "对隐式转换给出警告"
4381+msgstr "对从“float”到“double”的隐式转换给出警告"
4382
4383 #: c-family/c.opt:419
4384 msgid "Warn about implicit function declarations"
4385@@ -9275,7 +9241,6 @@
4386 msgstr "当一个寄存器变量被声明为 volatile 时给出警告"
4387
4388 #: c-family/c.opt:670
4389-#, fuzzy
4390 msgid "In C++, nonzero means warn about deprecated conversion from string literals to 'char *'. In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard."
4391 msgstr "在 C++ 中,非零值表示将字面字符串转换为‘char *’时给出警告。在 C 中,给出相似的警告,但这种类型转换是符合 ISO C 标准的。"
4392
4393@@ -9302,9 +9267,8 @@
4394
4395 #: c-family/c.opt:693 c-family/c.opt:799 c-family/c.opt:1018
4396 #: c-family/c.opt:1022 c-family/c.opt:1038
4397-#, fuzzy
4398 msgid "No longer supported"
4399-msgstr "开关%qs不再被支持"
4400+msgstr "不再受支持"
4401
4402 #: c-family/c.opt:697
4403 msgid "Recognize the \"asm\" keyword"
4404@@ -9415,7 +9379,7 @@
4405
4406 #: c-family/c.opt:819
4407 msgid "Don't emit dllexported inline functions unless needed"
4408-msgstr ""
4409+msgstr "除非必需,不生成 DLL 导出的内联函数"
4410
4411 #: c-family/c.opt:826
4412 msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
4413@@ -9487,9 +9451,8 @@
4414 msgstr "将兼容性错误降格为警告"
4415
4416 #: c-family/c.opt:918
4417-#, fuzzy
4418 msgid "Enable Plan 9 language extensions"
4419-msgstr "启用链接器松弛"
4420+msgstr "启用九号计划语言扩展"
4421
4422 #: c-family/c.opt:922
4423 msgid "Treat the input file as already preprocessed"
4424@@ -9672,9 +9635,8 @@
4425 msgstr "遵循 ISO 1998 C++ 标准,也支持可能集成在下一个 ISO C++ 标准中的扩展"
4426
4427 #: c-family/c.opt:1147
4428-#, fuzzy
4429 msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
4430-msgstr "遵循 ISO 1990 C 标准于 1994 年修订的版本"
4431+msgstr "遵循 ISO 201X C 标准草案(试验性质的不完全支持)"
4432
4433 #: c-family/c.opt:1151 c-family/c.opt:1155 c-family/c.opt:1198
4434 msgid "Conform to the ISO 1990 C standard"
4435@@ -9697,9 +9659,8 @@
4436 msgstr "遵循 ISO 1998 C++ 标准,也支持 GNU 扩展和可能集成在下一代 ISO C++ 标准中的扩展"
4437
4438 #: c-family/c.opt:1178
4439-#, fuzzy
4440 msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
4441-msgstr "遵循 ISO 1998 C++ 标准,也支持 GNU 扩展和可能集成在下一代 ISO C++ 标准中的扩展"
4442+msgstr "遵循 ISO 201X C 标准草案和 GNU 扩展(试验性质的不完全支持)"
4443
4444 #: c-family/c.opt:1182 c-family/c.opt:1186
4445 msgid "Conform to the ISO 1990 C standard with GNU extensions"
4446@@ -9789,7 +9750,7 @@
4447
4448 #: common.opt:436
4449 msgid "Optimize for speed disregarding exact standards compliance"
4450-msgstr ""
4451+msgstr "为速度优化,不严格遵守标准"
4452
4453 #: common.opt:467
4454 msgid "This switch is deprecated; use -Wextra instead"
4455@@ -10287,9 +10248,8 @@
4456 msgstr "启用循环分块转换"
4457
4458 #: common.opt:1140
4459-#, fuzzy
4460 msgid "Enable Loop Flattening transformation"
4461-msgstr "启用循环分块转换"
4462+msgstr "启用循环扁平化转换"
4463
4464 #: common.opt:1144
4465 msgid "Force bitfield accesses to match their type width"
4466@@ -10318,7 +10278,7 @@
4467
4468 #: common.opt:1172
4469 msgid "Also if-convert conditional jumps containing memory writes"
4470-msgstr ""
4471+msgstr "将包含内存写入的条件跳转转换为不带分支的等效形式"
4472
4473 #: common.opt:1180
4474 msgid "Do not generate .size directives"
4475@@ -10400,7 +10360,7 @@
4476 #: common.opt:1265
4477 #, fuzzy, c-format
4478 msgid "unknown IRA algorithm %qs"
4479-msgstr "未知的 IRA 算法“%s”"
4480+msgstr "未知的 TLS 模型%qs"
4481
4482 #: common.opt:1275
4483 msgid "-fira-region=[one|all|mixed] Set regions for IRA"
4484@@ -10409,7 +10369,7 @@
4485 #: common.opt:1278
4486 #, fuzzy, c-format
4487 msgid "unknown IRA region %qs"
4488-msgstr "未知的 IRA 区域“%s”"
4489+msgstr "未知的 TLS 模型%qs"
4490
4491 #: common.opt:1291
4492 msgid "Use IRA based register pressure calculation"
4493@@ -10481,7 +10441,6 @@
4494 msgstr "执行内建数学函数后设置 errno"
4495
4496 #: common.opt:1365
4497-#, fuzzy
4498 msgid "-fmax-errors=<number>\tMaximum number of errors to report"
4499 msgstr "-fmax-errors=<n>\t报告错误数量的上限值"
4500
4501@@ -10558,9 +10517,8 @@
4502 msgstr "优化同级递归和尾递归"
4503
4504 #: common.opt:1444
4505-#, fuzzy
4506 msgid "Perform partial inlining"
4507-msgstr "进行早内联"
4508+msgstr "进行部分内联"
4509
4510 #: common.opt:1448 common.opt:1452
4511 msgid "Report on memory allocation before interprocedural optimization"
4512@@ -10825,7 +10783,7 @@
4513 #: common.opt:1743
4514 #, fuzzy
4515 msgid "Generate discontiguous stack frames"
4516-msgstr "生成与 APCS 相容的栈帧"
4517+msgstr "生成与 APCS 相容的堆栈框架"
4518
4519 #: common.opt:1747
4520 msgid "Split wide types into independent registers"
4521@@ -10893,9 +10851,9 @@
4522 msgstr "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\t设定默认的线程局部存储代码生成模式"
4523
4524 #: common.opt:1821
4525-#, fuzzy, c-format
4526+#, c-format
4527 msgid "unknown TLS model %qs"
4528-msgstr "未知的 tls-model“%s”"
4529+msgstr "未知的 TLS 模型%qs"
4530
4531 #: common.opt:1837
4532 msgid "Reorder top level functions, variables, and asms"
4533@@ -10920,7 +10878,7 @@
4534 #: common.opt:1860
4535 #, fuzzy
4536 msgid "Enable SSA-BIT-CCP optimization on trees"
4537-msgstr "启用树上的 SSA-CCP 优化"
4538+msgstr "启用树上的 SSA 死代码消除优化"
4539
4540 #: common.opt:1868
4541 msgid "Enable loop header copying on trees"
4542@@ -11115,7 +11073,7 @@
4543 #: common.opt:2091
4544 #, fuzzy, c-format
4545 msgid "unrecognized visibility value %qs"
4546-msgstr "无法识别的可见性值“%s”"
4547+msgstr "无效的 --param 值%qs"
4548
4549 #: common.opt:2107
4550 msgid "Use expression value profiles in optimizations"
4551@@ -11190,9 +11148,8 @@
4552 msgstr "生成 XCOFF 扩展格式的调试信息"
4553
4554 #: common.opt:2182
4555-#, fuzzy
4556 msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory"
4557-msgstr "-imultilib <目录>\t将目录设定为 multilib 的包含子目录"
4558+msgstr "-iplugindir=<目录>\t将目录设定为默认的插件子目录"
4559
4560 #: common.opt:2204
4561 msgid "-o <file>\tPlace output into <file>"
4562@@ -11237,12 +11194,12 @@
4563 #: go/gofrontend/expressions.cc:882
4564 #, fuzzy
4565 msgid "invalid use of type"
4566-msgstr "错误地使用了%qD"
4567+msgstr "对未定义类型%<%s %E%>的使用无效"
4568
4569 #: go/gofrontend/expressions.cc:1992 go/gofrontend/expressions.cc:2686
4570 #, fuzzy
4571 msgid "floating point constant truncated to integer"
4572-msgstr "浮点常量向零截断"
4573+msgstr "大定点常量隐式截断为定点类型"
4574
4575 #: go/gofrontend/expressions.cc:2566 go/gofrontend/expressions.cc:2636
4576 #: go/gofrontend/expressions.cc:2652
4577@@ -11251,24 +11208,21 @@
4578 msgstr "inlined_to pointer 指向自身"
4579
4580 #: go/gofrontend/expressions.cc:4043
4581-#, fuzzy
4582 msgid "expected numeric type"
4583-msgstr "需要表达式类型"
4584+msgstr "需要数字类型"
4585
4586 #: go/gofrontend/expressions.cc:4050
4587-#, fuzzy
4588 msgid "expected integer or boolean type"
4589-msgstr "需要整数表达式"
4590+msgstr "需要整数或布尔类型"
4591
4592 #: go/gofrontend/expressions.cc:4055
4593 #, fuzzy
4594 msgid "invalid operand for unary %<&%>"
4595-msgstr "%%R 的操作数无效"
4596+msgstr "代码‘%c’的操作数无效"
4597
4598 #: go/gofrontend/expressions.cc:4063
4599-#, fuzzy
4600 msgid "expected pointer"
4601-msgstr "需要整数"
4602+msgstr "需要指针"
4603
4604 #: go/gofrontend/expressions.cc:5456 go/gofrontend/expressions.cc:5707
4605 #: go/gofrontend/expressions.cc:5723
4606@@ -11279,7 +11233,7 @@
4607 #: go/gofrontend/expressions.cc:5736
4608 #, fuzzy
4609 msgid "shift of non-integer operand"
4610-msgstr "数组%qE的大小的类型不是整数"
4611+msgstr "非整数操作数使用了操作数代码‘%c’"
4612
4613 #: go/gofrontend/expressions.cc:5741
4614 #, fuzzy
4615@@ -11287,41 +11241,36 @@
4616 msgstr "switch 语句中的值不是一个整数"
4617
4618 #: go/gofrontend/expressions.cc:5750
4619-#, fuzzy
4620 msgid "negative shift count"
4621-msgstr "指令长度为负"
4622+msgstr "移位次数为负"
4623
4624 #: go/gofrontend/expressions.cc:6433
4625-#, fuzzy
4626 msgid "object is not a method"
4627-msgstr "被调用的对象%qE不是一个函数"
4628+msgstr "对象不是一个方法"
4629
4630 #: go/gofrontend/expressions.cc:6442
4631-#, fuzzy
4632 msgid "method type does not match object type"
4633-msgstr "实参类型为%qT,与%qT不匹配"
4634+msgstr "方法类型不匹配对象类型"
4635
4636 #: go/gofrontend/expressions.cc:6690 go/gofrontend/expressions.cc:6709
4637 #: go/gofrontend/expressions.cc:7348 go/gofrontend/expressions.cc:7487
4638 #: go/gofrontend/expressions.cc:7530 go/gofrontend/expressions.cc:7568
4639 #: go/gofrontend/expressions.cc:8603 go/gofrontend/expressions.cc:8624
4640-#, fuzzy
4641 msgid "not enough arguments"
4642-msgstr "没有参数"
4643+msgstr "实参太少"
4644
4645 #: go/gofrontend/expressions.cc:6692 go/gofrontend/expressions.cc:7353
4646 #: go/gofrontend/expressions.cc:7470 go/gofrontend/expressions.cc:7492
4647 #: go/gofrontend/expressions.cc:7535 go/gofrontend/expressions.cc:7570
4648 #: go/gofrontend/expressions.cc:8357 go/gofrontend/expressions.cc:8606
4649 #: go/gofrontend/expressions.cc:8617
4650-#, fuzzy
4651 msgid "too many arguments"
4652-msgstr "%qE实参太多"
4653+msgstr "实参太多"
4654
4655 #: go/gofrontend/expressions.cc:7395
4656 #, fuzzy
4657 msgid "argument must be array or slice or channel"
4658-msgstr "实参必须是常数"
4659+msgstr "右实参必须是一个切片或字符串"
4660
4661 #: go/gofrontend/expressions.cc:7405
4662 msgid "argument must be string or array or slice or map or channel"
4663@@ -11330,104 +11279,91 @@
4664 #: go/gofrontend/expressions.cc:7446
4665 #, fuzzy
4666 msgid "unsupported argument type to builtin function"
4667-msgstr "内建函数实参无效"
4668+msgstr "%<__builtin_frame_address%>的实参不受支持"
4669
4670 #: go/gofrontend/expressions.cc:7458
4671-#, fuzzy
4672 msgid "argument must be channel"
4673-msgstr "实参必须是常数"
4674+msgstr "实参必须是通道"
4675
4676 #: go/gofrontend/expressions.cc:7478
4677 #, fuzzy
4678 msgid "argument must be a field reference"
4679-msgstr "最后一个实参必须是一个立即数"
4680+msgstr "%3$L处内建函数‘%2$s’的实参‘%1$s’必须是 %4$s"
4681
4682 #: go/gofrontend/expressions.cc:7505
4683-#, fuzzy
4684 msgid "left argument must be a slice"
4685-msgstr "最后一个实参必须是一个立即数"
4686+msgstr "左实参必须是一个切片"
4687
4688 #: go/gofrontend/expressions.cc:7516
4689-#, fuzzy
4690 msgid "right argument must be a slice or a string"
4691-msgstr "实参必须是常数"
4692+msgstr "右实参必须是一个切片或字符串"
4693
4694 #: go/gofrontend/expressions.cc:7521
4695 msgid "element types must be the same"
4696-msgstr ""
4697+msgstr "元素类型必须一样"
4698
4699 #: go/gofrontend/expressions.cc:7543
4700-#, fuzzy
4701 msgid "arguments 1 and 2 have different types"
4702-msgstr "允许‘?’运算符的参数有不同的类型"
4703+msgstr "实参 1 和 2 具有不同的类型"
4704
4705 #: go/gofrontend/expressions.cc:7560
4706-#, fuzzy
4707 msgid "argument must have complex type"
4708-msgstr "形参 %u 的类型不完全"
4709+msgstr "实参必须具有复数类型"
4710
4711 #: go/gofrontend/expressions.cc:7578
4712-#, fuzzy
4713 msgid "complex arguments must have identical types"
4714-msgstr "cleanup 实参不是一个标识符"
4715+msgstr "复数实参必须具有相同的类型"
4716
4717 #: go/gofrontend/expressions.cc:7580
4718-#, fuzzy
4719 msgid "complex arguments must have floating-point type"
4720-msgstr "不使用硬件浮点单元"
4721+msgstr "复数实参必须具有浮点类型"
4722
4723 #: go/gofrontend/expressions.cc:8560
4724-#, fuzzy
4725 msgid "expected function"
4726-msgstr "函数%q+D已删除"
4727+msgstr "需要函数"
4728
4729 #: go/gofrontend/expressions.cc:8571
4730 msgid "method call without object"
4731-msgstr ""
4732+msgstr "方法调用缺少对象"
4733
4734 #: go/gofrontend/expressions.cc:8584
4735-#, fuzzy
4736 msgid "incompatible type for receiver"
4737-msgstr "%2$qE的第 %1$d 个实参类型不兼容"
4738+msgstr "接收器类型不兼容"
4739
4740 #: go/gofrontend/expressions.cc:8982 go/gofrontend/expressions.cc:8995
4741-#, fuzzy
4742 msgid "number of results does not match number of values"
4743-msgstr "引入边计数不匹配 PHI 参数数目"
4744+msgstr "返回值的数量不匹配值的数量"
4745
4746 #: go/gofrontend/expressions.cc:9246 go/gofrontend/expressions.cc:9625
4747-#, fuzzy
4748 msgid "index must be integer"
4749-msgstr "%C处 Cray 指针必须是一个整数"
4750+msgstr "索引必须是整数"
4751
4752 #: go/gofrontend/expressions.cc:9250 go/gofrontend/expressions.cc:9629
4753-#, fuzzy
4754 msgid "slice end must be integer"
4755-msgstr "%C处 Cray 指针必须是一个整数"
4756+msgstr "切片结尾必须是整数"
4757
4758 #: go/gofrontend/expressions.cc:9305
4759-#, fuzzy
4760 msgid "array is not addressable"
4761-msgstr "内存输入 %d 不可直接寻址"
4762+msgstr "数组不能被取指"
4763
4764 #: go/gofrontend/expressions.cc:9844
4765-#, fuzzy
4766 msgid "incompatible type for map index"
4767-msgstr "%2$qE的第 %1$d 个实参类型不兼容"
4768+msgstr "映射索引类型不兼容"
4769
4770 #: go/gofrontend/expressions.cc:10163
4771+#, fuzzy
4772 msgid "expected interface or pointer to interface"
4773-msgstr ""
4774+msgstr "%<delete%>的参数类型应为指针而非%q#T"
4775
4776 #: go/gofrontend/expressions.cc:10468
4777 #, fuzzy
4778 msgid "invalid new of function type"
4779-msgstr "向函数类型%qT的转换无效"
4780+msgstr "对 new 而言类型%<void%>无效"
4781
4782 #: go/gofrontend/expressions.cc:10573
4783 #, fuzzy
4784 msgid "invalid type for make function"
4785-msgstr "纯常函数状态无效"
4786+msgstr "函数%q+#D的抽象返回类型无效"
4787
4788 #: go/gofrontend/expressions.cc:10732
4789 #, fuzzy
4790@@ -11446,7 +11382,7 @@
4791 #: go/gofrontend/expressions.cc:12139 go/gofrontend/expressions.cc:12147
4792 #, fuzzy
4793 msgid "invalid unsafe.Pointer conversion"
4794-msgstr "整点转换中类型无效"
4795+msgstr "从%<__fpreg%>的转换无效"
4796
4797 #: go/gofrontend/expressions.cc:12152 go/gofrontend/statements.cc:1349
4798 msgid "type assertion only valid for interface types"
4799@@ -11457,9 +11393,8 @@
4800 msgstr ""
4801
4802 #: go/gofrontend/expressions.cc:12320 go/gofrontend/statements.cc:1200
4803-#, fuzzy
4804 msgid "expected channel"
4805-msgstr "需要类名"
4806+msgstr "需要通道"
4807
4808 #: go/gofrontend/expressions.cc:12325 go/gofrontend/statements.cc:1205
4809 msgid "invalid receive on send-only channel"
4810@@ -11468,7 +11403,7 @@
4811 #: go/gofrontend/expressions.cc:12419
4812 #, fuzzy
4813 msgid "incompatible types in send"
4814-msgstr "PHI 实参 %u 类型不兼容"
4815+msgstr "指针目标类型在 C++ 中不兼容"
4816
4817 #: go/gofrontend/expressions.cc:12424
4818 #, fuzzy
4819@@ -11478,7 +11413,7 @@
4820 #: go/gofrontend/statements.cc:521
4821 #, fuzzy
4822 msgid "invalid left hand side of assignment"
4823-msgstr "赋值运算的左操作数必须是左值"
4824+msgstr "在左操作数边转化 SSA_NAME。"
4825
4826 #: go/gofrontend/statements.cc:930
4827 msgid "expected map index on right hand side"
4828@@ -11491,27 +11426,24 @@
4829
4830 #: go/gofrontend/statements.cc:1810
4831 msgid "no object for method call"
4832-msgstr ""
4833+msgstr "方法调用没有对象"
4834
4835 #: go/gofrontend/statements.cc:2580
4836 #, fuzzy
4837 msgid "return with value in function with no return type"
4838-msgstr "在无返回值的函数中,%<return%>带返回值"
4839+msgstr "在有返回值的的函数中,%<return%>不带返回值"
4840
4841 #: go/gofrontend/statements.cc:2593
4842-#, fuzzy
4843 msgid "too many values in return statement"
4844-msgstr "返回语句操作数无效"
4845+msgstr "返回语句中值太多"
4846
4847 #: go/gofrontend/statements.cc:2622
4848-#, fuzzy
4849 msgid "not enough values in return statement"
4850-msgstr "返回语句操作数无效"
4851+msgstr "返回语句中值不够"
4852
4853 #: go/gofrontend/statements.cc:2998
4854-#, fuzzy
4855 msgid "expected boolean expression"
4856-msgstr "需要表达式"
4857+msgstr "需要布尔表达式"
4858
4859 #: go/gofrontend/statements.cc:4612
4860 msgid "too many variables for range clause with channel"
4861@@ -11522,64 +11454,62 @@
4862 msgstr ""
4863
4864 #: go/gofrontend/types.cc:575
4865-#, fuzzy
4866 msgid "need explicit conversion"
4867-msgstr "对隐式转换给出警告"
4868+msgstr "需要显式转换"
4869
4870 #: go/gofrontend/types.cc:577
4871 msgid "multiple value function call in single value context"
4872 msgstr ""
4873
4874 #: go/gofrontend/types.cc:585
4875-#, fuzzy, c-format
4876+#, c-format
4877 msgid "cannot use type %s as type %s"
4878-msgstr "不能将类型%qT转换为类型%qT"
4879+msgstr "不能将类型 %s 用作 %s"
4880
4881 #: go/gofrontend/types.cc:2479
4882-#, fuzzy
4883 msgid "different receiver types"
4884-msgstr "无效的接收者类型%qs"
4885+msgstr "不同的接收器类型"
4886
4887 #: go/gofrontend/types.cc:2499 go/gofrontend/types.cc:2512
4888 #: go/gofrontend/types.cc:2527
4889-#, fuzzy
4890 msgid "different number of parameters"
4891-msgstr "一个静态控制部分(ScoP)中参数的最大数量"
4892+msgstr "形参数量不同"
4893
4894 #: go/gofrontend/types.cc:2520
4895-#, fuzzy
4896 msgid "different parameter types"
4897-msgstr "无效的参数类型%qT"
4898+msgstr "形参类型不同"
4899
4900 #: go/gofrontend/types.cc:2535
4901 msgid "different varargs"
4902-msgstr ""
4903+msgstr "不同的可变参数"
4904
4905 #: go/gofrontend/types.cc:2544 go/gofrontend/types.cc:2557
4906 #: go/gofrontend/types.cc:2572
4907+#, fuzzy
4908 msgid "different number of results"
4909-msgstr ""
4910+msgstr "形参数量不同"
4911
4912 #: go/gofrontend/types.cc:2565
4913+#, fuzzy
4914 msgid "different result types"
4915-msgstr ""
4916+msgstr "不同的接收器类型"
4917
4918 #: go/gofrontend/types.cc:3546
4919 #, c-format
4920 msgid "implicit assignment of %s%s%s hidden field %s%s%s"
4921-msgstr ""
4922+msgstr "对%s%s%s的隐式赋值隐藏了字段%s%s%s"
4923
4924 #: go/gofrontend/types.cc:4386
4925 msgid "bad length when making slice"
4926-msgstr ""
4927+msgstr "生成切片时长度错误"
4928
4929 #: go/gofrontend/types.cc:4392
4930 msgid "bad capacity when making slice"
4931-msgstr ""
4932+msgstr "生成切片时容量错误"
4933
4934 #: go/gofrontend/types.cc:5090
4935 msgid "bad size when making map"
4936-msgstr ""
4937+msgstr "生成映射时大小错误"
4938
4939 #: go/gofrontend/types.cc:5375
4940 msgid "bad buffer size when making channel"
4941@@ -11588,41 +11518,40 @@
4942 #: go/gofrontend/types.cc:5870
4943 #, c-format
4944 msgid "need explicit conversion; missing method %s%s%s"
4945-msgstr ""
4946+msgstr "需要显式转换;缺少方法%s%s%s"
4947
4948 #: go/gofrontend/types.cc:5887 go/gofrontend/types.cc:6022
4949-#, fuzzy, c-format
4950+#, c-format
4951 msgid "incompatible type for method %s%s%s"
4952-msgstr "%2$qE的第 %1$d 个实参类型不兼容"
4953+msgstr "方法%s%s%s类型不兼容"
4954
4955 #: go/gofrontend/types.cc:5891 go/gofrontend/types.cc:6026
4956 #, fuzzy, c-format
4957 msgid "incompatible type for method %s%s%s (%s)"
4958-msgstr "%2$qE的第 %1$d 个实参类型不兼容"
4959+msgstr "方法%s%s%s类型不兼容"
4960
4961 #: go/gofrontend/types.cc:5963 go/gofrontend/types.cc:5976
4962 msgid "pointer to interface type has no methods"
4963 msgstr ""
4964
4965 #: go/gofrontend/types.cc:5965 go/gofrontend/types.cc:5978
4966-#, fuzzy
4967 msgid "type has no methods"
4968-msgstr "词法分析方法时出错"
4969+msgstr "类型没有方法"
4970
4971 #: go/gofrontend/types.cc:5999
4972-#, fuzzy, c-format
4973+#, c-format
4974 msgid "ambiguous method %s%s%s"
4975-msgstr "有歧义的缩写 %s"
4976+msgstr "有歧义的方法%s%s%s"
4977
4978 #: go/gofrontend/types.cc:6002
4979-#, fuzzy, c-format
4980+#, c-format
4981 msgid "missing method %s%s%s"
4982-msgstr "“%s”缺少实参"
4983+msgstr "缺少方法%s%s%s"
4984
4985 #: go/gofrontend/types.cc:6042
4986 #, c-format
4987 msgid "method %s%s%s requires a pointer"
4988-msgstr ""
4989+msgstr "方法%s%s%s需要一个指针"
4990
4991 #. Warn about and ignore all others for now, but store them.
4992 #: attribs.c:306 objc/objc-act.c:4799 objc/objc-act.c:6692
4993@@ -11896,9 +11825,9 @@
4994 msgstr "未使用的变量%q+D"
4995
4996 #: c-decl.c:1183
4997-#, fuzzy, gcc-internal-format
4998+#, gcc-internal-format
4999 msgid "variable %qD set but not used"
5000-msgstr "标号%q+D定义后未使用"
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches