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

Proposed by Andrew Stubbs
Status: Merged
Approved by: Ulrich Weigand
Approved revision: no longer in the source branch.
Merged at revision: 99505
Proposed branch: lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5.3
Merge into: lp:gcc-linaro/4.5
Diff against target: 4828 lines (+2513/-342)
140 files modified
ChangeLog (+4/-0)
ChangeLog.linaro (+4/-0)
boehm-gc/ChangeLog (+4/-0)
config/ChangeLog (+4/-0)
contrib/ChangeLog (+4/-0)
contrib/reghunt/ChangeLog (+4/-0)
contrib/regression/ChangeLog (+4/-0)
fixincludes/ChangeLog (+4/-0)
gcc/ChangeLog (+394/-0)
gcc/DATESTAMP (+1/-1)
gcc/DEV-PHASE (+0/-1)
gcc/ada/ChangeLog (+4/-0)
gcc/alias.c (+8/-0)
gcc/c-common.c (+1/-0)
gcc/c-lex.c (+9/-2)
gcc/c-ppoutput.c (+6/-1)
gcc/cfgloopmanip.c (+13/-4)
gcc/cgraphunit.c (+4/-43)
gcc/config/alpha/osf.h (+5/-1)
gcc/config/i386/predicates.md (+1/-6)
gcc/config/i386/sse.md (+66/-27)
gcc/config/pa/pa.c (+23/-15)
gcc/config/pa/pa.h (+1/-0)
gcc/config/pa/pa32-regs.h (+1/-0)
gcc/config/pa/pa64-regs.h (+2/-1)
gcc/config/rx/rx.md (+9/-0)
gcc/cp/ChangeLog (+47/-0)
gcc/cp/call.c (+6/-7)
gcc/cp/cp-tree.h (+1/-1)
gcc/cp/cvt.c (+1/-3)
gcc/cp/decl.c (+13/-0)
gcc/cp/decl2.c (+10/-4)
gcc/cp/init.c (+47/-9)
gcc/cp/parser.c (+6/-0)
gcc/cp/search.c (+2/-8)
gcc/cp/typeck.c (+5/-1)
gcc/doc/sourcebuild.texi (+4/-1)
gcc/dse.c (+3/-3)
gcc/dwarf2out.c (+2/-2)
gcc/fold-const.c (+12/-2)
gcc/fortran/ChangeLog (+4/-0)
gcc/gcov-io.c (+7/-2)
gcc/gimplify.c (+2/-1)
gcc/haifa-sched.c (+2/-0)
gcc/ipa-inline.c (+7/-3)
gcc/java/ChangeLog (+4/-0)
gcc/lto/ChangeLog (+4/-0)
gcc/objc/ChangeLog (+4/-0)
gcc/objcp/ChangeLog (+4/-0)
gcc/omp-low.c (+12/-1)
gcc/po/ChangeLog (+4/-0)
gcc/reload1.c (+12/-28)
gcc/rtl.h (+1/-0)
gcc/sched-vis.c (+1/-1)
gcc/sel-sched-ir.c (+153/-113)
gcc/sel-sched-ir.h (+1/-4)
gcc/sel-sched.c (+55/-26)
gcc/simplify-rtx.c (+6/-2)
gcc/testsuite/ChangeLog (+227/-0)
gcc/testsuite/c-c++-common/raw-string-11.c (+13/-0)
gcc/testsuite/g++.dg/conversion/cast2.C (+0/-11)
gcc/testsuite/g++.dg/conversion/cast3.C (+14/-0)
gcc/testsuite/g++.dg/conversion/cond4.C (+31/-0)
gcc/testsuite/g++.dg/ext/attrib41.C (+19/-0)
gcc/testsuite/g++.dg/ext/complex7.C (+6/-0)
gcc/testsuite/g++.dg/gomp/pr47963.C (+11/-0)
gcc/testsuite/g++.dg/inherit/virtual8.C (+48/-0)
gcc/testsuite/g++.dg/lookup/koenig13.C (+16/-0)
gcc/testsuite/g++.dg/opt/pr46640.C (+44/-0)
gcc/testsuite/g++.dg/opt/pr46649.C (+9/-0)
gcc/testsuite/g++.dg/opt/pr47036.C (+10/-0)
gcc/testsuite/g++.dg/template/operator11.C (+25/-0)
gcc/testsuite/g++.dg/torture/pr46364.C (+20/-0)
gcc/testsuite/g++.dg/torture/pr47290.C (+19/-0)
gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog (+4/-0)
gcc/testsuite/gcc.dg/attr-alias-5.c (+1/-0)
gcc/testsuite/gcc.dg/dfp/pr48204.c (+10/-0)
gcc/testsuite/gcc.dg/gomp/pr47963.c (+11/-0)
gcc/testsuite/gcc.dg/guality/pr36977.c (+32/-0)
gcc/testsuite/gcc.dg/guality/pr48466.c (+41/-0)
gcc/testsuite/gcc.dg/pr45352-1.c (+13/-0)
gcc/testsuite/gcc.dg/pr45352-2.c (+17/-0)
gcc/testsuite/gcc.dg/pr45352-3.c (+16/-0)
gcc/testsuite/gcc.dg/pr45352.c (+24/-0)
gcc/testsuite/gcc.dg/pr45570.c (+28/-0)
gcc/testsuite/gcc.dg/pr45652.c (+39/-0)
gcc/testsuite/gcc.dg/pr46521.c (+20/-0)
gcc/testsuite/gcc.dg/pr46522.c (+33/-0)
gcc/testsuite/gcc.dg/pr46585.c (+11/-0)
gcc/testsuite/gcc.dg/pr46875.c (+27/-0)
gcc/testsuite/gcc.dg/pr47391.c (+22/-0)
gcc/testsuite/gcc.dg/pr47899.c (+26/-0)
gcc/testsuite/gcc.dg/pr48141.c (+17/-0)
gcc/testsuite/gcc.dg/pr48144.c (+16/-0)
gcc/testsuite/gcc.dg/torture/pr47473.c (+14/-0)
gcc/testsuite/gcc.dg/tree-prof/pr45354.c (+43/-0)
gcc/testsuite/gcc.dg/ucnid-10.c (+1/-0)
gcc/testsuite/gcc.dg/ucnid-13.c (+1/-0)
gcc/testsuite/gcc.dg/ucnid-7.c (+1/-0)
gcc/testsuite/gcc.dg/ucnid-8.c (+2/-1)
gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c (+8/-0)
gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c (+8/-0)
gcc/testsuite/gcc.target/i386/pr45352-1.c (+19/-0)
gcc/testsuite/gcc.target/i386/pr45352-2.c (+109/-0)
gcc/testsuite/gcc.target/i386/pr45352.c (+25/-0)
gcc/testsuite/gcc.target/i386/pr47809.c (+13/-0)
gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c (+5/-0)
gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c (+92/-0)
gcc/testsuite/gcc.target/ia64/pr43603.c (+39/-0)
gcc/testsuite/gfortran.dg/gomp/pr48117.f90 (+11/-0)
gcc/testsuite/lib/target-supports-dg.exp (+11/-2)
gcc/testsuite/lib/target-supports.exp (+11/-0)
gcc/tree-eh.c (+38/-2)
gcc/tree-ssa-ccp.c (+1/-1)
gcc/tree.c (+4/-0)
gnattools/ChangeLog (+4/-0)
include/ChangeLog (+4/-0)
intl/ChangeLog (+4/-0)
libada/ChangeLog (+4/-0)
libcpp/ChangeLog (+14/-0)
libcpp/lex.c (+3/-1)
libcpp/po/ChangeLog (+4/-0)
libdecnumber/ChangeLog (+4/-0)
libffi/ChangeLog (+4/-0)
libgcc/ChangeLog (+4/-0)
libgcc/config/libbid/ChangeLog (+4/-0)
libgfortran/ChangeLog (+4/-0)
libgomp/ChangeLog (+4/-0)
libiberty/ChangeLog (+4/-0)
libjava/ChangeLog (+9/-0)
libjava/classpath/ChangeLog (+4/-0)
libjava/libltdl/ChangeLog (+4/-0)
libjava/testsuite/libjava.jni/jni.exp (+5/-0)
libmudflap/ChangeLog (+4/-0)
libobjc/ChangeLog (+4/-0)
libssp/ChangeLog (+4/-0)
libstdc++-v3/ChangeLog (+4/-0)
lto-plugin/ChangeLog (+4/-0)
maintainer-scripts/ChangeLog (+4/-0)
zlib/ChangeLog (+4/-0)
To merge this branch: bzr merge lp:~ams-codesourcery/gcc-linaro/merge-fsf-4.5.3
Reviewer Review Type Date Requested Status
Ulrich Weigand (community) Approve
Review via email: mp+59393@code.launchpad.net

Description of the change

Merge from FSF GCC 4.5.3 release.

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

The snapshot is available at:
 http://ex.seabright.co.nz/snapshots/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3.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.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3
cbuild-ancestor: lp:gcc-linaro+bzr99502
cbuild-state: check

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

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

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

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat execution test
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat (test for excess errors)
 -PASS: gcc.dg/attr-alias-5.c (test for errors, line 7)
 +PASS: gcc.dg/attr-alias-5.c (test for errors, line 13)
 +PASS: gcc.dg/dfp/pr48204.c (test for excess errors)
 +PASS: gcc.dg/gomp/pr47963.c (test for errors, line 8)
 +PASS: gcc.dg/gomp/pr47963.c (test for excess errors)
 +PASS: gcc.dg/guality/pr36977.c -O0 execution test
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[0] == '\0'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[99] == 'A'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 dbig.d[202] == 9
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 fbig.f[100] == 11
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[0] == 55
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[100] == 5
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 lbig.l[333] == 999
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 sbig.s[90] == 255
 +PASS: gcc.dg/guality/pr36977.c -O0 (test for excess errors)
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O1
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2
 ...and 122 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/i686-lucid-cbuild113-scorpius-i686r1/gcc-testsuite.txt

cbuild-checked: i686-lucid-cbuild113-scorpius-i686r1

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

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

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

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat execution test
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat (test for excess errors)
 -PASS: gcc.dg/attr-alias-5.c (test for errors, line 7)
 +PASS: gcc.dg/attr-alias-5.c (test for errors, line 13)
 +PASS: gcc.dg/dfp/pr48204.c (test for excess errors)
 +PASS: gcc.dg/gomp/pr47963.c (test for errors, line 8)
 +PASS: gcc.dg/gomp/pr47963.c (test for excess errors)
 +PASS: gcc.dg/guality/pr36977.c -O0 execution test
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[0] == '\0'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[99] == 'A'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 dbig.d[202] == 9
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 fbig.f[100] == 11
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[0] == 55
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[100] == 5
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 lbig.l[333] == 999
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 sbig.s[90] == 255
 +PASS: gcc.dg/guality/pr36977.c -O0 (test for excess errors)
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O1
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2
 ...and 121 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/x86_64-maverick-cbuild113-crucis-x86_64r1/gcc-testsuite.txt

cbuild-checked: x86_64-maverick-cbuild113-crucis-x86_64r1

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

cbuild successfully built this on armv7l-maverick-cbuild113-ursa4-cortexa9r1.

The build results are available at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/armv7l-maverick-cbuild113-ursa4-cortexa9r1

The test suite results changed compared to the branch point lp:gcc-linaro+bzr99502:
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat execution test
 +PASS: c-c++-common/raw-string-11.c -Wc++-compat (test for excess errors)
 -PASS: gcc.dg/attr-alias-5.c (test for errors, line 7)
 +PASS: gcc.dg/attr-alias-5.c (test for errors, line 13)
 +PASS: gcc.dg/gomp/pr47963.c (test for errors, line 8)
 +PASS: gcc.dg/gomp/pr47963.c (test for excess errors)
 +PASS: gcc.dg/guality/pr36977.c -O0 execution test
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[0] == '\0'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 cbig.c[99] == 'A'
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 dbig.d[202] == 9
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 fbig.f[100] == 11
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[0] == 55
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 ibig.i[100] == 5
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 lbig.l[333] == 999
 +PASS: gcc.dg/guality/pr36977.c -O0 line 30 sbig.s[90] == 255
 +PASS: gcc.dg/guality/pr36977.c -O0 (test for excess errors)
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O1
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2
 +UNSUPPORTED: gcc.dg/guality/pr36977.c -O2 -flto
 ...and 115 more

The full testsuite results are at:
 http://ex.seabright.co.nz/build/gcc-linaro-4.5+bzr99503~ams-codesourcery~merge-fsf-4.5.3/logs/armv7l-maverick-cbuild113-ursa4-cortexa9r1/gcc-testsuite.txt

cbuild-checked: armv7l-maverick-cbuild113-ursa4-cortexa9r1

Revision history for this message
Ulrich Weigand (uweigand) wrote :

This is OK.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog'
2--- ChangeLog 2011-01-25 15:49:54 +0000
3+++ ChangeLog 2011-04-28 16:44:05 +0000
4@@ -1,3 +1,7 @@
5+2011-04-28 Release Manager
6+
7+ * GCC 4.5.3 released.
8+
9 2011-01-25 Richard Guenther <rguenther@suse.de>
10
11 Backport from mainline
12
13=== modified file 'ChangeLog.linaro'
14--- ChangeLog.linaro 2011-04-26 09:24:25 +0000
15+++ ChangeLog.linaro 2011-04-28 16:44:05 +0000
16@@ -1,3 +1,7 @@
17+2011-04-28 Andrew Stubbs <ams@codesourcery.com>
18+
19+ Merge from FSF 4.5 branch r173113 (4.5.3 release).
20+
21 2011-04-26 Chung-Lin Tang <cltang@codesourcery.com>
22
23 Backport from mainline:
24
25=== modified file 'boehm-gc/ChangeLog'
26--- boehm-gc/ChangeLog 2010-12-16 12:30:55 +0000
27+++ boehm-gc/ChangeLog 2011-04-28 16:44:05 +0000
28@@ -1,3 +1,7 @@
29+2011-04-28 Release Manager
30+
31+ * GCC 4.5.3 released.
32+
33 2010-12-16 Release Manager
34
35 * GCC 4.5.2 released.
36
37=== modified file 'config/ChangeLog'
38--- config/ChangeLog 2010-12-16 12:32:12 +0000
39+++ config/ChangeLog 2011-04-28 16:44:05 +0000
40@@ -1,3 +1,7 @@
41+2011-04-28 Release Manager
42+
43+ * GCC 4.5.3 released.
44+
45 2010-12-16 Release Manager
46
47 * GCC 4.5.2 released.
48
49=== modified file 'contrib/ChangeLog'
50--- contrib/ChangeLog 2010-12-16 12:29:50 +0000
51+++ contrib/ChangeLog 2011-04-28 16:44:05 +0000
52@@ -1,3 +1,7 @@
53+2011-04-28 Release Manager
54+
55+ * GCC 4.5.3 released.
56+
57 2010-12-16 Release Manager
58
59 * GCC 4.5.2 released.
60
61=== modified file 'contrib/reghunt/ChangeLog'
62--- contrib/reghunt/ChangeLog 2010-12-16 12:29:55 +0000
63+++ contrib/reghunt/ChangeLog 2011-04-28 16:44:05 +0000
64@@ -1,3 +1,7 @@
65+2011-04-28 Release Manager
66+
67+ * GCC 4.5.3 released.
68+
69 2010-12-16 Release Manager
70
71 * GCC 4.5.2 released.
72
73=== modified file 'contrib/regression/ChangeLog'
74--- contrib/regression/ChangeLog 2010-12-16 12:29:45 +0000
75+++ contrib/regression/ChangeLog 2011-04-28 16:44:05 +0000
76@@ -1,3 +1,7 @@
77+2011-04-28 Release Manager
78+
79+ * GCC 4.5.3 released.
80+
81 2010-12-16 Release Manager
82
83 * GCC 4.5.2 released.
84
85=== modified file 'fixincludes/ChangeLog'
86--- fixincludes/ChangeLog 2010-12-16 12:30:44 +0000
87+++ fixincludes/ChangeLog 2011-04-28 16:44:05 +0000
88@@ -1,3 +1,7 @@
89+2011-04-28 Release Manager
90+
91+ * GCC 4.5.3 released.
92+
93 2010-12-16 Release Manager
94
95 * GCC 4.5.2 released.
96
97=== modified file 'gcc/ChangeLog'
98--- gcc/ChangeLog 2011-03-30 10:48:07 +0000
99+++ gcc/ChangeLog 2011-04-28 16:44:05 +0000
100@@ -1,3 +1,397 @@
101+2011-04-28 Release Manager
102+
103+ * GCC 4.5.3 released.
104+
105+2011-04-21 Richard Guenther <rguenther@suse.de>
106+
107+ PR middle-end/48712
108+ Backport from 4.6 branch
109+ 2011-03-07 Zdenek Dvorak <ook@ucw.cz>
110+
111+ PR bootstrap/48000
112+ * cfgloopmanip.c (fix_bb_placements): Return immediately
113+ if FROM is BASE_LOOP's header.
114+
115+2011-04-20 Richard Guenther <rguenther@suse.de>
116+
117+ Backport from 4.6 branch
118+ 2011-04-19 Bernd Schmidt <bernds@codesourcery.com>
119+
120+ PR fortran/47976
121+ * reload1.c (inc_for_reload): Return void. All callers changed.
122+ (emit_input_reload_insns): Don't try to delete previous output
123+ reloads to a register, or record spill_reg_store for autoincs.
124+
125+2011-04-19 Richard Guenther <rguenther@suse.de>
126+
127+ Backported from 4.6 branch
128+ 2011-03-29 Jakub Jelinek <jakub@redhat.com>
129+
130+ PR preprocessor/48248
131+ * c-ppoutput.c (print): Add src_file field.
132+ (init_pp_output): Initialize it.
133+ (maybe_print_line): Don't optimize by adding up to 8 newlines
134+ if map->to_file and print.src_file are different file.
135+ (print_line): Update print.src_file.
136+
137+ 2011-04-18 Richard Guenther <rguenther@suse.de>
138+
139+ PR preprocessor/48248
140+ * c-ppoutput.c (maybe_print_line): Avoid changing -P behavior.
141+
142+2011-04-19 Richard Guenther <rguenther@suse.de>
143+
144+ PR tree-optimization/46188
145+ Backported from 4.6 branch
146+ 2010-05-26 Jan Hubicka <jh@suse.cz>
147+
148+ * cgraphunit.c (clone_of_p): Remove.
149+ (verify_cgraph_node): Do not verify clones.
150+ (cgraph_materialize_all_clones): Do no redirection here.
151+ * ipa-inline.c (inline_transform): Do redirection here.
152+
153+2011-04-18 Eric Botcazou <ebotcazou@adacore.com>
154+
155+ * dwarf2out.c (is_redundant_typedef): Add 'inline' to prototype.
156+
157+2011-04-18 Richard Guenther <rguenther@suse.de>
158+
159+ Backported from 4.6 branch
160+ 2011-01-19 Jakub Jelinek <jakub@redhat.com>
161+
162+ PR tree-optimization/47290
163+ * tree-eh.c (infinite_empty_loop_p): New function.
164+ (cleanup_empty_eh): Use it.
165+
166+ 2010-05-29 Jan Hubicka <jh@suse.cz>
167+
168+ PR tree-optimization/46364
169+ * cgraphunit.c (cgraph_materialize_clone): Only remove calles, refs
170+ and body;
171+ not the whole node for masters of materialized clones.
172+
173+2011-04-18 Richard Guenther <rguenther@suse.de>
174+
175+ Backported from 4.6 branch
176+ 2011-03-05 Zdenek Dvorak <ook@ucw.cz>
177+
178+ PR rtl-optimization/47899
179+ * cfgloopmanip.c (fix_bb_placements): Fix first argument
180+ to flow_loop_nested_p when moving the loop upward.
181+
182+ 2011-03-15 Richard Guenther <rguenther@suse.de>
183+
184+ PR middle-end/48031
185+ * fold-const.c (fold_indirect_ref_1): Do not create new variable-sized
186+ or variable-indexed array accesses when in gimple form.
187+
188+2011-04-16 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
189+
190+ * config/pa/pa.h (REGISTER_MOVE_COST): Increase to 18 cost of
191+ move from floating point to shift amount register.
192+
193+ Backport from mainline:
194+ 2011-04-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
195+
196+ PR target/48366
197+ * config/pa/pa.c (emit_move_sequence): Remove secondary reload
198+ support for floating point to shift amount amount register copies.
199+ (pa_secondary_reload): Return GENERAL_REGS for floating point/shift
200+ amount register copies.
201+ * config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): For shift amount
202+ register, return false if mode isn't a scalar integer mode.
203+ * config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Likewise.
204+
205+2011-04-16 Jakub Jelinek <jakub@redhat.com>
206+
207+ Backported from 4.6 branch
208+ 2011-04-15 Jakub Jelinek <jakub@redhat.com>
209+
210+ PR target/48605
211+ * config/i386/sse.md (avx_insertps, sse4_1_insertps): If operands[2]
212+ is a MEM, offset it as needed based on top 2 bits in operands[3],
213+ change MEM mode to SFmode and mask those 2 bits away from operands[3].
214+
215+2011-04-13 Nick Clifton <nickc@redhat.com>
216+
217+ * config/rx/rx.md (movmemsi): Do not use this pattern when
218+ volatile pointers are involved.
219+
220+2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
221+
222+ Backport from mainline:
223+ 2011-02-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
224+
225+ PR testsuite/47400
226+ * doc/sourcebuild.texi (Require Support): Document
227+ dg-require-ascii-locale.
228+
229+2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
230+
231+ Backport from mainline:
232+ 2011-04-12 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org>
233+ PR target/48090
234+ * config/arm/arm.md (*arm_negdi2): Fix early clobber constraints.
235+
236+2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
237+
238+ Backport from mainline:
239+ 2011-04-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
240+
241+ * config/alpha/osf.h (MAX_OFILE_ALIGNMENT): Define.
242+
243+2011-04-09 Duncan Sands <baldrick@free.fr>
244+
245+ * tree.c (array_type_nelts): Bail out if TYPE_MAX_VALUE not set.
246+
247+2011-04-07 Uros Bizjak <ubizjak@gmail.com>
248+
249+ * config/i386/sse.md (avx_cmps<ssemodesuffixf2c><mode>3): Add
250+ missing output register constraint.
251+ (*vec_concatv2sf_avx): Fix wrong register constraint in
252+ alternative 3 of operand 1.
253+ (*vec_set<mode>_0_avx): Avoid combining registers from different
254+ units in a single alternative.
255+ (*vec_set<mode>_0_sse4_1): Ditto.
256+ (*vec_set<mode>_0_sse2): Ditto.
257+ (vec_set<mode>_0): Ditto.
258+ (sse2_storehpd): Ditto.
259+ (sse2_loadhpd): Ditto.
260+ (sse4_1_insertps): Use nonimmediate_operand for operand 2.
261+ * config/i386/predicates.md (sse_comparison_operator): Do not
262+ define as special predicate.
263+
264+2011-04-07 Jakub Jelinek <jakub@redhat.com>
265+
266+ Backported from mainline
267+ 2011-04-06 Jakub Jelinek <jakub@redhat.com>
268+
269+ PR debug/48466
270+ * dwarf2out.c (based_loc_descr): If drap_reg is INVALID_REGNUM, use
271+ as base_reg whatever register reg has been eliminated to, instead
272+ of hardcoding STACK_POINTER_REGNUM.
273+
274+ 2011-03-24 Jakub Jelinek <jakub@redhat.com>
275+
276+ PR debug/48204
277+ * simplify-rtx.c (simplify_const_unary_operation): Call
278+ real_convert when changing mode class with FLOAT_EXTEND.
279+
280+ 2011-03-17 Jakub Jelinek <jakub@redhat.com>
281+
282+ PR rtl-optimization/48141
283+ * dse.c (record_store): If no positions are needed in an insn
284+ that cannot be deleted, at least unchain it from active_local_stores.
285+
286+ 2011-03-03 Jakub Jelinek <jakub@redhat.com>
287+
288+ PR c/47963
289+ * gimplify.c (omp_add_variable): Only call omp_notice_variable
290+ on TYPE_SIZE_UNIT if it is a DECL.
291+
292+ 2011-02-19 Jakub Jelinek <jakub@redhat.com>
293+
294+ PR c/47809
295+ * c-common.c (c_fully_fold_internal): Handle VIEW_CONVERT_EXPR.
296+
297+ 2011-01-26 Jakub Jelinek <jakub@redhat.com>
298+
299+ PR c/47473
300+ * c-lex.c (interpret_float): If CPP_N_IMAGINARY, ensure
301+ EXCESS_PRECISION_EXPR is created with COMPLEX_TYPE instead of
302+ REAL_TYPE.
303+
304+2011-04-07 Jakub Jelinek <jakub@redhat.com>
305+
306+ PR tree-optimization/47391
307+ * tree-ssa-ccp.c (get_symbol_constant_value): Don't optimize
308+ if sym is volatile.
309+
310+ Backported from mainline
311+ 2010-07-01 Richard Guenther <rguenther@suse.de>
312+
313+ * omp-low.c (scan_omp_1_op): Don't change type of INTEGER_CSTs
314+ directly.
315+
316+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
317+
318+ Backport from mainline
319+ 2011-03-26 Andrey Belevantsev <abel@ispras.ru>
320+
321+ PR rtl-optimization/48144
322+ * sel-sched-ir.c (merge_history_vect): Factor out from ...
323+ (merge_expr_data): ... here.
324+ (av_set_intersect): Rename to av_set_code_motion_filter.
325+ Update all callers. Call merge_history_vect when an expression
326+ is found in both sets.
327+ * sel-sched-ir.h (av_set_code_motion_filter): Add prototype.
328+
329+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
330+
331+ Backport from mainline
332+ 2011-01-13 Andrey Belevantsev <abel@ispras.ru>
333+
334+ PR rtl-optimization/45352
335+ * sel-sched.c: Update copyright years.
336+ (reset_sched_cycles_in_current_ebb): Also recheck the DFA state
337+ in the advancing loop when we have issued issue_rate insns.
338+
339+ Backport from mainline
340+ 2010-12-22 Andrey Belevantsev <abel@ispras.ru>
341+
342+ PR rtl-optimization/45352
343+ PR rtl-optimization/46521
344+ PR rtl-optimization/46522
345+ * sel-sched.c (reset_sched_cycles_in_current_ebb): Recheck the DFA state
346+ on the last iteration of the advancing loop.
347+ (sel_sched_region_1): Propagate the rescheduling bit to the next block
348+ also for empty blocks.
349+
350+ Backport from mainline
351+ 2010-11-08 Andrey Belevantsev <abel@ispras.ru>
352+
353+ PR rtl-optimization/45352
354+ * sel-sched.c (find_best_expr): Do not set pneed_stall when
355+ the variable_issue hook is not implemented.
356+ (fill_insns): Remove dead variable stall_iterations.
357+ (init_seqno_1): Force EBB start for resetting sched cycles on any
358+ successor blocks of the rescheduled region.
359+ (sel_sched_region_1): Use bitmap_bit_p instead of bitmap_clear_bit.
360+ (reset_sched_cycles_in_current_ebb): Add debug printing.
361+ New variable issued_insns. Advance state when we have issued
362+ issue_rate insns.
363+
364+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
365+
366+ Backport from mainline
367+ 2010-12-24 Alexander Monakov <amonakov@ispras.ru>
368+
369+ PR rtl-optimization/47036
370+ * sel-sched-ir.c (fallthru_bb_of_jump): Remove special support for
371+ unconditional jumps.
372+ * sel-sched.c (moveup_expr): Ditto.
373+
374+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
375+
376+ Backport from mainline
377+ 2010-12-15 Alexander Monakov <amonakov@ispras.ru>
378+
379+ PR rtl-optimization/46649
380+ * sel-sched-ir.c (purge_empty_blocks): Unconditionally skip the first
381+ basic block in the region.
382+
383+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
384+
385+ Backport from mainline
386+ 2010-12-14 Alexander Monakov <amonakov@ispras.ru>
387+
388+ PR rtl-optimization/46875
389+ * sched-vis.c (print_pattern): Dump "sequence" for ADDR_VECs.
390+ * sel-sched-ir.c (bb_has_removable_jump_to_p): Forbid table jumps.
391+
392+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
393+
394+ Backport from mainline
395+ 2010-12-07 Andrey Belevantsev <abel@ispras.ru>
396+ PR target/43603
397+ * haifa-sched.c (sched_create_recovery_edges): Update
398+ dominator info.
399+ * sel-sched-ir.c (maybe_tidy_empty_bb): Update dominator info
400+ after deleting an empty block.
401+ (tidy_control_flow): Also verify dominators.
402+ (sel_remove_bb): Update dominator info after removing a block.
403+ (sel_redirect_edge_and_branch_force): Assert that no unreachable
404+ blocks will be created. Update dominator info.
405+ (sel_redirect_edge_and_branch): Update dominator info when
406+ basic blocks do not become unreachable.
407+ (sel_remove_loop_preheader): Update dominator info.
408+
409+ 2010-10-14 Andrey Belevantsev <abel@ispras.ru>
410+
411+ * sel-sched-ir.c (maybe_tidy_empty_bb): Simplify comment.
412+ (tidy_control_flow): Tidy vertical space.
413+ (sel_remove_bb): New variable idx. Use it to remember the basic
414+ block index before deleting the block.
415+ (sel_remove_empty_bb): Remove dead code, simplify and insert to ...
416+ (sel_merge_blocks): ... here.
417+ * sel-sched-ir.h (sel_remove_empty_bb): Remove prototype.
418+
419+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
420+
421+ Backport from mainline
422+ 2010-12-03 Alexander Monakov <amonakov@ispras.ru>
423+
424+ PR rtl-optimization/45354
425+ * sel-sched-ir.c (jump_leads_only_to_bb_p): Rename to ...
426+ (bb_has_removable_jump_to_p): This. Update all callers. Make static.
427+ Allow BBs ending with a conditional jump. Forbid EDGE_CROSSING jumps.
428+ * sel-sched-ir.h (jump_leads_only_to_bb_p): Delete prototype.
429+
430+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
431+
432+ Backport from mainline
433+ 2010-11-25 Alexander Monakov <amonakov@ispras.ru>
434+
435+ PR rtl-optimization/46585
436+ * sel-sched-ir.c (return_regset_to_pool): Verify that RS is not NULL.
437+ (vinsn_init): Skip computation of dependencies for local NOPs.
438+ (vinsn_delete): Don't try to free regsets for local NOPs.
439+ (setup_nop_and_exit_insns): Change definition of nop_pattern.
440+
441+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
442+
443+ Backport from mainline
444+ 2010-11-25 Alexander Monakov <amonakov@ispras.ru>
445+
446+ PR rtl-optimization/46602
447+ * sel-sched-ir.c (maybe_tidy_empty_bb): Move checking ...
448+ (tidy_control_flow): Here.
449+
450+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
451+
452+ Backport from mainline
453+ 2010-11-22 Alexander Monakov <amonakov@ispras.ru>
454+
455+ PR rtl-optimization/45652
456+ * alias.c (get_reg_base_value): New.
457+ * rtl.h (get_reg_base_value): Add prototype.
458+ * sel-sched.c (init_regs_for_mode): Use it. Don't use registers with
459+ non-null REG_BASE_VALUE for renaming.
460+
461+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
462+
463+ Backport from mainline
464+ 2010-11-18 Alexander Monakov <amonakov@ispras.ru>
465+
466+ PR middle-end/46518
467+ * sel-sched-ir.c (init_expr): Use the correct type for
468+ target_available.
469+ * sel-sched.c (fill_vec_av_set): Use explicitly signed char type.
470+
471+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
472+
473+ Backport from mainline
474+ 2010-11-12 Alexander Monakov <amonakov@ispras.ru>
475+
476+ PR rtl-optimization/46204
477+ sel-sched-ir.c (maybe_tidy_empty_bb): Remove second argument.
478+ pdate all callers. Do not recompute topological order. Adjust
479+ allthrough edges following a degenerate conditional jump.
480+
481+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
482+
483+ Backport from mainline
484+ 2010-10-14 Andrey Belevantsev <abel@ispras.ru>
485+
486+ PR rtl-optimization/45570
487+ * sel-sched-ir.c (cfg_preds_1): When walking out of the region,
488+ assert that we are pipelining outer loops. Allow returning
489+ zero predecessors.
490+
491+2011-04-06 Joseph Myers <joseph@codesourcery.com>
492+
493+ * gcov-io.c: Use GCC Runtime Library Exception.
494+
495 2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
496
497 Backport from mainline
498
499=== modified file 'gcc/DATESTAMP'
500--- gcc/DATESTAMP 2011-04-06 00:18:18 +0000
501+++ gcc/DATESTAMP 2011-04-28 16:44:05 +0000
502@@ -1,1 +1,1 @@
503-20110406
504+20110428
505
506=== modified file 'gcc/DEV-PHASE'
507--- gcc/DEV-PHASE 2011-02-22 11:38:56 +0000
508+++ gcc/DEV-PHASE 2011-04-28 16:44:05 +0000
509@@ -1,1 +0,0 @@
510-prerelease
511
512=== modified file 'gcc/ada/ChangeLog'
513--- gcc/ada/ChangeLog 2011-02-12 19:22:17 +0000
514+++ gcc/ada/ChangeLog 2011-04-28 16:44:05 +0000
515@@ -1,3 +1,7 @@
516+2011-04-28 Release Manager
517+
518+ * GCC 4.5.3 released.
519+
520 2011-02-12 Gerald Pfeifer <gerald@pfeifer.com>
521
522 * gnat_ugn.texi (Compiling Different Versions of Ada): Update
523
524=== modified file 'gcc/alias.c'
525--- gcc/alias.c 2010-05-26 10:29:20 +0000
526+++ gcc/alias.c 2011-04-28 16:44:05 +0000
527@@ -1228,6 +1228,14 @@
528 reg_seen[regno] = 1;
529 }
530
531+/* Return REG_BASE_VALUE for REGNO. Selective scheduler uses this to avoid
532+ using hard registers with non-null REG_BASE_VALUE for renaming. */
533+rtx
534+get_reg_base_value (unsigned int regno)
535+{
536+ return VEC_index (rtx, reg_base_value, regno);
537+}
538+
539 /* If a value is known for REGNO, return it. */
540
541 rtx
542
543=== modified file 'gcc/c-common.c'
544--- gcc/c-common.c 2011-01-06 11:02:44 +0000
545+++ gcc/c-common.c 2011-04-28 16:44:05 +0000
546@@ -1352,6 +1352,7 @@
547 case FIX_TRUNC_EXPR:
548 case FLOAT_EXPR:
549 CASE_CONVERT:
550+ case VIEW_CONVERT_EXPR:
551 case NON_LVALUE_EXPR:
552 case NEGATE_EXPR:
553 case BIT_NOT_EXPR:
554
555=== modified file 'gcc/c-lex.c'
556--- gcc/c-lex.c 2009-11-25 10:55:54 +0000
557+++ gcc/c-lex.c 2011-04-28 16:44:05 +0000
558@@ -739,8 +739,15 @@
559 /* Create a node with determined type and value. */
560 value = build_real (const_type, real);
561 if (flags & CPP_N_IMAGINARY)
562- value = build_complex (NULL_TREE, convert (const_type, integer_zero_node),
563- value);
564+ {
565+ value = build_complex (NULL_TREE, convert (const_type,
566+ integer_zero_node), value);
567+ if (type != const_type)
568+ {
569+ const_type = TREE_TYPE (value);
570+ type = build_complex_type (type);
571+ }
572+ }
573
574 if (type != const_type)
575 value = build1 (EXCESS_PRECISION_EXPR, type, value);
576
577=== modified file 'gcc/c-ppoutput.c'
578--- gcc/c-ppoutput.c 2009-10-09 18:55:34 +0000
579+++ gcc/c-ppoutput.c 2011-04-28 16:44:05 +0000
580@@ -37,6 +37,7 @@
581 int src_line; /* Line number currently being written. */
582 unsigned char printed; /* Nonzero if something output at line. */
583 bool first_time; /* pp_file_change hasn't been called yet. */
584+ const char *src_file; /* Current source file. */
585 } print;
586
587 /* Defined and undefined macros being queued for output with -dU at
588@@ -154,6 +155,7 @@
589 print.prev = 0;
590 print.outf = out_stream;
591 print.first_time = 1;
592+ print.src_file = "";
593 }
594
595 /* Writes out the preprocessed file, handling spacing and paste
596@@ -313,7 +315,9 @@
597 print.printed = 0;
598 }
599
600- if (src_line >= print.src_line && src_line < print.src_line + 8)
601+ if (src_line >= print.src_line
602+ && src_line < print.src_line + 8
603+ && (flag_no_line_commands || strcmp (map->to_file, print.src_file) == 0))
604 {
605 while (src_line > print.src_line)
606 {
607@@ -345,6 +349,7 @@
608 unsigned char *p;
609
610 print.src_line = SOURCE_LINE (map, src_loc);
611+ print.src_file = map->to_file;
612
613 /* cpp_quote_string does not nul-terminate, so we have to do it
614 ourselves. */
615
616=== modified file 'gcc/cfgloopmanip.c'
617--- gcc/cfgloopmanip.c 2010-11-11 20:33:18 +0000
618+++ gcc/cfgloopmanip.c 2011-04-28 16:44:05 +0000
619@@ -174,7 +174,7 @@
620 {
621 sbitmap in_queue;
622 basic_block *queue, *qtop, *qbeg, *qend;
623- struct loop *base_loop;
624+ struct loop *base_loop, *target_loop;
625 edge e;
626
627 /* We pass through blocks back-reachable from FROM, testing whether some
628@@ -185,7 +185,11 @@
629 fix_loop_placement. */
630
631 base_loop = from->loop_father;
632- if (base_loop == current_loops->tree_root)
633+ /* If we are already in the outermost loop, the basic blocks cannot be moved
634+ outside of it. If FROM is the header of the base loop, it cannot be moved
635+ outside of it, either. In both cases, we can end now. */
636+ if (base_loop == current_loops->tree_root
637+ || from == base_loop->header)
638 return;
639
640 in_queue = sbitmap_alloc (last_basic_block);
641@@ -214,12 +218,14 @@
642 /* Subloop header, maybe move the loop upward. */
643 if (!fix_loop_placement (from->loop_father))
644 continue;
645+ target_loop = loop_outer (from->loop_father);
646 }
647 else
648 {
649 /* Ordinary basic block. */
650 if (!fix_bb_placement (from))
651 continue;
652+ target_loop = from->loop_father;
653 }
654
655 FOR_EACH_EDGE (e, ei, from->succs)
656@@ -248,9 +254,12 @@
657 && (nca == base_loop
658 || nca != pred->loop_father))
659 pred = pred->loop_father->header;
660- else if (!flow_loop_nested_p (from->loop_father, pred->loop_father))
661+ else if (!flow_loop_nested_p (target_loop, pred->loop_father))
662 {
663- /* No point in processing it. */
664+ /* If PRED is already higher in the loop hierarchy than the
665+ TARGET_LOOP to that we moved FROM, the change of the position
666+ of FROM does not affect the position of PRED, so there is no
667+ point in processing it. */
668 continue;
669 }
670
671
672=== modified file 'gcc/cgraphunit.c'
673--- gcc/cgraphunit.c 2010-06-30 12:17:35 +0000
674+++ gcc/cgraphunit.c 2011-04-28 16:44:05 +0000
675@@ -553,15 +553,6 @@
676 cgraph_mark_needed_node (node);
677 }
678
679-/* Return TRUE if NODE2 is equivalent to NODE or its clone. */
680-static bool
681-clone_of_p (struct cgraph_node *node, struct cgraph_node *node2)
682-{
683- while (node != node2 && node2)
684- node2 = node2->clone_of;
685- return node2 != NULL;
686-}
687-
688 /* Verify cgraph nodes of given cgraph node. */
689 void
690 verify_cgraph_node (struct cgraph_node *node)
691@@ -777,16 +768,6 @@
692 debug_tree (e->callee->decl);
693 error_found = true;
694 }
695- else if (!node->global.inlined_to
696- && !e->callee->global.inlined_to
697- && !clone_of_p (cgraph_node (decl), e->callee))
698- {
699- error ("edge points to wrong declaration:");
700- debug_tree (e->callee->decl);
701- fprintf (stderr," Instead of:");
702- debug_tree (decl);
703- error_found = true;
704- }
705 e->aux = (void *)1;
706 }
707 else
708@@ -2259,7 +2240,10 @@
709 node->next_sibling_clone = NULL;
710 node->prev_sibling_clone = NULL;
711 if (!node->clone_of->analyzed && !node->clone_of->clones)
712- cgraph_remove_node (node->clone_of);
713+ {
714+ cgraph_release_function_body (node->clone_of);
715+ cgraph_node_remove_callees (node->clone_of);
716+ }
717 node->clone_of = NULL;
718 bitmap_obstack_release (NULL);
719 }
720@@ -2394,30 +2378,7 @@
721 if (!node->analyzed && node->callees)
722 cgraph_node_remove_callees (node);
723 if (cgraph_dump_file)
724- fprintf (cgraph_dump_file, "Updating call sites\n");
725- for (node = cgraph_nodes; node; node = node->next)
726- if (node->analyzed && !node->clone_of
727- && gimple_has_body_p (node->decl))
728- {
729- struct cgraph_edge *e;
730-
731- current_function_decl = node->decl;
732- push_cfun (DECL_STRUCT_FUNCTION (node->decl));
733- for (e = node->callees; e; e = e->next_callee)
734- cgraph_redirect_edge_call_stmt_to_callee (e);
735- pop_cfun ();
736- current_function_decl = NULL;
737-#ifdef ENABLE_CHECKING
738- verify_cgraph_node (node);
739-#endif
740- }
741- if (cgraph_dump_file)
742 fprintf (cgraph_dump_file, "Materialization Call site updates done.\n");
743- /* All changes to parameters have been performed. In order not to
744- incorrectly repeat them, we simply dispose of the bitmaps that drive the
745- changes. */
746- for (node = cgraph_nodes; node; node = node->next)
747- node->clone.combined_args_to_skip = NULL;
748 #ifdef ENABLE_CHECKING
749 verify_cgraph ();
750 #endif
751
752=== modified file 'gcc/config/alpha/osf.h'
753--- gcc/config/alpha/osf.h 2010-12-03 12:54:16 +0000
754+++ gcc/config/alpha/osf.h 2011-04-28 16:44:05 +0000
755@@ -1,6 +1,6 @@
756 /* Definitions of target machine for GNU compiler, for DEC Alpha on OSF/1.
757 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003,
758- 2004, 2007, 2009, 2010 Free Software Foundation, Inc.
759+ 2004, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
760 Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
761
762 This file is part of GCC.
763@@ -199,6 +199,10 @@
764 #define LD_INIT_SWITCH "-init"
765 #define LD_FINI_SWITCH "-fini"
766
767+/* From Tru64 UNIX Object File and Symbol Table Format Specification,
768+ 2.3.5 Alignment, p.19. */
769+#define MAX_OFILE_ALIGNMENT (64 * 1024 * BITS_PER_UNIT)
770+
771 /* Select a format to encode pointers in exception handling data. CODE
772 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
773 true if the symbol may be affected by dynamic relocations.
774
775=== modified file 'gcc/config/i386/predicates.md'
776--- gcc/config/i386/predicates.md 2010-06-21 13:52:07 +0000
777+++ gcc/config/i386/predicates.md 2011-04-28 16:44:05 +0000
778@@ -990,13 +990,8 @@
779 ;; Return 1 if OP is a comparison that can be used in the CMPSS/CMPPS insns.
780 ;; The first set are supported directly; the second set can't be done with
781 ;; full IEEE support, i.e. NaNs.
782-;;
783-;; ??? It would seem that we have a lot of uses of this predicate that pass
784-;; it the wrong mode. We got away with this because the old function didn't
785-;; check the mode at all. Mirror that for now by calling this a special
786-;; predicate.
787
788-(define_special_predicate "sse_comparison_operator"
789+(define_predicate "sse_comparison_operator"
790 (match_code "eq,lt,le,unordered,ne,unge,ungt,ordered"))
791
792 ;; Return 1 if OP is a comparison operator that can be issued by
793
794=== modified file 'gcc/config/i386/sse.md'
795--- gcc/config/i386/sse.md 2011-03-03 21:11:16 +0000
796+++ gcc/config/i386/sse.md 2011-04-28 16:44:05 +0000
797@@ -1484,7 +1484,7 @@
798 (set_attr "mode" "<MODE>")])
799
800 (define_insn "avx_cmps<ssemodesuffixf2c><mode>3"
801- [(set (match_operand:SSEMODEF2P 0 "register_operand" "")
802+ [(set (match_operand:SSEMODEF2P 0 "register_operand" "=x")
803 (vec_merge:SSEMODEF2P
804 (unspec:SSEMODEF2P
805 [(match_operand:SSEMODEF2P 1 "register_operand" "x")
806@@ -3934,7 +3934,7 @@
807 (define_insn "*vec_concatv2sf_avx"
808 [(set (match_operand:V2SF 0 "register_operand" "=x,x,x,*y ,*y")
809 (vec_concat:V2SF
810- (match_operand:SF 1 "nonimmediate_operand" " x,x,m, x , m")
811+ (match_operand:SF 1 "nonimmediate_operand" " x,x,m, 0 , m")
812 (match_operand:SF 2 "vector_move_operand" " x,m,C,*ym, C")))]
813 "TARGET_AVX"
814 "@
815@@ -4023,13 +4023,15 @@
816 DONE;
817 })
818
819+;; Avoid combining registers from different units in a single alternative,
820+;; see comment above inline_secondary_memory_needed function in i386.c
821 (define_insn "*vec_set<mode>_0_avx"
822- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m")
823+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m, m,m")
824 (vec_merge:SSEMODE4S
825 (vec_duplicate:SSEMODE4S
826 (match_operand:<ssescalarmode> 2
827- "general_operand" " x,m,*r,x,*rm,x*rfF"))
828- (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0")
829+ "general_operand" " x,m,*r,x,*rm,x,*r,fF"))
830+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0, 0,0")
831 (const_int 1)))]
832 "TARGET_AVX"
833 "@
834@@ -4038,20 +4040,24 @@
835 vmovd\t{%2, %0|%0, %2}
836 vmovss\t{%2, %1, %0|%0, %1, %2}
837 vpinsrd\t{$0, %2, %1, %0|%0, %1, %2, 0}
838+ #
839+ #
840 #"
841- [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*")
842- (set_attr "prefix_extra" "*,*,*,*,1,*")
843- (set_attr "length_immediate" "*,*,*,*,1,*")
844+ [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*,*")
845+ (set_attr "prefix_extra" "*,*,*,*,1,*,*,*")
846+ (set_attr "length_immediate" "*,*,*,*,1,*,*,*")
847 (set_attr "prefix" "vex")
848- (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")])
849+ (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*,*")])
850
851+;; Avoid combining registers from different units in a single alternative,
852+;; see comment above inline_secondary_memory_needed function in i386.c
853 (define_insn "*vec_set<mode>_0_sse4_1"
854- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m")
855+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x, m,m")
856 (vec_merge:SSEMODE4S
857 (vec_duplicate:SSEMODE4S
858 (match_operand:<ssescalarmode> 2
859- "general_operand" " x,m,*r,x,*rm,*rfF"))
860- (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0,0")
861+ "general_operand" " x,m,*r,x,*rm,*r,fF"))
862+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0, 0,0")
863 (const_int 1)))]
864 "TARGET_SSE4_1"
865 "@
866@@ -4060,44 +4066,53 @@
867 movd\t{%2, %0|%0, %2}
868 movss\t{%2, %0|%0, %2}
869 pinsrd\t{$0, %2, %0|%0, %2, 0}
870+ #
871 #"
872- [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*")
873- (set_attr "prefix_extra" "*,*,*,*,1,*")
874- (set_attr "length_immediate" "*,*,*,*,1,*")
875- (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")])
876+ [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*")
877+ (set_attr "prefix_extra" "*,*,*,*,1,*,*")
878+ (set_attr "length_immediate" "*,*,*,*,1,*,*")
879+ (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*")])
880
881+;; Avoid combining registers from different units in a single alternative,
882+;; see comment above inline_secondary_memory_needed function in i386.c
883 (define_insn "*vec_set<mode>_0_sse2"
884- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m")
885+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m, m,m")
886 (vec_merge:SSEMODE4S
887 (vec_duplicate:SSEMODE4S
888 (match_operand:<ssescalarmode> 2
889- "general_operand" " m,*r,x,x*rfF"))
890- (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0")
891+ "general_operand" " m,*r,x,x,*r,fF"))
892+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0, 0,0")
893 (const_int 1)))]
894 "TARGET_SSE2"
895 "@
896 mov<ssescalarmodesuffix2s>\t{%2, %0|%0, %2}
897 movd\t{%2, %0|%0, %2}
898 movss\t{%2, %0|%0, %2}
899+ #
900+ #
901 #"
902 [(set_attr "type" "ssemov")
903- (set_attr "mode" "<ssescalarmode>,SI,SF,*")])
904+ (set_attr "mode" "<ssescalarmode>,SI,SF,*,*,*")])
905
906+;; Avoid combining registers from different units in a single alternative,
907+;; see comment above inline_secondary_memory_needed function in i386.c
908 (define_insn "vec_set<mode>_0"
909- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m")
910+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m, m,m")
911 (vec_merge:SSEMODE4S
912 (vec_duplicate:SSEMODE4S
913 (match_operand:<ssescalarmode> 2
914- "general_operand" " m,x,x*rfF"))
915- (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0")
916+ "general_operand" " m,x,x,*r,fF"))
917+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0, 0,0")
918 (const_int 1)))]
919 "TARGET_SSE"
920 "@
921 movss\t{%2, %0|%0, %2}
922 movss\t{%2, %0|%0, %2}
923+ #
924+ #
925 #"
926 [(set_attr "type" "ssemov")
927- (set_attr "mode" "SF")])
928+ (set_attr "mode" "SF,SF,*,*,*")])
929
930 ;; A subset is vec_setv4sf.
931 (define_insn "*vec_setv4sf_avx"
932@@ -4143,7 +4158,16 @@
933 (match_operand:SI 3 "const_0_to_255_operand" "n")]
934 UNSPEC_INSERTPS))]
935 "TARGET_AVX"
936- "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";
937+{
938+ if (MEM_P (operands[2]))
939+ {
940+ unsigned count_s = INTVAL (operands[3]) >> 6;
941+ if (count_s)
942+ operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
943+ operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4);
944+ }
945+ return "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";
946+}
947 [(set_attr "type" "sselog")
948 (set_attr "prefix" "vex")
949 (set_attr "prefix_extra" "1")
950@@ -4152,12 +4176,21 @@
951
952 (define_insn "sse4_1_insertps"
953 [(set (match_operand:V4SF 0 "register_operand" "=x")
954- (unspec:V4SF [(match_operand:V4SF 2 "register_operand" "x")
955+ (unspec:V4SF [(match_operand:V4SF 2 "nonimmediate_operand" "xm")
956 (match_operand:V4SF 1 "register_operand" "0")
957 (match_operand:SI 3 "const_0_to_255_operand" "n")]
958 UNSPEC_INSERTPS))]
959 "TARGET_SSE4_1"
960- "insertps\t{%3, %2, %0|%0, %2, %3}";
961+{
962+ if (MEM_P (operands[2]))
963+ {
964+ unsigned count_s = INTVAL (operands[3]) >> 6;
965+ if (count_s)
966+ operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
967+ operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4);
968+ }
969+ return "insertps\t{%3, %2, %0|%0, %2, %3}";
970+}
971 [(set_attr "type" "sselog")
972 (set_attr "prefix_data16" "1")
973 (set_attr "prefix_extra" "1")
974@@ -4823,6 +4856,8 @@
975 (set_attr "prefix" "vex")
976 (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
977
978+;; Avoid combining registers from different units in a single alternative,
979+;; see comment above inline_secondary_memory_needed function in i386.c
980 (define_insn "sse2_storehpd"
981 [(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x,*f,r")
982 (vec_select:DF
983@@ -4926,6 +4961,8 @@
984 (set_attr "prefix" "vex")
985 (set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
986
987+;; Avoid combining registers from different units in a single alternative,
988+;; see comment above inline_secondary_memory_needed function in i386.c
989 (define_insn "sse2_loadhpd"
990 [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o")
991 (vec_concat:V2DF
992@@ -4999,6 +5036,8 @@
993 (set_attr "prefix" "vex")
994 (set_attr "mode" "DF,V1DF,V1DF,V1DF,DF,DF,DF")])
995
996+;; Avoid combining registers from different units in a single alternative,
997+;; see comment above inline_secondary_memory_needed function in i386.c
998 (define_insn "sse2_loadlpd"
999 [(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,x,x,m,m,m")
1000 (vec_concat:V2DF
1001
1002=== modified file 'gcc/config/pa/pa.c'
1003--- gcc/config/pa/pa.c 2010-12-19 19:50:17 +0000
1004+++ gcc/config/pa/pa.c 2011-04-28 16:44:05 +0000
1005@@ -1635,15 +1635,12 @@
1006 return 1;
1007 }
1008 /* Handle secondary reloads for SAR. These occur when trying to load
1009- the SAR from memory, FP register, or with a constant. */
1010+ the SAR from memory or a constant. */
1011 else if (scratch_reg
1012 && GET_CODE (operand0) == REG
1013 && REGNO (operand0) < FIRST_PSEUDO_REGISTER
1014 && REGNO_REG_CLASS (REGNO (operand0)) == SHIFT_REGS
1015- && (GET_CODE (operand1) == MEM
1016- || GET_CODE (operand1) == CONST_INT
1017- || (GET_CODE (operand1) == REG
1018- && FP_REG_CLASS_P (REGNO_REG_CLASS (REGNO (operand1))))))
1019+ && (GET_CODE (operand1) == MEM || GET_CODE (operand1) == CONST_INT))
1020 {
1021 /* D might not fit in 14 bits either; for such cases load D into
1022 scratch reg. */
1023@@ -5697,6 +5694,10 @@
1024 fputc ('\n', asm_out_file);
1025 }
1026
1027
1028+/* Inform reload about cases where moving X with a mode MODE to a register in
1029+ RCLASS requires an extra scratch or immediate register. Return the class
1030+ needed for the immediate register. */
1031+
1032 static enum reg_class
1033 pa_secondary_reload (bool in_p, rtx x, enum reg_class rclass,
1034 enum machine_mode mode, secondary_reload_info *sri)
1035@@ -5796,20 +5797,27 @@
1036 return NO_REGS;
1037 }
1038
1039- /* We need a secondary register (GPR) for copies between the SAR
1040- and anything other than a general register. */
1041- if (rclass == SHIFT_REGS && (regno <= 0 || regno >= 32))
1042+ /* A SAR<->FP register copy requires an intermediate general register
1043+ and secondary memory. We need a secondary reload with a general
1044+ scratch register for spills. */
1045+ if (rclass == SHIFT_REGS)
1046 {
1047- sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode];
1048- return NO_REGS;
1049+ /* Handle spill. */
1050+ if (regno >= FIRST_PSEUDO_REGISTER || regno < 0)
1051+ {
1052+ sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode];
1053+ return NO_REGS;
1054+ }
1055+
1056+ /* Handle FP copy. */
1057+ if (FP_REG_CLASS_P (REGNO_REG_CLASS (regno)))
1058+ return GENERAL_REGS;
1059 }
1060
1061- /* A SAR<->FP register copy requires a secondary register (GPR) as
1062- well as secondary memory. */
1063 if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
1064- && (REGNO_REG_CLASS (regno) == SHIFT_REGS
1065- && FP_REG_CLASS_P (rclass)))
1066- sri->icode = in_p ? reload_in_optab[mode] : reload_out_optab[mode];
1067+ && REGNO_REG_CLASS (regno) == SHIFT_REGS
1068+ && FP_REG_CLASS_P (rclass))
1069+ return GENERAL_REGS;
1070
1071 return NO_REGS;
1072 }
1073
1074=== modified file 'gcc/config/pa/pa.h'
1075--- gcc/config/pa/pa.h 2010-08-08 18:55:40 +0000
1076+++ gcc/config/pa/pa.h 2011-04-28 16:44:05 +0000
1077@@ -1360,6 +1360,7 @@
1078 Other copies are reasonably cheap. */
1079 #define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) \
1080 (CLASS1 == SHIFT_REGS ? 0x100 \
1081+ : CLASS2 == SHIFT_REGS && FP_REG_CLASS_P (CLASS1) ? 18 \
1082 : FP_REG_CLASS_P (CLASS1) && ! FP_REG_CLASS_P (CLASS2) ? 16 \
1083 : FP_REG_CLASS_P (CLASS2) && ! FP_REG_CLASS_P (CLASS1) ? 16 \
1084 : 2)
1085
1086=== modified file 'gcc/config/pa/pa32-regs.h'
1087--- gcc/config/pa/pa32-regs.h 2009-04-21 18:03:23 +0000
1088+++ gcc/config/pa/pa32-regs.h 2011-04-28 16:44:05 +0000
1089@@ -226,6 +226,7 @@
1090 registers. */
1091 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
1092 ((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \
1093+ : (REGNO) == 88 ? SCALAR_INT_MODE_P (MODE) \
1094 : !TARGET_PA_11 && FP_REGNO_P (REGNO) \
1095 ? (VALID_FP_MODE_P (MODE) \
1096 && (GET_MODE_SIZE (MODE) <= 8 \
1097
1098=== modified file 'gcc/config/pa/pa64-regs.h'
1099--- gcc/config/pa/pa64-regs.h 2009-02-20 15:20:38 +0000
1100+++ gcc/config/pa/pa64-regs.h 2011-04-28 16:44:05 +0000
1101@@ -161,10 +161,11 @@
1102
1103 /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
1104 On the HP-PA, the cpu registers can hold any mode. We
1105- force this to be an even register is it cannot hold the full mode. */
1106+ force this to be an even register if it cannot hold the full mode. */
1107 #define HARD_REGNO_MODE_OK(REGNO, MODE) \
1108 ((REGNO) == 0 \
1109 ? (MODE) == CCmode || (MODE) == CCFPmode \
1110+ : (REGNO) == 60 ? SCALAR_INT_MODE_P (MODE) \
1111 /* Make wide modes be in aligned registers. */ \
1112 : FP_REGNO_P (REGNO) \
1113 ? (VALID_FP_MODE_P (MODE) \
1114
1115=== modified file 'gcc/config/rx/rx.md'
1116--- gcc/config/rx/rx.md 2011-03-16 11:47:59 +0000
1117+++ gcc/config/rx/rx.md 2011-04-28 16:44:05 +0000
1118@@ -2031,6 +2031,14 @@
1119 rtx addr2 = gen_rtx_REG (SImode, 2);
1120 rtx len = gen_rtx_REG (SImode, 3);
1121
1122+ /* Do not use when the source or destination are volatile - the SMOVF
1123+ instruction will read and write in word sized blocks, which may be
1124+ outside of the valid address range. */
1125+ if (MEM_P (operands[0]) && MEM_VOLATILE_P (operands[0]))
1126+ FAIL;
1127+ if (MEM_P (operands[1]) && MEM_VOLATILE_P (operands[1]))
1128+ FAIL;
1129+
1130 if (REG_P (operands[0]) && (REGNO (operands[0]) == 2
1131 || REGNO (operands[0]) == 3))
1132 FAIL;
1133@@ -2040,6 +2048,7 @@
1134 if (REG_P (operands[2]) && (REGNO (operands[2]) == 1
1135 || REGNO (operands[2]) == 2))
1136 FAIL;
1137+
1138 emit_move_insn (addr1, force_operand (XEXP (operands[0], 0), NULL_RTX));
1139 emit_move_insn (addr2, force_operand (XEXP (operands[1], 0), NULL_RTX));
1140 emit_move_insn (len, force_operand (operands[2], NULL_RTX));
1141
1142=== modified file 'gcc/cp/ChangeLog'
1143--- gcc/cp/ChangeLog 2011-03-28 15:06:28 +0000
1144+++ gcc/cp/ChangeLog 2011-04-28 16:44:05 +0000
1145@@ -1,3 +1,50 @@
1146+2011-04-28 Release Manager
1147+
1148+ * GCC 4.5.3 released.
1149+
1150+2011-04-26 Dodji Seketeli <dodji@redhat.com>
1151+
1152+ PR c++/46824
1153+ * call.c (add_builtin_candidate)<case INDIRECT_REF>: The type of
1154+ the argument of the indirection operator should not be dependent.
1155+ Fix the comment.
1156+
1157+2011-04-26 Jason Merrill <jason@redhat.com>
1158+
1159+ PR c++/42687
1160+ * parser.c (cp_parser_primary_expression): Set *idk to
1161+ CP_ID_KIND_NONE for a parenthesized identifier.
1162+
1163+2011-04-20 Jason Merrill <jason@redhat.com>
1164+
1165+ PR c++/48594
1166+ * decl2.c (build_offset_ref_call_from_tree): Fix calling a functor
1167+ or pointer to (non-member) function.
1168+
1169+2011-04-19 Jason Merrill <jason@redhat.com>
1170+
1171+ PR c++/46304
1172+ * typeck.c (cp_build_binary_op): Fold COMPLEX_EXPR.
1173+
1174+2011-04-19 Jason Merrill <jason@redhat.com>
1175+
1176+ PR c++/45267
1177+ * decl.c (duplicate_decls): Keep always_inline attribute
1178+ in sync with DECL_DISREGARD_INLINE_LIMITS.
1179+
1180+2011-04-18 Richard Guenther <rguenther@suse.de>
1181+
1182+ Backported from 4.6 branch
1183+ 2011-03-11 Jakub Jelinek <jakub@redhat.com>
1184+
1185+ PR c++/48035
1186+ * init.c (build_zero_init_1): Extracted from build_zero_init.
1187+ Add FIELD_SIZE argument, if non-NULL and field bit_position
1188+ as not smaller than that, don't add that field's initializer.
1189+ Pass DECL_SIZE as last argument to build_zero_init_1
1190+ for DECL_FIELD_IS_BASE fields.
1191+ (build_zero_init): Use build_zero_init_1.
1192+
1193 2011-03-28 Jason Merrill <jason@redhat.com>
1194
1195 Revert:
1196
1197=== modified file 'gcc/cp/call.c'
1198--- gcc/cp/call.c 2010-09-07 15:47:57 +0000
1199+++ gcc/cp/call.c 2011-04-28 16:44:05 +0000
1200@@ -1023,7 +1023,7 @@
1201 if (!expr)
1202 return NULL;
1203
1204- conversions = lookup_conversions (s, /*lookup_template_convs_p=*/true);
1205+ conversions = lookup_conversions (s);
1206 if (!conversions)
1207 return NULL;
1208
1209@@ -1925,7 +1925,7 @@
1210 }
1211 return;
1212
1213-/* 7 For every cv-qualified or cv-unqualified complete object type T, there
1214+/* 7 For every cv-qualified or cv-unqualified object type T, there
1215 exist candidate operator functions of the form
1216
1217 T& operator*(T*);
1218@@ -1936,6 +1936,7 @@
1219
1220 case INDIRECT_REF:
1221 if (TREE_CODE (type1) == POINTER_TYPE
1222+ && !uses_template_parms (TREE_TYPE (type1))
1223 && (TYPE_PTROB_P (type1)
1224 || TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
1225 break;
1226@@ -2376,8 +2377,7 @@
1227 if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
1228 return;
1229
1230- convs = lookup_conversions (argtypes[i],
1231- /*lookup_template_convs_p=*/false);
1232+ convs = lookup_conversions (argtypes[i]);
1233
1234 if (code == COND_EXPR)
1235 {
1236@@ -2867,8 +2867,7 @@
1237 reference to it)... */
1238 }
1239 else
1240- conv_fns = lookup_conversions (fromtype,
1241- /*lookup_template_convs_p=*/true);
1242+ conv_fns = lookup_conversions (fromtype);
1243 }
1244
1245 candidates = 0;
1246@@ -3402,7 +3401,7 @@
1247 }
1248 }
1249
1250- convs = lookup_conversions (type, /*lookup_template_convs_p=*/true);
1251+ convs = lookup_conversions (type);
1252
1253 for (; convs; convs = TREE_CHAIN (convs))
1254 {
1255
1256=== modified file 'gcc/cp/cp-tree.h'
1257--- gcc/cp/cp-tree.h 2010-04-27 22:03:06 +0000
1258+++ gcc/cp/cp-tree.h 2011-04-28 16:44:05 +0000
1259@@ -5026,7 +5026,7 @@
1260 extern bool at_class_scope_p (void);
1261 extern bool at_namespace_scope_p (void);
1262 extern tree context_for_name_lookup (tree);
1263-extern tree lookup_conversions (tree, bool);
1264+extern tree lookup_conversions (tree);
1265 extern tree binfo_from_vbase (tree);
1266 extern tree binfo_for_vbase (tree, tree);
1267 extern tree look_for_overrides_here (tree, tree);
1268
1269=== modified file 'gcc/cp/cvt.c'
1270--- gcc/cp/cvt.c 2010-02-20 21:32:06 +0000
1271+++ gcc/cp/cvt.c 2011-04-28 16:44:05 +0000
1272@@ -1199,9 +1199,7 @@
1273 if (!TYPE_HAS_CONVERSION (basetype))
1274 return NULL_TREE;
1275
1276- for (conv = lookup_conversions (basetype, /*lookup_template_convs_p=*/true);
1277- conv;
1278- conv = TREE_CHAIN (conv))
1279+ for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv))
1280 {
1281 int win = 0;
1282 tree candidate;
1283
1284=== modified file 'gcc/cp/decl.c'
1285--- gcc/cp/decl.c 2011-04-06 12:29:08 +0000
1286+++ gcc/cp/decl.c 2011-04-28 16:44:05 +0000
1287@@ -1975,6 +1975,19 @@
1288
1289 /* [temp.expl.spec/14] We don't inline explicit specialization
1290 just because the primary template says so. */
1291+
1292+ /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
1293+ the always_inline attribute. */
1294+ if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
1295+ && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
1296+ {
1297+ if (DECL_DECLARED_INLINE_P (newdecl))
1298+ DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
1299+ else
1300+ DECL_ATTRIBUTES (newdecl)
1301+ = remove_attribute ("always_inline",
1302+ DECL_ATTRIBUTES (newdecl));
1303+ }
1304 }
1305 else if (new_defines_function && DECL_INITIAL (olddecl))
1306 {
1307
1308=== modified file 'gcc/cp/decl2.c'
1309--- gcc/cp/decl2.c 2010-03-23 22:29:53 +0000
1310+++ gcc/cp/decl2.c 2011-04-28 16:44:05 +0000
1311@@ -3911,9 +3911,12 @@
1312 because we depend on the form of FN. */
1313 make_args_non_dependent (*args);
1314 object = build_non_dependent_expr (object);
1315- if (TREE_CODE (fn) == DOTSTAR_EXPR)
1316- object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error);
1317- VEC_safe_insert (tree, gc, *args, 0, object);
1318+ if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
1319+ {
1320+ if (TREE_CODE (fn) == DOTSTAR_EXPR)
1321+ object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error);
1322+ VEC_safe_insert (tree, gc, *args, 0, object);
1323+ }
1324 /* Now that the arguments are done, transform FN. */
1325 fn = build_non_dependent_expr (fn);
1326 }
1327@@ -3933,7 +3936,10 @@
1328 VEC_safe_insert (tree, gc, *args, 0, object_addr);
1329 }
1330
1331- expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
1332+ if (CLASS_TYPE_P (TREE_TYPE (fn)))
1333+ expr = build_op_call (fn, args, tf_warning_or_error);
1334+ else
1335+ expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
1336 if (processing_template_decl && expr != error_mark_node)
1337 expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
1338
1339
1340=== modified file 'gcc/cp/init.c'
1341--- gcc/cp/init.c 2010-08-23 06:39:42 +0000
1342+++ gcc/cp/init.c 2011-04-28 16:44:05 +0000
1343@@ -143,10 +143,13 @@
1344 is the number of elements in the array. If STATIC_STORAGE_P is
1345 TRUE, initializers are only generated for entities for which
1346 zero-initialization does not simply mean filling the storage with
1347- zero bytes. */
1348+ zero bytes. FIELD_SIZE, if non-NULL, is the bit size of the field,
1349+ subfields with bit positions at or above that bit size shouldn't
1350+ be added. */
1351
1352-tree
1353-build_zero_init (tree type, tree nelts, bool static_storage_p)
1354+static tree
1355+build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
1356+ tree field_size)
1357 {
1358 tree init = NULL_TREE;
1359
1360@@ -191,15 +194,32 @@
1361 if (TREE_CODE (field) != FIELD_DECL)
1362 continue;
1363
1364+ /* Don't add virtual bases for base classes if they are beyond
1365+ the size of the current field, that means it is present
1366+ somewhere else in the object. */
1367+ if (field_size)
1368+ {
1369+ tree bitpos = bit_position (field);
1370+ if (TREE_CODE (bitpos) == INTEGER_CST
1371+ && !tree_int_cst_lt (bitpos, field_size))
1372+ continue;
1373+ }
1374+
1375 /* Note that for class types there will be FIELD_DECLs
1376 corresponding to base classes as well. Thus, iterating
1377 over TYPE_FIELDs will result in correct initialization of
1378 all of the subobjects. */
1379 if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
1380 {
1381- tree value = build_zero_init (TREE_TYPE (field),
1382- /*nelts=*/NULL_TREE,
1383- static_storage_p);
1384+ tree new_field_size
1385+ = (DECL_FIELD_IS_BASE (field)
1386+ && DECL_SIZE (field)
1387+ && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
1388+ ? DECL_SIZE (field) : NULL_TREE;
1389+ tree value = build_zero_init_1 (TREE_TYPE (field),
1390+ /*nelts=*/NULL_TREE,
1391+ static_storage_p,
1392+ new_field_size);
1393 if (value)
1394 CONSTRUCTOR_APPEND_ELT(v, field, value);
1395 }
1396@@ -247,9 +267,9 @@
1397 ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
1398 max_index);
1399
1400- ce->value = build_zero_init (TREE_TYPE (type),
1401- /*nelts=*/NULL_TREE,
1402- static_storage_p);
1403+ ce->value = build_zero_init_1 (TREE_TYPE (type),
1404+ /*nelts=*/NULL_TREE,
1405+ static_storage_p, NULL_TREE);
1406 }
1407
1408 /* Build a constructor to contain the initializations. */
1409@@ -267,6 +287,24 @@
1410 return init;
1411 }
1412
1413+/* Return an expression for the zero-initialization of an object with
1414+ type T. This expression will either be a constant (in the case
1415+ that T is a scalar), or a CONSTRUCTOR (in the case that T is an
1416+ aggregate), or NULL (in the case that T does not require
1417+ initialization). In either case, the value can be used as
1418+ DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
1419+ initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
1420+ is the number of elements in the array. If STATIC_STORAGE_P is
1421+ TRUE, initializers are only generated for entities for which
1422+ zero-initialization does not simply mean filling the storage with
1423+ zero bytes. */
1424+
1425+tree
1426+build_zero_init (tree type, tree nelts, bool static_storage_p)
1427+{
1428+ return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE);
1429+}
1430+
1431 /* Return a suitable initializer for value-initializing an object of type
1432 TYPE, as described in [dcl.init]. */
1433
1434
1435=== modified file 'gcc/cp/parser.c'
1436--- gcc/cp/parser.c 2011-03-02 18:46:01 +0000
1437+++ gcc/cp/parser.c 2011-04-28 16:44:05 +0000
1438@@ -3325,6 +3325,12 @@
1439 `&A::B' might be a pointer-to-member, but `&(A::B)' is
1440 not. */
1441 finish_parenthesized_expr (expr);
1442+ /* DR 705: Wrapping an unqualified name in parentheses
1443+ suppresses arg-dependent lookup. We want to pass back
1444+ CP_ID_KIND_QUALIFIED for suppressing vtable lookup
1445+ (c++/37862), but none of the others. */
1446+ if (*idk != CP_ID_KIND_QUALIFIED)
1447+ *idk = CP_ID_KIND_NONE;
1448 }
1449 /* The `>' token might be the end of a template-id or
1450 template-parameter-list now. */
1451
1452=== modified file 'gcc/cp/search.c'
1453--- gcc/cp/search.c 2010-02-10 07:37:37 +0000
1454+++ gcc/cp/search.c 2011-04-28 16:44:05 +0000
1455@@ -2420,13 +2420,10 @@
1456 functions in this node were selected. This function is effectively
1457 performing a set of member lookups as lookup_fnfield does, but
1458 using the type being converted to as the unique key, rather than the
1459- field name.
1460- If LOOKUP_TEMPLATE_CONVS_P is TRUE, the returned TREE_LIST contains
1461- the non-hidden user-defined template conversion functions too. */
1462+ field name. */
1463
1464 tree
1465-lookup_conversions (tree type,
1466- bool lookup_template_convs_p)
1467+lookup_conversions (tree type)
1468 {
1469 tree convs, tpl_convs;
1470 tree list = NULL_TREE;
1471@@ -2453,9 +2450,6 @@
1472 }
1473 }
1474
1475- if (lookup_template_convs_p == false)
1476- tpl_convs = NULL_TREE;
1477-
1478 for (; tpl_convs; tpl_convs = TREE_CHAIN (tpl_convs))
1479 {
1480 tree probe, next;
1481
1482=== modified file 'gcc/cp/typeck.c'
1483--- gcc/cp/typeck.c 2010-10-04 00:50:43 +0000
1484+++ gcc/cp/typeck.c 2011-04-28 16:44:05 +0000
1485@@ -4336,7 +4336,11 @@
1486 gcc_unreachable();
1487 }
1488 }
1489- return build2 (COMPLEX_EXPR, result_type, real, imag);
1490+ real = fold_if_not_in_template (real);
1491+ imag = fold_if_not_in_template (imag);
1492+ result = build2 (COMPLEX_EXPR, result_type, real, imag);
1493+ result = fold_if_not_in_template (result);
1494+ return result;
1495 }
1496
1497 /* For certain operations (which identify themselves by shorten != 0)
1498
1499=== modified file 'gcc/doc/sourcebuild.texi'
1500--- gcc/doc/sourcebuild.texi 2011-01-06 11:02:44 +0000
1501+++ gcc/doc/sourcebuild.texi 2011-04-28 16:44:05 +0000
1502@@ -1,4 +1,4 @@
1503-@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
1504+@c Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
1505 @c Free Software Foundation, Inc.
1506 @c This is part of the GCC manual.
1507 @c For copying conditions, see the file gcc.texi.
1508@@ -1941,6 +1941,9 @@
1509 @item dg-require-alias ""
1510 Skip the test if the target does not support the @samp{alias} attribute.
1511
1512+@item dg-require-ascii-locale ""
1513+Skip the test if the host does not support an ASCII locale.
1514+
1515 @item dg-require-compat-dfp ""
1516 Skip this test unless both compilers in a @file{compat} testsuite
1517 support decimal floating point.
1518
1519=== modified file 'gcc/dse.c'
1520--- gcc/dse.c 2010-03-16 10:50:42 +0000
1521+++ gcc/dse.c 2011-04-28 16:44:05 +0000
1522@@ -1592,8 +1592,7 @@
1523
1524 /* An insn can be deleted if every position of every one of
1525 its s_infos is zero. */
1526- if (any_positions_needed_p (s_info)
1527- || ptr->cannot_delete)
1528+ if (any_positions_needed_p (s_info))
1529 del = false;
1530
1531 if (del)
1532@@ -1605,7 +1604,8 @@
1533 else
1534 active_local_stores = ptr->next_local_store;
1535
1536- delete_dead_store_insn (insn_to_delete);
1537+ if (!insn_to_delete->cannot_delete)
1538+ delete_dead_store_insn (insn_to_delete);
1539 }
1540 else
1541 last = ptr;
1542
1543=== modified file 'gcc/dwarf2out.c'
1544--- gcc/dwarf2out.c 2011-03-28 09:43:50 +0000
1545+++ gcc/dwarf2out.c 2011-04-28 16:44:05 +0000
1546@@ -6188,7 +6188,7 @@
1547 static void gen_type_die (tree, dw_die_ref);
1548 static void gen_block_die (tree, dw_die_ref, int);
1549 static void decls_for_scope (tree, dw_die_ref, int);
1550-static int is_redundant_typedef (const_tree);
1551+static inline int is_redundant_typedef (const_tree);
1552 static inline dw_die_ref get_context_die (tree);
1553 static void gen_namespace_die (tree, dw_die_ref);
1554 static void gen_decl_die (tree, tree, dw_die_ref);
1555@@ -12824,7 +12824,7 @@
1556 int base_reg
1557 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
1558 ? HARD_FRAME_POINTER_REGNUM
1559- : STACK_POINTER_REGNUM);
1560+ : REGNO (elim));
1561 return new_reg_loc_descr (base_reg, offset);
1562 }
1563
1564
1565=== modified file 'gcc/fold-const.c'
1566--- gcc/fold-const.c 2010-11-26 12:03:32 +0000
1567+++ gcc/fold-const.c 2011-04-28 16:44:05 +0000
1568@@ -16165,12 +16165,17 @@
1569 }
1570 /* *(foo *)&fooarray => fooarray[0] */
1571 else if (TREE_CODE (optype) == ARRAY_TYPE
1572- && type == TREE_TYPE (optype))
1573+ && type == TREE_TYPE (optype)
1574+ && (!in_gimple_form
1575+ || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))
1576 {
1577 tree type_domain = TYPE_DOMAIN (optype);
1578 tree min_val = size_zero_node;
1579 if (type_domain && TYPE_MIN_VALUE (type_domain))
1580 min_val = TYPE_MIN_VALUE (type_domain);
1581+ if (in_gimple_form
1582+ && TREE_CODE (min_val) != INTEGER_CST)
1583+ return NULL_TREE;
1584 op0 = build4 (ARRAY_REF, type, op, min_val, NULL_TREE, NULL_TREE);
1585 SET_EXPR_LOCATION (op0, loc);
1586 return op0;
1587@@ -16241,7 +16246,9 @@
1588
1589 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
1590 if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
1591- && type == TREE_TYPE (TREE_TYPE (subtype)))
1592+ && type == TREE_TYPE (TREE_TYPE (subtype))
1593+ && (!in_gimple_form
1594+ || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))
1595 {
1596 tree type_domain;
1597 tree min_val = size_zero_node;
1598@@ -16249,6 +16256,9 @@
1599 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
1600 if (type_domain && TYPE_MIN_VALUE (type_domain))
1601 min_val = TYPE_MIN_VALUE (type_domain);
1602+ if (in_gimple_form
1603+ && TREE_CODE (min_val) != INTEGER_CST)
1604+ return NULL_TREE;
1605 op0 = build4 (ARRAY_REF, type, sub, min_val, NULL_TREE, NULL_TREE);
1606 SET_EXPR_LOCATION (op0, loc);
1607 return op0;
1608
1609=== modified file 'gcc/fortran/ChangeLog'
1610--- gcc/fortran/ChangeLog 2011-04-05 10:59:38 +0000
1611+++ gcc/fortran/ChangeLog 2011-04-28 16:44:05 +0000
1612@@ -1,3 +1,7 @@
1613+2011-04-28 Release Manager
1614+
1615+ * GCC 4.5.3 released.
1616+
1617 2011-04-05 Duncan Sands <baldrick@free.fr>
1618
1619 * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter
1620
1621=== modified file 'gcc/gcov-io.c'
1622--- gcc/gcov-io.c 2009-11-25 10:55:54 +0000
1623+++ gcc/gcov-io.c 2011-04-28 16:44:05 +0000
1624@@ -16,8 +16,13 @@
1625 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1626 for more details.
1627
1628-You should have received a copy of the GNU General Public License
1629-along with GCC; see the file COPYING3. If not see
1630+Under Section 7 of GPL version 3, you are granted additional
1631+permissions described in the GCC Runtime Library Exception, version
1632+3.1, as published by the Free Software Foundation.
1633+
1634+You should have received a copy of the GNU General Public License and
1635+a copy of the GCC Runtime Library Exception along with this program;
1636+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
1637 <http://www.gnu.org/licenses/>. */
1638
1639 /* Routines declared in gcov-io.h. This file should be #included by
1640
1641=== modified file 'gcc/gimplify.c'
1642--- gcc/gimplify.c 2010-11-11 20:36:49 +0000
1643+++ gcc/gimplify.c 2011-04-28 16:44:05 +0000
1644@@ -5438,7 +5438,8 @@
1645 For local variables TYPE_SIZE_UNIT might not be gimplified yet,
1646 in this case omp_notice_variable will be called later
1647 on when it is gimplified. */
1648- else if (! (flags & GOVD_LOCAL))
1649+ else if (! (flags & GOVD_LOCAL)
1650+ && DECL_P (TYPE_SIZE_UNIT (TREE_TYPE (decl))))
1651 omp_notice_variable (ctx, TYPE_SIZE_UNIT (TREE_TYPE (decl)), true);
1652 }
1653 else if (lang_hooks.decls.omp_privatize_by_reference (decl))
1654
1655=== modified file 'gcc/haifa-sched.c'
1656--- gcc/haifa-sched.c 2011-02-08 10:51:58 +0000
1657+++ gcc/haifa-sched.c 2011-04-28 16:44:05 +0000
1658@@ -4442,6 +4442,8 @@
1659 edge_flags = 0;
1660
1661 make_single_succ_edge (rec, second_bb, edge_flags);
1662+ if (dom_info_available_p (CDI_DOMINATORS))
1663+ set_immediate_dominator (CDI_DOMINATORS, rec, first_bb);
1664 }
1665
1666 /* This function creates recovery code for INSN. If MUTATE_P is nonzero,
1667
1668=== modified file 'gcc/ipa-inline.c'
1669--- gcc/ipa-inline.c 2010-11-24 08:43:48 +0000
1670+++ gcc/ipa-inline.c 2011-04-28 16:44:05 +0000
1671@@ -2092,6 +2092,7 @@
1672 {
1673 unsigned int todo = 0;
1674 struct cgraph_edge *e;
1675+ bool inline_p = false;
1676
1677 /* FIXME: Currently the passmanager is adding inline transform more than once to some
1678 clones. This needs revisiting after WPA cleanups. */
1679@@ -2104,10 +2105,13 @@
1680 save_inline_function_body (node);
1681
1682 for (e = node->callees; e; e = e->next_callee)
1683- if (!e->inline_failed || warn_inline)
1684- break;
1685+ {
1686+ cgraph_redirect_edge_call_stmt_to_callee (e);
1687+ if (!e->inline_failed || warn_inline)
1688+ inline_p = true;
1689+ }
1690
1691- if (e)
1692+ if (inline_p)
1693 {
1694 timevar_push (TV_INTEGRATION);
1695 todo = optimize_inline_calls (current_function_decl);
1696
1697=== modified file 'gcc/java/ChangeLog'
1698--- gcc/java/ChangeLog 2010-12-16 12:32:23 +0000
1699+++ gcc/java/ChangeLog 2011-04-28 16:44:05 +0000
1700@@ -1,3 +1,7 @@
1701+2011-04-28 Release Manager
1702+
1703+ * GCC 4.5.3 released.
1704+
1705 2010-12-16 Release Manager
1706
1707 * GCC 4.5.2 released.
1708
1709=== modified file 'gcc/lto/ChangeLog'
1710--- gcc/lto/ChangeLog 2010-12-16 12:32:50 +0000
1711+++ gcc/lto/ChangeLog 2011-04-28 16:44:05 +0000
1712@@ -1,3 +1,7 @@
1713+2011-04-28 Release Manager
1714+
1715+ * GCC 4.5.3 released.
1716+
1717 2010-12-16 Release Manager
1718
1719 * GCC 4.5.2 released.
1720
1721=== modified file 'gcc/objc/ChangeLog'
1722--- gcc/objc/ChangeLog 2010-12-16 12:33:00 +0000
1723+++ gcc/objc/ChangeLog 2011-04-28 16:44:05 +0000
1724@@ -1,3 +1,7 @@
1725+2011-04-28 Release Manager
1726+
1727+ * GCC 4.5.3 released.
1728+
1729 2010-12-16 Release Manager
1730
1731 * GCC 4.5.2 released.
1732
1733=== modified file 'gcc/objcp/ChangeLog'
1734--- gcc/objcp/ChangeLog 2010-12-16 12:33:13 +0000
1735+++ gcc/objcp/ChangeLog 2011-04-28 16:44:05 +0000
1736@@ -1,3 +1,7 @@
1737+2011-04-28 Release Manager
1738+
1739+ * GCC 4.5.3 released.
1740+
1741 2010-12-16 Release Manager
1742
1743 * GCC 4.5.2 released.
1744
1745=== modified file 'gcc/omp-low.c'
1746--- gcc/omp-low.c 2010-04-21 13:01:30 +0000
1747+++ gcc/omp-low.c 2011-04-28 16:44:05 +0000
1748@@ -1930,7 +1930,18 @@
1749 {
1750 *walk_subtrees = 1;
1751 if (ctx)
1752- TREE_TYPE (t) = remap_type (TREE_TYPE (t), &ctx->cb);
1753+ {
1754+ tree tem = remap_type (TREE_TYPE (t), &ctx->cb);
1755+ if (tem != TREE_TYPE (t))
1756+ {
1757+ if (TREE_CODE (t) == INTEGER_CST)
1758+ *tp = build_int_cst_wide (tem,
1759+ TREE_INT_CST_LOW (t),
1760+ TREE_INT_CST_HIGH (t));
1761+ else
1762+ TREE_TYPE (t) = tem;
1763+ }
1764+ }
1765 }
1766 break;
1767 }
1768
1769=== modified file 'gcc/po/ChangeLog'
1770--- gcc/po/ChangeLog 2010-12-16 12:32:28 +0000
1771+++ gcc/po/ChangeLog 2011-04-28 16:44:05 +0000
1772@@ -1,3 +1,7 @@
1773+2011-04-28 Release Manager
1774+
1775+ * GCC 4.5.3 released.
1776+
1777 2010-12-16 Release Manager
1778
1779 * GCC 4.5.2 released.
1780
1781=== modified file 'gcc/reload1.c'
1782--- gcc/reload1.c 2011-03-02 13:30:06 +0000
1783+++ gcc/reload1.c 2011-04-28 16:44:05 +0000
1784@@ -461,7 +461,7 @@
1785 static void delete_output_reload (rtx, int, int, rtx);
1786 static void delete_address_reloads (rtx, rtx);
1787 static void delete_address_reloads_1 (rtx, rtx, rtx);
1788-static rtx inc_for_reload (rtx, rtx, rtx, int);
1789+static void inc_for_reload (rtx, rtx, rtx, int);
1790 #ifdef AUTO_INC_DEC
1791 static void add_auto_inc_notes (rtx, rtx);
1792 #endif
1793@@ -7150,22 +7150,12 @@
1794
1795 old = XEXP (rl->in_reg, 0);
1796
1797- if (optimize && REG_P (oldequiv)
1798- && REGNO (oldequiv) < FIRST_PSEUDO_REGISTER
1799- && spill_reg_store[REGNO (oldequiv)]
1800- && REG_P (old)
1801- && (dead_or_set_p (insn,
1802- spill_reg_stored_to[REGNO (oldequiv)])
1803- || rtx_equal_p (spill_reg_stored_to[REGNO (oldequiv)],
1804- old)))
1805- delete_output_reload (insn, j, REGNO (oldequiv), reloadreg);
1806-
1807 /* Prevent normal processing of this reload. */
1808 special = 1;
1809- /* Output a special code sequence for this case. */
1810- new_spill_reg_store[REGNO (reloadreg)]
1811- = inc_for_reload (reloadreg, oldequiv, rl->out,
1812- rl->inc);
1813+ /* Output a special code sequence for this case, and forget about
1814+ spill reg information. */
1815+ new_spill_reg_store[REGNO (reloadreg)] = NULL;
1816+ inc_for_reload (reloadreg, oldequiv, rl->out, rl->inc);
1817 }
1818
1819 /* If we are reloading a pseudo-register that was set by the previous
1820@@ -8975,11 +8965,9 @@
1821 IN is either identical to VALUE, or some cheaper place to reload from.
1822
1823 INC_AMOUNT is the number to increment or decrement by (always positive).
1824- This cannot be deduced from VALUE.
1825-
1826- Return the instruction that stores into RELOADREG. */
1827-
1828-static rtx
1829+ This cannot be deduced from VALUE. */
1830+
1831+static void
1832 inc_for_reload (rtx reloadreg, rtx in, rtx value, int inc_amount)
1833 {
1834 /* REG or MEM to be copied and incremented. */
1835@@ -8991,7 +8979,6 @@
1836 rtx inc;
1837 rtx add_insn;
1838 int code;
1839- rtx store;
1840 rtx real_in = in == value ? incloc : in;
1841
1842 /* No hard register is equivalent to this register after
1843@@ -9039,9 +9026,8 @@
1844 be used as an address. */
1845
1846 if (! post)
1847- add_insn = emit_insn (gen_move_insn (reloadreg, incloc));
1848-
1849- return add_insn;
1850+ emit_insn (gen_move_insn (reloadreg, incloc));
1851+ return;
1852 }
1853 }
1854 delete_insns_since (last);
1855@@ -9057,7 +9043,7 @@
1856 if (in != reloadreg)
1857 emit_insn (gen_move_insn (reloadreg, real_in));
1858 emit_insn (gen_add2_insn (reloadreg, inc));
1859- store = emit_insn (gen_move_insn (incloc, reloadreg));
1860+ emit_insn (gen_move_insn (incloc, reloadreg));
1861 }
1862 else
1863 {
1864@@ -9071,14 +9057,12 @@
1865 the original value. */
1866
1867 emit_insn (gen_add2_insn (reloadreg, inc));
1868- store = emit_insn (gen_move_insn (incloc, reloadreg));
1869+ emit_insn (gen_move_insn (incloc, reloadreg));
1870 if (CONST_INT_P (inc))
1871 emit_insn (gen_add2_insn (reloadreg, GEN_INT (-INTVAL (inc))));
1872 else
1873 emit_insn (gen_sub2_insn (reloadreg, inc));
1874 }
1875-
1876- return store;
1877 }
1878
1879
1880 #ifdef AUTO_INC_DEC
1881
1882=== modified file 'gcc/rtl.h'
1883--- gcc/rtl.h 2011-02-08 10:51:58 +0000
1884+++ gcc/rtl.h 2011-04-28 16:44:05 +0000
1885@@ -2418,6 +2418,7 @@
1886 extern rtx gen_hard_reg_clobber (enum machine_mode, unsigned int);
1887 extern rtx get_reg_known_value (unsigned int);
1888 extern bool get_reg_known_equiv_p (unsigned int);
1889+extern rtx get_reg_base_value (unsigned int);
1890
1891 #ifdef STACK_REGS
1892 extern int stack_regs_mentioned (const_rtx insn);
1893
1894=== modified file 'gcc/sched-vis.c'
1895--- gcc/sched-vis.c 2011-02-08 10:51:58 +0000
1896+++ gcc/sched-vis.c 2011-04-28 16:44:05 +0000
1897@@ -603,7 +603,7 @@
1898 sprintf (buf, "asm {%s}", XSTR (x, 0));
1899 break;
1900 case ADDR_VEC:
1901- break;
1902+ /* Fall through. */
1903 case ADDR_DIFF_VEC:
1904 print_value (buf, XEXP (x, 0), verbose);
1905 break;
1906
1907=== modified file 'gcc/sel-sched-ir.c'
1908--- gcc/sel-sched-ir.c 2011-02-08 10:51:58 +0000
1909+++ gcc/sel-sched-ir.c 2011-04-28 16:44:05 +0000
1910@@ -152,7 +152,9 @@
1911
1912 static void move_bb_info (basic_block, basic_block);
1913 static void remove_empty_bb (basic_block, bool);
1914+static void sel_merge_blocks (basic_block, basic_block);
1915 static void sel_remove_loop_preheader (void);
1916+static bool bb_has_removable_jump_to_p (basic_block, basic_block);
1917
1918 static bool insn_is_the_only_one_in_bb_p (insn_t);
1919 static void create_initial_data_sets (basic_block);
1920@@ -939,6 +941,7 @@
1921 void
1922 return_regset_to_pool (regset rs)
1923 {
1924+ gcc_assert (rs);
1925 regset_pool.diff--;
1926
1927 if (regset_pool.n == regset_pool.s)
1928@@ -1172,6 +1175,9 @@
1929 VINSN_COUNT (vi) = 0;
1930 vi->cost = -1;
1931
1932+ if (INSN_NOP_P (insn))
1933+ return;
1934+
1935 if (DF_INSN_UID_SAFE_GET (INSN_UID (insn)) != NULL)
1936 init_id_from_df (VINSN_ID (vi), insn, force_unique_p);
1937 else
1938@@ -1253,9 +1259,12 @@
1939 {
1940 gcc_assert (VINSN_COUNT (vi) == 0);
1941
1942- return_regset_to_pool (VINSN_REG_SETS (vi));
1943- return_regset_to_pool (VINSN_REG_USES (vi));
1944- return_regset_to_pool (VINSN_REG_CLOBBERS (vi));
1945+ if (!INSN_NOP_P (VINSN_INSN_RTX (vi)))
1946+ {
1947+ return_regset_to_pool (VINSN_REG_SETS (vi));
1948+ return_regset_to_pool (VINSN_REG_USES (vi));
1949+ return_regset_to_pool (VINSN_REG_CLOBBERS (vi));
1950+ }
1951
1952 free (vi);
1953 }
1954@@ -1555,6 +1564,20 @@
1955 *pvect = NULL;
1956 }
1957
1958+/* Merge vector FROM to PVECT. */
1959+static void
1960+merge_history_vect (VEC (expr_history_def, heap) **pvect,
1961+ VEC (expr_history_def, heap) *from)
1962+{
1963+ expr_history_def *phist;
1964+ int i;
1965+
1966+ /* We keep this vector sorted. */
1967+ for (i = 0; VEC_iterate (expr_history_def, from, i, phist); i++)
1968+ insert_in_history_vect (pvect, phist->uid, phist->type,
1969+ phist->old_expr_vinsn, phist->new_expr_vinsn,
1970+ phist->spec_ds);
1971+}
1972
1973 /* Compare two vinsns as rhses if possible and as vinsns otherwise. */
1974 bool
1975@@ -1592,7 +1615,7 @@
1976 init_expr (expr_t expr, vinsn_t vi, int spec, int use, int priority,
1977 int sched_times, int orig_bb_index, ds_t spec_done_ds,
1978 ds_t spec_to_check_ds, int orig_sched_cycle,
1979- VEC(expr_history_def, heap) *history, bool target_available,
1980+ VEC(expr_history_def, heap) *history, signed char target_available,
1981 bool was_substituted, bool was_renamed, bool needs_spec_check_p,
1982 bool cant_move)
1983 {
1984@@ -1787,9 +1810,6 @@
1985 void
1986 merge_expr_data (expr_t to, expr_t from, insn_t split_point)
1987 {
1988- int i;
1989- expr_history_def *phist;
1990-
1991 /* For now, we just set the spec of resulting expr to be minimum of the specs
1992 of merged exprs. */
1993 if (EXPR_SPEC (to) > EXPR_SPEC (from))
1994@@ -1813,20 +1833,12 @@
1995 EXPR_ORIG_SCHED_CYCLE (to) = MIN (EXPR_ORIG_SCHED_CYCLE (to),
1996 EXPR_ORIG_SCHED_CYCLE (from));
1997
1998- /* We keep this vector sorted. */
1999- for (i = 0;
2000- VEC_iterate (expr_history_def, EXPR_HISTORY_OF_CHANGES (from),
2001- i, phist);
2002- i++)
2003- insert_in_history_vect (&EXPR_HISTORY_OF_CHANGES (to),
2004- phist->uid, phist->type,
2005- phist->old_expr_vinsn, phist->new_expr_vinsn,
2006- phist->spec_ds);
2007-
2008 EXPR_WAS_SUBSTITUTED (to) |= EXPR_WAS_SUBSTITUTED (from);
2009 EXPR_WAS_RENAMED (to) |= EXPR_WAS_RENAMED (from);
2010 EXPR_CANT_MOVE (to) |= EXPR_CANT_MOVE (from);
2011
2012+ merge_history_vect (&EXPR_HISTORY_OF_CHANGES (to),
2013+ EXPR_HISTORY_OF_CHANGES (from));
2014 update_target_availability (to, from, split_point);
2015 update_speculative_bits (to, from, split_point);
2016 }
2017@@ -2319,16 +2331,24 @@
2018 }
2019
2020 /* Leave in AVP only those expressions, which are present in AV,
2021- and return it. */
2022+ and return it, merging history expressions. */
2023 void
2024-av_set_intersect (av_set_t *avp, av_set_t av)
2025+av_set_code_motion_filter (av_set_t *avp, av_set_t av)
2026 {
2027 av_set_iterator i;
2028- expr_t expr;
2029+ expr_t expr, expr2;
2030
2031 FOR_EACH_EXPR_1 (expr, i, avp)
2032- if (av_set_lookup (av, EXPR_VINSN (expr)) == NULL)
2033+ if ((expr2 = av_set_lookup (av, EXPR_VINSN (expr))) == NULL)
2034 av_set_iter_remove (&i);
2035+ else
2036+ /* When updating av sets in bookkeeping blocks, we can add more insns
2037+ there which will be transformed but the upper av sets will not
2038+ reflect those transformations. We then fail to undo those
2039+ when searching for such insns. So merge the history saved
2040+ in the av set of the block we are processing. */
2041+ merge_history_vect (&EXPR_HISTORY_OF_CHANGES (expr),
2042+ EXPR_HISTORY_OF_CHANGES (expr2));
2043 }
2044
2045
2046
2047@@ -3539,9 +3559,10 @@
2048
2049 /* Tidy the possibly empty block BB. */
2050 static bool
2051-maybe_tidy_empty_bb (basic_block bb, bool recompute_toporder_p)
2052+maybe_tidy_empty_bb (basic_block bb)
2053 {
2054 basic_block succ_bb, pred_bb;
2055+ VEC (basic_block, heap) *dom_bbs;
2056 edge e;
2057 edge_iterator ei;
2058 bool rescan_p;
2059@@ -3577,6 +3598,7 @@
2060 succ_bb = single_succ (bb);
2061 rescan_p = true;
2062 pred_bb = NULL;
2063+ dom_bbs = NULL;
2064
2065 /* Redirect all non-fallthru edges to the next bb. */
2066 while (rescan_p)
2067@@ -3589,20 +3611,44 @@
2068
2069 if (!(e->flags & EDGE_FALLTHRU))
2070 {
2071- recompute_toporder_p |= sel_redirect_edge_and_branch (e, succ_bb);
2072+ /* We can not invalidate computed topological order by moving
2073+ the edge destination block (E->SUCC) along a fallthru edge.
2074+
2075+ We will update dominators here only when we'll get
2076+ an unreachable block when redirecting, otherwise
2077+ sel_redirect_edge_and_branch will take care of it. */
2078+ if (e->dest != bb
2079+ && single_pred_p (e->dest))
2080+ VEC_safe_push (basic_block, heap, dom_bbs, e->dest);
2081+ sel_redirect_edge_and_branch (e, succ_bb);
2082 rescan_p = true;
2083 break;
2084 }
2085+ /* If the edge is fallthru, but PRED_BB ends in a conditional jump
2086+ to BB (so there is no non-fallthru edge from PRED_BB to BB), we
2087+ still have to adjust it. */
2088+ else if (single_succ_p (pred_bb) && any_condjump_p (BB_END (pred_bb)))
2089+ {
2090+ /* If possible, try to remove the unneeded conditional jump. */
2091+ if (INSN_SCHED_TIMES (BB_END (pred_bb)) == 0
2092+ && !IN_CURRENT_FENCE_P (BB_END (pred_bb)))
2093+ {
2094+ if (!sel_remove_insn (BB_END (pred_bb), false, false))
2095+ tidy_fallthru_edge (e);
2096+ }
2097+ else
2098+ sel_redirect_edge_and_branch (e, succ_bb);
2099+ rescan_p = true;
2100+ break;
2101+ }
2102 }
2103 }
2104
2105- /* If it is possible - merge BB with its predecessor. */
2106 if (can_merge_blocks_p (bb->prev_bb, bb))
2107 sel_merge_blocks (bb->prev_bb, bb);
2108 else
2109- /* Otherwise this is a block without fallthru predecessor.
2110- Just delete it. */
2111 {
2112+ /* This is a block without fallthru predecessor. Just delete it. */
2113 gcc_assert (pred_bb != NULL);
2114
2115 if (in_current_region_p (pred_bb))
2116@@ -3610,12 +3656,12 @@
2117 remove_empty_bb (bb, true);
2118 }
2119
2120- if (recompute_toporder_p)
2121- sel_recompute_toporder ();
2122-
2123-#ifdef ENABLE_CHECKING
2124- verify_backedges ();
2125-#endif
2126+ if (!VEC_empty (basic_block, dom_bbs))
2127+ {
2128+ VEC_safe_push (basic_block, heap, dom_bbs, succ_bb);
2129+ iterate_fix_dominators (CDI_DOMINATORS, dom_bbs, false);
2130+ VEC_free (basic_block, heap, dom_bbs);
2131+ }
2132
2133 return true;
2134 }
2135@@ -3630,12 +3676,12 @@
2136 insn_t first, last;
2137
2138 /* First check whether XBB is empty. */
2139- changed = maybe_tidy_empty_bb (xbb, false);
2140+ changed = maybe_tidy_empty_bb (xbb);
2141 if (changed || !full_tidying)
2142 return changed;
2143
2144 /* Check if there is a unnecessary jump after insn left. */
2145- if (jump_leads_only_to_bb_p (BB_END (xbb), xbb->next_bb)
2146+ if (bb_has_removable_jump_to_p (xbb, xbb->next_bb)
2147 && INSN_SCHED_TIMES (BB_END (xbb)) == 0
2148 && !IN_CURRENT_FENCE_P (BB_END (xbb)))
2149 {
2150@@ -3676,7 +3722,7 @@
2151 /* And unconditional jump in previous basic block leads to
2152 next basic block of XBB and this jump can be safely removed. */
2153 && in_current_region_p (xbb->prev_bb)
2154- && jump_leads_only_to_bb_p (BB_END (xbb->prev_bb), xbb->next_bb)
2155+ && bb_has_removable_jump_to_p (xbb->prev_bb, xbb->next_bb)
2156 && INSN_SCHED_TIMES (BB_END (xbb->prev_bb)) == 0
2157 /* Also this jump is not at the scheduling boundary. */
2158 && !IN_CURRENT_FENCE_P (BB_END (xbb->prev_bb)))
2159@@ -3694,11 +3740,16 @@
2160 that contained that jump, becomes empty too. In such case
2161 remove it too. */
2162 if (sel_bb_empty_p (xbb->prev_bb))
2163- changed = maybe_tidy_empty_bb (xbb->prev_bb, recompute_toporder_p);
2164- else if (recompute_toporder_p)
2165+ changed = maybe_tidy_empty_bb (xbb->prev_bb);
2166+ if (recompute_toporder_p)
2167 sel_recompute_toporder ();
2168 }
2169
2170+#ifdef ENABLE_CHECKING
2171+ verify_backedges ();
2172+ verify_dominators (CDI_DOMINATORS);
2173+#endif
2174+
2175 return changed;
2176 }
2177
2178@@ -3706,14 +3757,14 @@
2179 void
2180 purge_empty_blocks (void)
2181 {
2182- /* Do not attempt to delete preheader. */
2183- int i = sel_is_loop_preheader_p (BASIC_BLOCK (BB_TO_BLOCK (0))) ? 1 : 0;
2184+ int i;
2185
2186- while (i < current_nr_blocks)
2187+ /* Do not attempt to delete the first basic block in the region. */
2188+ for (i = 1; i < current_nr_blocks; )
2189 {
2190 basic_block b = BASIC_BLOCK (BB_TO_BLOCK (i));
2191
2192- if (maybe_tidy_empty_bb (b, false))
2193+ if (maybe_tidy_empty_bb (b))
2194 continue;
2195
2196 i++;
2197@@ -4381,9 +4432,6 @@
2198 if (!JUMP_P (jump))
2199 return NULL;
2200
2201- if (any_uncondjump_p (jump))
2202- return single_succ (BLOCK_FOR_INSN (jump));
2203-
2204 if (!any_condjump_p (jump))
2205 return NULL;
2206
2207@@ -4578,8 +4626,12 @@
2208 basic_block pred_bb = e->src;
2209 insn_t bb_end = BB_END (pred_bb);
2210
2211- /* ??? This code is not supposed to walk out of a region. */
2212- gcc_assert (in_current_region_p (pred_bb));
2213+ if (!in_current_region_p (pred_bb))
2214+ {
2215+ gcc_assert (flag_sel_sched_pipelining_outer_loops
2216+ && current_loop_nest);
2217+ continue;
2218+ }
2219
2220 if (sel_bb_empty_p (pred_bb))
2221 cfg_preds_1 (pred_bb, preds, n, size);
2222@@ -4592,7 +4644,9 @@
2223 }
2224 }
2225
2226- gcc_assert (*n != 0);
2227+ gcc_assert (*n != 0
2228+ || (flag_sel_sched_pipelining_outer_loops
2229+ && current_loop_nest));
2230 }
2231
2232 /* Find all predecessors of BB and record them in PREDS and their number
2233@@ -5018,16 +5072,23 @@
2234 static void
2235 sel_remove_bb (basic_block bb, bool remove_from_cfg_p)
2236 {
2237+ unsigned idx = bb->index;
2238+
2239 gcc_assert (bb != NULL && BB_NOTE_LIST (bb) == NULL_RTX);
2240
2241 remove_bb_from_region (bb);
2242 return_bb_to_pool (bb);
2243- bitmap_clear_bit (blocks_to_reschedule, bb->index);
2244+ bitmap_clear_bit (blocks_to_reschedule, idx);
2245
2246 if (remove_from_cfg_p)
2247- delete_and_free_basic_block (bb);
2248+ {
2249+ basic_block succ = single_succ (bb);
2250+ delete_and_free_basic_block (bb);
2251+ set_immediate_dominator (CDI_DOMINATORS, succ,
2252+ recompute_dominator (CDI_DOMINATORS, succ));
2253+ }
2254
2255- rgn_setup_region (CONTAINING_RGN (bb->index));
2256+ rgn_setup_region (CONTAINING_RGN (idx));
2257 }
2258
2259 /* Concatenate info of EMPTY_BB to info of MERGE_BB. */
2260@@ -5042,50 +5103,6 @@
2261
2262 }
2263
2264-/* Remove an empty basic block EMPTY_BB. When MERGE_UP_P is true, we put
2265- EMPTY_BB's note lists into its predecessor instead of putting them
2266- into the successor. When REMOVE_FROM_CFG_P is true, also remove
2267- the empty block. */
2268-void
2269-sel_remove_empty_bb (basic_block empty_bb, bool merge_up_p,
2270- bool remove_from_cfg_p)
2271-{
2272- basic_block merge_bb;
2273-
2274- gcc_assert (sel_bb_empty_p (empty_bb));
2275-
2276- if (merge_up_p)
2277- {
2278- merge_bb = empty_bb->prev_bb;
2279- gcc_assert (EDGE_COUNT (empty_bb->preds) == 1
2280- && EDGE_PRED (empty_bb, 0)->src == merge_bb);
2281- }
2282- else
2283- {
2284- edge e;
2285- edge_iterator ei;
2286-
2287- merge_bb = bb_next_bb (empty_bb);
2288-
2289- /* Redirect incoming edges (except fallthrough one) of EMPTY_BB to its
2290- successor block. */
2291- for (ei = ei_start (empty_bb->preds);
2292- (e = ei_safe_edge (ei)); )
2293- {
2294- if (! (e->flags & EDGE_FALLTHRU))
2295- sel_redirect_edge_and_branch (e, merge_bb);
2296- else
2297- ei_next (&ei);
2298- }
2299-
2300- gcc_assert (EDGE_COUNT (empty_bb->succs) == 1
2301- && EDGE_SUCC (empty_bb, 0)->dest == merge_bb);
2302- }
2303-
2304- move_bb_info (merge_bb, empty_bb);
2305- remove_empty_bb (empty_bb, remove_from_cfg_p);
2306-}
2307-
2308 /* Remove EMPTY_BB. If REMOVE_FROM_CFG_P is false, remove EMPTY_BB from
2309 region, but keep it in CFG. */
2310 static void
2311@@ -5385,12 +5402,16 @@
2312 }
2313
2314 /* Merge basic block B into basic block A. */
2315-void
2316+static void
2317 sel_merge_blocks (basic_block a, basic_block b)
2318 {
2319- sel_remove_empty_bb (b, true, false);
2320+ gcc_assert (sel_bb_empty_p (b)
2321+ && EDGE_COUNT (b->preds) == 1
2322+ && EDGE_PRED (b, 0)->src == b->prev_bb);
2323+
2324+ move_bb_info (b->prev_bb, b);
2325+ remove_empty_bb (b, false);
2326 merge_blocks (a, b);
2327-
2328 change_loops_latches (b, a);
2329 }
2330
2331@@ -5400,12 +5421,15 @@
2332 void
2333 sel_redirect_edge_and_branch_force (edge e, basic_block to)
2334 {
2335- basic_block jump_bb, src;
2336+ basic_block jump_bb, src, orig_dest = e->dest;
2337 int prev_max_uid;
2338 rtx jump;
2339
2340- gcc_assert (!sel_bb_empty_p (e->src));
2341-
2342+ /* This function is now used only for bookkeeping code creation, where
2343+ we'll never get the single pred of orig_dest block and thus will not
2344+ hit unreachable blocks when updating dominator info. */
2345+ gcc_assert (!sel_bb_empty_p (e->src)
2346+ && !single_pred_p (orig_dest));
2347 src = e->src;
2348 prev_max_uid = get_max_uid ();
2349 jump_bb = redirect_edge_and_branch_force (e, to);
2350@@ -5422,6 +5446,10 @@
2351 jump = find_new_jump (src, jump_bb, prev_max_uid);
2352 if (jump)
2353 sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
2354+ set_immediate_dominator (CDI_DOMINATORS, to,
2355+ recompute_dominator (CDI_DOMINATORS, to));
2356+ set_immediate_dominator (CDI_DOMINATORS, orig_dest,
2357+ recompute_dominator (CDI_DOMINATORS, orig_dest));
2358 }
2359
2360 /* A wrapper for redirect_edge_and_branch. Return TRUE if blocks connected by
2361@@ -5430,11 +5458,12 @@
2362 sel_redirect_edge_and_branch (edge e, basic_block to)
2363 {
2364 bool latch_edge_p;
2365- basic_block src;
2366+ basic_block src, orig_dest = e->dest;
2367 int prev_max_uid;
2368 rtx jump;
2369 edge redirected;
2370 bool recompute_toporder_p = false;
2371+ bool maybe_unreachable = single_pred_p (orig_dest);
2372
2373 latch_edge_p = (pipelining_p
2374 && current_loop_nest
2375@@ -5465,6 +5494,15 @@
2376 if (jump)
2377 sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
2378
2379+ /* Only update dominator info when we don't have unreachable blocks.
2380+ Otherwise we'll update in maybe_tidy_empty_bb. */
2381+ if (!maybe_unreachable)
2382+ {
2383+ set_immediate_dominator (CDI_DOMINATORS, to,
2384+ recompute_dominator (CDI_DOMINATORS, to));
2385+ set_immediate_dominator (CDI_DOMINATORS, orig_dest,
2386+ recompute_dominator (CDI_DOMINATORS, orig_dest));
2387+ }
2388 return recompute_toporder_p;
2389 }
2390
2391@@ -5603,7 +5641,7 @@
2392 gcc_assert (nop_pattern == NULL_RTX
2393 && exit_insn == NULL_RTX);
2394
2395- nop_pattern = gen_nop ();
2396+ nop_pattern = constm1_rtx;
2397
2398 start_sequence ();
2399 emit_insn (nop_pattern);
2400@@ -6093,22 +6131,20 @@
2401 return false;
2402 }
2403
2404-/* Checks whether JUMP leads to basic block DEST_BB and no other blocks. */
2405-bool
2406-jump_leads_only_to_bb_p (insn_t jump, basic_block dest_bb)
2407+/* Check whether JUMP_BB ends with a jump insn that leads only to DEST_BB and
2408+ can be removed, making the corresponding edge fallthrough (assuming that
2409+ all basic blocks between JUMP_BB and DEST_BB are empty). */
2410+static bool
2411+bb_has_removable_jump_to_p (basic_block jump_bb, basic_block dest_bb)
2412 {
2413- basic_block jump_bb = BLOCK_FOR_INSN (jump);
2414-
2415- /* It is not jump, jump with side-effects or jump can lead to several
2416- basic blocks. */
2417- if (!onlyjump_p (jump)
2418- || !any_uncondjump_p (jump))
2419+ if (!onlyjump_p (BB_END (jump_bb))
2420+ || tablejump_p (BB_END (jump_bb), NULL, NULL))
2421 return false;
2422
2423 /* Several outgoing edges, abnormal edge or destination of jump is
2424 not DEST_BB. */
2425 if (EDGE_COUNT (jump_bb->succs) != 1
2426- || EDGE_SUCC (jump_bb, 0)->flags & EDGE_ABNORMAL
2427+ || EDGE_SUCC (jump_bb, 0)->flags & (EDGE_ABNORMAL | EDGE_CROSSING)
2428 || EDGE_SUCC (jump_bb, 0)->dest != dest_bb)
2429 return false;
2430
2431@@ -6188,12 +6224,16 @@
2432 basic block if it becomes empty. */
2433 if (next_bb->prev_bb == prev_bb
2434 && prev_bb != ENTRY_BLOCK_PTR
2435- && jump_leads_only_to_bb_p (BB_END (prev_bb), next_bb))
2436+ && bb_has_removable_jump_to_p (prev_bb, next_bb))
2437 {
2438 redirect_edge_and_branch (EDGE_SUCC (prev_bb, 0), next_bb);
2439 if (BB_END (prev_bb) == bb_note (prev_bb))
2440 free_data_sets (prev_bb);
2441 }
2442+
2443+ set_immediate_dominator (CDI_DOMINATORS, next_bb,
2444+ recompute_dominator (CDI_DOMINATORS,
2445+ next_bb));
2446 }
2447 }
2448 VEC_free (basic_block, heap, preheader_blocks);
2449
2450=== modified file 'gcc/sel-sched-ir.h'
2451--- gcc/sel-sched-ir.h 2010-06-02 16:31:39 +0000
2452+++ gcc/sel-sched-ir.h 2011-04-28 16:44:05 +0000
2453@@ -1565,7 +1565,7 @@
2454 extern expr_t av_set_element (av_set_t, int);
2455 extern void av_set_substract_cond_branches (av_set_t *);
2456 extern void av_set_split_usefulness (av_set_t, int, int);
2457-extern void av_set_intersect (av_set_t *, av_set_t);
2458+extern void av_set_code_motion_filter (av_set_t *, av_set_t);
2459
2460 extern void sel_save_haifa_priorities (void);
2461
2462@@ -1590,7 +1590,6 @@
2463 extern bool bb_header_p (insn_t);
2464 extern void sel_init_invalid_data_sets (insn_t);
2465 extern bool insn_at_boundary_p (insn_t);
2466-extern bool jump_leads_only_to_bb_p (insn_t, basic_block);
2467
2468 /* Basic block and CFG functions. */
2469
2470@@ -1618,11 +1617,9 @@
2471 extern bool tidy_control_flow (basic_block, bool);
2472 extern void free_bb_note_pool (void);
2473
2474-extern void sel_remove_empty_bb (basic_block, bool, bool);
2475 extern void purge_empty_blocks (void);
2476 extern basic_block sel_split_edge (edge);
2477 extern basic_block sel_create_recovery_block (insn_t);
2478-extern void sel_merge_blocks (basic_block, basic_block);
2479 extern bool sel_redirect_edge_and_branch (edge, basic_block);
2480 extern void sel_redirect_edge_and_branch_force (edge, basic_block);
2481 extern void sel_init_pipelining (void);
2482
2483=== modified file 'gcc/sel-sched.c'
2484--- gcc/sel-sched.c 2011-02-08 10:51:58 +0000
2485+++ gcc/sel-sched.c 2011-04-28 16:44:05 +0000
2486@@ -1,5 +1,6 @@
2487 /* Instruction scheduling pass. Selective scheduler and pipeliner.
2488- Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
2489+ Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
2490+ Free Software Foundation, Inc.
2491
2492 This file is part of GCC.
2493
2494@@ -1138,6 +1139,9 @@
2495 /* Can't use regs which aren't saved by
2496 the prologue. */
2497 || !TEST_HARD_REG_BIT (sel_hrd.regs_ever_used, cur_reg + i)
2498+ /* Can't use regs with non-null REG_BASE_VALUE, because adjusting
2499+ it affects aliasing globally and invalidates all AV sets. */
2500+ || get_reg_base_value (cur_reg + i)
2501 #ifdef LEAF_REGISTERS
2502 /* We can't use a non-leaf register if we're in a
2503 leaf function. */
2504@@ -2167,10 +2171,8 @@
2505 || ! in_current_region_p (fallthru_bb))
2506 return MOVEUP_EXPR_NULL;
2507
2508- /* And it should be mutually exclusive with through_insn, or
2509- be an unconditional jump. */
2510- if (! any_uncondjump_p (insn)
2511- && ! sched_insns_conditions_mutex_p (insn, through_insn)
2512+ /* And it should be mutually exclusive with through_insn. */
2513+ if (! sched_insns_conditions_mutex_p (insn, through_insn)
2514 && ! DEBUG_INSN_P (through_insn))
2515 return MOVEUP_EXPR_NULL;
2516 }
2517@@ -3735,7 +3737,7 @@
2518 {
2519 expr_t expr = VEC_index (expr_t, vec_av_set, n);
2520 insn_t insn = EXPR_INSN_RTX (expr);
2521- char target_available;
2522+ signed char target_available;
2523 bool is_orig_reg_p = true;
2524 int need_cycles, new_prio;
2525
2526@@ -4403,7 +4405,8 @@
2527 {
2528 can_issue_more = invoke_aftermath_hooks (fence, EXPR_INSN_RTX (best),
2529 can_issue_more);
2530- if (can_issue_more == 0)
2531+ if (targetm.sched.variable_issue
2532+ && can_issue_more == 0)
2533 *pneed_stall = 1;
2534 }
2535
2536@@ -5514,7 +5517,7 @@
2537 blist_t *bnds_tailp1, *bndsp;
2538 expr_t expr_vliw;
2539 int need_stall;
2540- int was_stall = 0, scheduled_insns = 0, stall_iterations = 0;
2541+ int was_stall = 0, scheduled_insns = 0;
2542 int max_insns = pipelining_p ? issue_rate : 2 * issue_rate;
2543 int max_stall = pipelining_p ? 1 : 3;
2544 bool last_insn_was_debug = false;
2545@@ -5533,16 +5536,15 @@
2546 do
2547 {
2548 expr_vliw = find_best_expr (&av_vliw, bnds, fence, &need_stall);
2549- if (!expr_vliw && need_stall)
2550+ if (! expr_vliw && need_stall)
2551 {
2552 /* All expressions required a stall. Do not recompute av sets
2553 as we'll get the same answer (modulo the insns between
2554 the fence and its boundary, which will not be available for
2555- pipelining). */
2556- gcc_assert (! expr_vliw && stall_iterations < 2);
2557+ pipelining).
2558+ If we are going to stall for too long, break to recompute av
2559+ sets and bring more insns for pipelining. */
2560 was_stall++;
2561- /* If we are going to stall for too long, break to recompute av
2562- sets and bring more insns for pipelining. */
2563 if (need_stall <= 3)
2564 stall_for_cycles (fence, need_stall);
2565 else
2566@@ -6475,7 +6477,7 @@
2567
2568 /* Filter the orig_ops set. */
2569 if (AV_SET_VALID_P (insn))
2570- av_set_intersect (&orig_ops, AV_SET (insn));
2571+ av_set_code_motion_filter (&orig_ops, AV_SET (insn));
2572
2573 /* If no more original ops, return immediately. */
2574 if (!orig_ops)
2575@@ -6717,6 +6719,8 @@
2576
2577 init_seqno_1 (succ, visited_bbs, blocks_to_reschedule);
2578 }
2579+ else if (blocks_to_reschedule)
2580+ bitmap_set_bit (forced_ebb_heads, succ->index);
2581 }
2582
2583 for (insn = BB_END (bb); insn != note; insn = PREV_INSN (insn))
2584@@ -6971,6 +6975,7 @@
2585 int last_clock = 0;
2586 int haifa_last_clock = -1;
2587 int haifa_clock = 0;
2588+ int issued_insns = 0;
2589 insn_t insn;
2590
2591 if (targetm.sched.md_init)
2592@@ -6989,7 +6994,7 @@
2593 {
2594 int cost, haifa_cost;
2595 int sort_p;
2596- bool asm_p, real_insn, after_stall;
2597+ bool asm_p, real_insn, after_stall, all_issued;
2598 int clock;
2599
2600 if (!INSN_P (insn))
2601@@ -7025,7 +7030,9 @@
2602 haifa_cost = cost;
2603 after_stall = 1;
2604 }
2605-
2606+ all_issued = issued_insns == issue_rate;
2607+ if (haifa_cost == 0 && all_issued)
2608+ haifa_cost = 1;
2609 if (haifa_cost > 0)
2610 {
2611 int i = 0;
2612@@ -7033,6 +7040,7 @@
2613 while (haifa_cost--)
2614 {
2615 advance_state (curr_state);
2616+ issued_insns = 0;
2617 i++;
2618
2619 if (sched_verbose >= 2)
2620@@ -7049,9 +7057,22 @@
2621 && haifa_cost > 0
2622 && estimate_insn_cost (insn, curr_state) == 0)
2623 break;
2624- }
2625+
2626+ /* When the data dependency stall is longer than the DFA stall,
2627+ and when we have issued exactly issue_rate insns and stalled,
2628+ it could be that after this longer stall the insn will again
2629+ become unavailable to the DFA restrictions. Looks strange
2630+ but happens e.g. on x86-64. So recheck DFA on the last
2631+ iteration. */
2632+ if ((after_stall || all_issued)
2633+ && real_insn
2634+ && haifa_cost == 0)
2635+ haifa_cost = estimate_insn_cost (insn, curr_state);
2636+ }
2637
2638 haifa_clock += i;
2639+ if (sched_verbose >= 2)
2640+ sel_print ("haifa clock: %d\n", haifa_clock);
2641 }
2642 else
2643 gcc_assert (haifa_cost == 0);
2644@@ -7065,21 +7086,27 @@
2645 &sort_p))
2646 {
2647 advance_state (curr_state);
2648+ issued_insns = 0;
2649 haifa_clock++;
2650 if (sched_verbose >= 2)
2651 {
2652 sel_print ("advance_state (dfa_new_cycle)\n");
2653 debug_state (curr_state);
2654+ sel_print ("haifa clock: %d\n", haifa_clock + 1);
2655 }
2656 }
2657
2658 if (real_insn)
2659 {
2660 cost = state_transition (curr_state, insn);
2661+ issued_insns++;
2662
2663 if (sched_verbose >= 2)
2664- debug_state (curr_state);
2665-
2666+ {
2667+ sel_print ("scheduled insn %d, clock %d\n", INSN_UID (insn),
2668+ haifa_clock + 1);
2669+ debug_state (curr_state);
2670+ }
2671 gcc_assert (cost < 0);
2672 }
2673
2674@@ -7492,21 +7519,23 @@
2675 {
2676 basic_block bb = EBB_FIRST_BB (i);
2677
2678- if (sel_bb_empty_p (bb))
2679- {
2680- bitmap_clear_bit (blocks_to_reschedule, bb->index);
2681- continue;
2682- }
2683-
2684 if (bitmap_bit_p (blocks_to_reschedule, bb->index))
2685 {
2686+ if (! bb_ends_ebb_p (bb))
2687+ bitmap_set_bit (blocks_to_reschedule, bb_next_bb (bb)->index);
2688+ if (sel_bb_empty_p (bb))
2689+ {
2690+ bitmap_clear_bit (blocks_to_reschedule, bb->index);
2691+ continue;
2692+ }
2693 clear_outdated_rtx_info (bb);
2694 if (sel_insn_is_speculation_check (BB_END (bb))
2695 && JUMP_P (BB_END (bb)))
2696 bitmap_set_bit (blocks_to_reschedule,
2697 BRANCH_EDGE (bb)->dest->index);
2698 }
2699- else if (INSN_SCHED_TIMES (sel_bb_head (bb)) <= 0)
2700+ else if (! sel_bb_empty_p (bb)
2701+ && INSN_SCHED_TIMES (sel_bb_head (bb)) <= 0)
2702 bitmap_set_bit (blocks_to_reschedule, bb->index);
2703 }
2704
2705
2706=== modified file 'gcc/simplify-rtx.c'
2707--- gcc/simplify-rtx.c 2011-04-14 13:58:12 +0000
2708+++ gcc/simplify-rtx.c 2011-04-28 16:44:05 +0000
2709@@ -1468,7 +1468,8 @@
2710 }
2711
2712 else if (GET_CODE (op) == CONST_DOUBLE
2713- && SCALAR_FLOAT_MODE_P (mode))
2714+ && SCALAR_FLOAT_MODE_P (mode)
2715+ && SCALAR_FLOAT_MODE_P (GET_MODE (op)))
2716 {
2717 REAL_VALUE_TYPE d, t;
2718 REAL_VALUE_FROM_CONST_DOUBLE (d, op);
2719@@ -1491,7 +1492,10 @@
2720 d = real_value_truncate (mode, d);
2721 break;
2722 case FLOAT_EXTEND:
2723- /* All this does is change the mode. */
2724+ /* All this does is change the mode, unless changing
2725+ mode class. */
2726+ if (GET_MODE_CLASS (mode) != GET_MODE_CLASS (GET_MODE (op)))
2727+ real_convert (&d, mode, &d);
2728 break;
2729 case FIX:
2730 real_arithmetic (&d, FIX_TRUNC_EXPR, &d, NULL);
2731
2732=== modified file 'gcc/testsuite/ChangeLog'
2733--- gcc/testsuite/ChangeLog 2011-03-31 15:11:20 +0000
2734+++ gcc/testsuite/ChangeLog 2011-04-28 16:44:05 +0000
2735@@ -1,3 +1,230 @@
2736+2011-04-28 Release Manager
2737+
2738+ * GCC 4.5.3 released.
2739+
2740+2011-04-27 Dodji Seketeli <dodji@redhat.com>
2741+
2742+ PR c++/46824, c++/42260, c++/45383
2743+ * g++.dg/conversion/cast2.C: New test.
2744+ * g++.dg/conversion/cast3.C: Likewise.
2745+ * g++.dg/conversion/cond4.C: Likewise.
2746+
2747+2011-04-26 Jason Merrill <jason@redhat.com>
2748+
2749+ * g++.dg/lookup/koenig13.C: New.
2750+
2751+2011-04-26 Jakub Jelinek <jakub@redhat.com>
2752+
2753+ Backported from mainline
2754+ 2011-04-24 Jakub Jelinek <jakub@redhat.com>
2755+
2756+ PR preprocessor/48740
2757+ * c-c++-common/raw-string-11.c: New test.
2758+
2759+2011-04-20 Jason Merrill <jason@redhat.com>
2760+
2761+ * g++.dg/template/operator11.C: New.
2762+
2763+2011-04-19 Jason Merrill <jason@redhat.com>
2764+
2765+ * g++.dg/ext/complex7.C: New.
2766+
2767+2011-04-19 Jason Merrill <jason@redhat.com>
2768+
2769+ * g++.dg/ext/attrib41.C: New.
2770+
2771+2011-04-18 Richard Guenther <rguenther@suse.de>
2772+
2773+ Backported from 4.6 branch
2774+ 2011-01-19 Jakub Jelinek <jakub@redhat.com>
2775+
2776+ PR tree-optimization/47290
2777+ * g++.dg/torture/pr47290.C: New test.
2778+
2779+ 2010-05-29 Jan Hubicka <jh@suse.cz>
2780+
2781+ PR tree-optimization/46364
2782+ * g++.dg/torture/pr46364.C: New testcase.
2783+
2784+2011-04-18 Richard Guenther <rguenther@suse.de>
2785+
2786+ Backported from 4.6 branch
2787+ 2011-03-11 Jakub Jelinek <jakub@redhat.com>
2788+
2789+ PR c++/48035
2790+ * g++.dg/inherit/virtual8.C: New test.
2791+
2792+ 2011-03-05 Zdenek Dvorak <ook@ucw.cz>
2793+
2794+ PR rtl-optimization/47899
2795+ * gcc.dg/pr47899.c: New test.
2796+
2797+2011-04-16 Jakub Jelinek <jakub@redhat.com>
2798+
2799+ Backported from 4.6 branch
2800+ 2011-04-15 Jakub Jelinek <jakub@redhat.com>
2801+
2802+ PR target/48605
2803+ * gcc.target/i386/sse4_1-insertps-3.c: New test.
2804+ * gcc.target/i386/sse4_1-insertps-4.c: New test.
2805+ * gcc.target/i386/avx-insertps-3.c: New test.
2806+ * gcc.target/i386/avx-insertps-4.c: New test.
2807+
2808+2011-04-12 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2809+
2810+ Backport from mainline:
2811+ 2011-02-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2812+
2813+ PR testsuite/47400
2814+ * lib/target-supports.exp (check_ascii_locale_available): New proc.
2815+ * lib/target-supports-dg.exp (dg-require-ascii-locale): New proc.
2816+ * gcc.dg/attr-alias-5.c: Use dg-require-ascii-locale.
2817+ * gcc.dg/ucnid-10.c: Likewise.
2818+ * gcc.dg/ucnid-13.c: Likewise.
2819+ * gcc.dg/ucnid-7.c: Likewise.
2820+ * gcc.dg/ucnid-8.c: Likewise.
2821+ Adapt dg-warning line number.
2822+
2823+2011-04-07 Jakub Jelinek <jakub@redhat.com>
2824+
2825+ PR fortran/48117
2826+ * gfortran.dg/gomp/pr48117.f90: New test.
2827+
2828+ Backported from mainline
2829+ 2011-04-06 Jakub Jelinek <jakub@redhat.com>
2830+
2831+ PR debug/48466
2832+ * gcc.dg/guality/pr36977.c: New test.
2833+ * gcc.dg/guality/pr48466.c: New test.
2834+
2835+ 2011-03-24 Jakub Jelinek <jakub@redhat.com>
2836+
2837+ PR debug/48204
2838+ * gcc.dg/dfp/pr48204.c: New test.
2839+
2840+ 2011-03-17 Jakub Jelinek <jakub@redhat.com>
2841+
2842+ PR rtl-optimization/48141
2843+ * gcc.dg/pr48141.c: New test.
2844+
2845+ 2011-03-03 Jakub Jelinek <jakub@redhat.com>
2846+
2847+ PR c/47963
2848+ * gcc.dg/gomp/pr47963.c: New test.
2849+ * g++.dg/gomp/pr47963.C: New test.
2850+
2851+ 2011-02-19 Jakub Jelinek <jakub@redhat.com>
2852+
2853+ PR c/47809
2854+ * gcc.target/i386/pr47809.c: New test.
2855+
2856+ 2011-01-26 Jakub Jelinek <jakub@redhat.com>
2857+
2858+ PR c/47473
2859+ * gcc.dg/torture/pr47473.c: New test.
2860+
2861+ 2011-01-21 Jakub Jelinek <jakub@redhat.com>
2862+
2863+ PR tree-optimization/47391
2864+ * gcc.dg/pr47391.c: New test.
2865+
2866+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2867+
2868+ Backport from mainline
2869+ 2011-03-26 Andrey Belevantsev <abel@ispras.ru>
2870+
2871+ PR rtl-optimization/48144
2872+ * gcc.dg/pr48144.c: New test.
2873+
2874+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2875+
2876+ Backport from mainline
2877+ 2011-01-13 Andrey Belevantsev <abel@ispras.ru>
2878+
2879+ PR rtl-optimization/45352
2880+ * gcc.dg/pr45352-3.c: New.
2881+
2882+ Backport from mainline
2883+ 2010-12-22 Andrey Belevantsev <abel@ispras.ru>
2884+
2885+ PR rtl-optimization/45352
2886+ PR rtl-optimization/46521
2887+ PR rtl-optimization/46522
2888+ * gcc.dg/pr46521.c: New.
2889+ * gcc.dg/pr46522.c: New.
2890+
2891+ Backport from mainline
2892+ 2010-11-08 Andrey Belevantsev <abel@ispras.ru>
2893+
2894+ PR rtl-optimization/45352
2895+ gcc.dg/pr45352.c, gcc.dg/pr45352-1.c, gcc.dg/pr45352-2.c: New tests.
2896+ gcc.target/i386/pr45352.c, gcc.target/i386/pr45352-1.c,
2897+ gcc.target/i386/pr45352-2.c: New tests.
2898+
2899+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2900+
2901+ Backport from mainline
2902+ 2010-12-24 Alexander Monakov <amonakov@ispras.ru>
2903+
2904+ PR rtl-optimization/47036
2905+ * g++.dg/opt/pr47036.C: New.
2906+
2907+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2908+
2909+ Backport from mainline
2910+ 2010-12-15 Alexander Monakov <amonakov@ispras.ru>
2911+
2912+ PR rtl-optimization/46649
2913+ * g++.dg/opt/pr46649.C: New.
2914+
2915+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2916+
2917+ Backport from mainline
2918+ 2010-12-14 Alexander Monakov <amonakov@ispras.ru>
2919+
2920+ PR rtl-optimization/46875
2921+ * gcc.dg/pr46875.c: New.
2922+
2923+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2924+
2925+ Backport from mainline
2926+ 2010-12-07 Andrey Belevantsev <abel@ispras.ru>
2927+
2928+ PR target/43603
2929+ * gcc.target/ia64/pr43603.c: New.
2930+ * gcc/testsuite/g++.dg/opt/pr46640.C: New.
2931+
2932+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2933+
2934+ Backport from mainline
2935+ 2010-12-03 Alexander Monakov <amonakov@ispras.ru>
2936+
2937+ PR rtl-optimization/45354
2938+ * gcc.dg/tree-prof/pr45354.c: New.
2939+
2940+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2941+
2942+ Backport from mainline
2943+ 2010-11-25 Alexander Monakov <amonakov@ispras.ru>
2944+
2945+ PR rtl-optimization/46585
2946+ * gcc.dg/pr46585.c: New.
2947+
2948+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2949+
2950+ Backport from mainline
2951+ 2010-11-22 Alexander Monakov <amonakov@ispras.ru>
2952+
2953+ PR rtl-optimization/45652
2954+ * gcc.dg/pr45652.c: New.
2955+
2956+2011-04-07 Andrey Belevantsev <abel@ispras.ru>
2957+
2958+ Backport from mainline
2959+ 2010-10-14 Andrey Belevantsev <abel@ispras.ru>
2960+ PR rtl-optimization/45570
2961+ * gcc.dg/pr45570.c: New test.
2962+
2963 2011-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
2964
2965 PR target/16292
2966
2967=== added file 'gcc/testsuite/c-c++-common/raw-string-11.c'
2968--- gcc/testsuite/c-c++-common/raw-string-11.c 1970-01-01 00:00:00 +0000
2969+++ gcc/testsuite/c-c++-common/raw-string-11.c 2011-04-28 16:44:05 +0000
2970@@ -0,0 +1,13 @@
2971+// PR preprocessor/48740
2972+// { dg-options "-std=gnu99 -trigraphs -save-temps" { target c } }
2973+// { dg-options "-std=c++0x -save-temps" { target c++ } }
2974+// { dg-do run }
2975+
2976+int main ()
2977+{
2978+ return __builtin_memcmp (R"raw(foo%sbar%sfred%sbob?????)raw",
2979+ "foo%sbar%sfred%sbob?""?""?""?""?",
2980+ sizeof ("foo%sbar%sfred%sbob?""?""?""?""?"));
2981+}
2982+
2983+// { dg-final { cleanup-saved-temps } }
2984
2985=== added file 'gcc/testsuite/g++.dg/conversion/cast2.C'
2986--- gcc/testsuite/g++.dg/conversion/cast2.C 1970-01-01 00:00:00 +0000
2987+++ gcc/testsuite/g++.dg/conversion/cast2.C 2011-04-28 16:44:05 +0000
2988@@ -0,0 +1,10 @@
2989+// Contributed by Dodji Seketeli <dodji@redhat.com>
2990+// Origin: PR c++/42260
2991+// { dg-do compile }
2992+
2993+struct A
2994+{
2995+ template<typename T> operator T*();
2996+};
2997+
2998+int i = *A();// { dg-error "no match" }
2999
3000=== removed file 'gcc/testsuite/g++.dg/conversion/cast2.C'
3001--- gcc/testsuite/g++.dg/conversion/cast2.C 2009-12-23 00:31:33 +0000
3002+++ gcc/testsuite/g++.dg/conversion/cast2.C 1970-01-01 00:00:00 +0000
3003@@ -1,11 +0,0 @@
3004-// Contributed by Dodji Seketeli <dodji@redhat.com>
3005-// Origin: PR c++/42260
3006-// { dg-do compile }
3007-
3008-struct A
3009-{
3010- template<typename T> operator T*();
3011-};
3012-
3013-int i = *A();// { dg-error "no match" }
3014-
3015
3016=== added file 'gcc/testsuite/g++.dg/conversion/cast3.C'
3017--- gcc/testsuite/g++.dg/conversion/cast3.C 1970-01-01 00:00:00 +0000
3018+++ gcc/testsuite/g++.dg/conversion/cast3.C 2011-04-28 16:44:05 +0000
3019@@ -0,0 +1,14 @@
3020+// Origin: PR c++/46824
3021+
3022+class Incomplete;
3023+struct Ptr
3024+{
3025+ operator Incomplete*();
3026+};
3027+
3028+int
3029+main()
3030+{
3031+ Ptr p;
3032+ *p;
3033+}
3034
3035=== added file 'gcc/testsuite/g++.dg/conversion/cond4.C'
3036--- gcc/testsuite/g++.dg/conversion/cond4.C 1970-01-01 00:00:00 +0000
3037+++ gcc/testsuite/g++.dg/conversion/cond4.C 2011-04-28 16:44:05 +0000
3038@@ -0,0 +1,31 @@
3039+// Origin: PR c++/45383
3040+// { dg-do run }
3041+
3042+struct null {
3043+ null() {}
3044+ template<class T>
3045+ operator T*() const {
3046+ return 0;
3047+ }
3048+
3049+ template<class C, class T>
3050+ operator T C::*() const {
3051+ return 0;
3052+ }
3053+private:
3054+ null(const null&);
3055+ null& operator=(const null&);
3056+ void operator&() const;
3057+};
3058+
3059+static struct null null;
3060+
3061+int
3062+main()
3063+{
3064+ int* ptr = null;
3065+ if (ptr == null)
3066+ return 0;
3067+ if (ptr != null)
3068+ return 1;
3069+}
3070
3071=== added file 'gcc/testsuite/g++.dg/ext/attrib41.C'
3072--- gcc/testsuite/g++.dg/ext/attrib41.C 1970-01-01 00:00:00 +0000
3073+++ gcc/testsuite/g++.dg/ext/attrib41.C 2011-04-28 16:44:05 +0000
3074@@ -0,0 +1,19 @@
3075+// PR c++/45267
3076+// { dg-options "-O" }
3077+
3078+template<typename T> struct Vector {
3079+ Vector(long long x);
3080+ inline Vector<T> operator<<(int x) const __attribute__((always_inline));
3081+};
3082+long long bar (long long);
3083+template<> inline Vector<int> Vector<int>::operator<<(int x) const {
3084+ return bar(x);
3085+}
3086+bool b;
3087+int main() {
3088+ Vector<int> a(1);
3089+ if ((a << 2), b) {
3090+ a << 2;
3091+ throw 1;
3092+ }
3093+}
3094
3095=== added file 'gcc/testsuite/g++.dg/ext/complex7.C'
3096--- gcc/testsuite/g++.dg/ext/complex7.C 1970-01-01 00:00:00 +0000
3097+++ gcc/testsuite/g++.dg/ext/complex7.C 2011-04-28 16:44:05 +0000
3098@@ -0,0 +1,6 @@
3099+// { dg-options "" }
3100+
3101+class A
3102+{
3103+ static const _Complex double x = 1.0 + 2.0i;
3104+};
3105
3106=== added file 'gcc/testsuite/g++.dg/gomp/pr47963.C'
3107--- gcc/testsuite/g++.dg/gomp/pr47963.C 1970-01-01 00:00:00 +0000
3108+++ gcc/testsuite/g++.dg/gomp/pr47963.C 2011-04-28 16:44:05 +0000
3109@@ -0,0 +1,11 @@
3110+// PR c/47963
3111+// { dg-do compile }
3112+// { dg-options "-fopenmp" }
3113+
3114+void
3115+foo (float n)
3116+{
3117+ int A[n][n]; // { dg-error "has non-integral type" }
3118+#pragma omp parallel private(A)
3119+ ;
3120+}
3121
3122=== added file 'gcc/testsuite/g++.dg/inherit/virtual8.C'
3123--- gcc/testsuite/g++.dg/inherit/virtual8.C 1970-01-01 00:00:00 +0000
3124+++ gcc/testsuite/g++.dg/inherit/virtual8.C 2011-04-28 16:44:05 +0000
3125@@ -0,0 +1,48 @@
3126+// PR c++/48035
3127+// { dg-do run }
3128+
3129+#include <new>
3130+#include <cstring>
3131+#include <cstdlib>
3132+
3133+struct A
3134+{
3135+ virtual void foo (void) {}
3136+ virtual ~A () {}
3137+};
3138+
3139+struct B : public A
3140+{
3141+ virtual ~B () {}
3142+};
3143+
3144+struct C
3145+{
3146+ virtual ~C () {}
3147+ int c;
3148+};
3149+
3150+struct D : public virtual B, public C
3151+{
3152+ virtual ~D () {}
3153+};
3154+
3155+struct E : public virtual D
3156+{
3157+ virtual ~E () {}
3158+};
3159+
3160+int
3161+main ()
3162+{
3163+ char *v = new char[sizeof (E) + 16];
3164+ memset (v, 0x55, sizeof (E) + 16);
3165+ E *e = new (v) E ();
3166+ e->~E ();
3167+
3168+ for (unsigned i = sizeof (E); i < sizeof (E) + 16; ++i)
3169+ if (v[i] != 0x55)
3170+ abort ();
3171+
3172+ delete[] v;
3173+}
3174
3175=== added file 'gcc/testsuite/g++.dg/lookup/koenig13.C'
3176--- gcc/testsuite/g++.dg/lookup/koenig13.C 1970-01-01 00:00:00 +0000
3177+++ gcc/testsuite/g++.dg/lookup/koenig13.C 2011-04-28 16:44:05 +0000
3178@@ -0,0 +1,16 @@
3179+// PR c++/42687
3180+// DR 705
3181+
3182+namespace N
3183+{
3184+ struct S { };
3185+ void f(const S &) { }
3186+}
3187+
3188+void f(const N::S &) { }
3189+
3190+int main()
3191+{
3192+ N::S v;
3193+ (f)(v); // no ambiguity: ADL is prevented with (), only ::f is considered
3194+}
3195
3196=== added file 'gcc/testsuite/g++.dg/opt/pr46640.C'
3197--- gcc/testsuite/g++.dg/opt/pr46640.C 1970-01-01 00:00:00 +0000
3198+++ gcc/testsuite/g++.dg/opt/pr46640.C 2011-04-28 16:44:05 +0000
3199@@ -0,0 +1,44 @@
3200+// { dg-do compile { target x86_64-*-* } }
3201+// { dg-options "-fschedule-insns2 -fsel-sched-pipelining -fselective-scheduling2 -fno-exceptions -O" }
3202+
3203+struct QBasicAtomicInt
3204+{
3205+ int i, j;
3206+ bool deref ()
3207+ {
3208+ asm volatile ("":"=m" (i), "=qm" (j));
3209+ }
3210+};
3211+
3212+struct Data
3213+{
3214+ QBasicAtomicInt ref;
3215+ void *data;
3216+};
3217+
3218+struct QByteArray
3219+{
3220+ Data * d;
3221+ ~QByteArray ()
3222+ {
3223+ d->ref.deref ();
3224+ }
3225+};
3226+
3227+int indexOf (unsigned);
3228+int stat (void *, int *);
3229+QByteArray encodeName ();
3230+
3231+bool makeDir (unsigned len)
3232+{
3233+ unsigned i = 0;
3234+ while (len)
3235+ {
3236+ int st;
3237+ int pos = indexOf (i);
3238+ QByteArray baseEncoded = encodeName ();
3239+ if (stat (baseEncoded.d->data, &st) && stat (baseEncoded.d, &st))
3240+ return false;
3241+ i = pos;
3242+ }
3243+}
3244
3245=== added file 'gcc/testsuite/g++.dg/opt/pr46649.C'
3246--- gcc/testsuite/g++.dg/opt/pr46649.C 1970-01-01 00:00:00 +0000
3247+++ gcc/testsuite/g++.dg/opt/pr46649.C 2011-04-28 16:44:05 +0000
3248@@ -0,0 +1,9 @@
3249+// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } }
3250+// { dg-options "-fschedule-insns -fselective-scheduling" }
3251+
3252+void foo ()
3253+{
3254+ for (;;)
3255+ for (;;({break;}))
3256+ ;
3257+}
3258
3259=== added file 'gcc/testsuite/g++.dg/opt/pr47036.C'
3260--- gcc/testsuite/g++.dg/opt/pr47036.C 1970-01-01 00:00:00 +0000
3261+++ gcc/testsuite/g++.dg/opt/pr47036.C 2011-04-28 16:44:05 +0000
3262@@ -0,0 +1,10 @@
3263+// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } }
3264+// { dg-options "-fschedule-insns -fselective-scheduling -fno-dce" }
3265+
3266+
3267+void foo ()
3268+{
3269+ for (;;)
3270+ for (;;({break;}));
3271+}
3272+
3273
3274=== added file 'gcc/testsuite/g++.dg/template/operator11.C'
3275--- gcc/testsuite/g++.dg/template/operator11.C 1970-01-01 00:00:00 +0000
3276+++ gcc/testsuite/g++.dg/template/operator11.C 2011-04-28 16:44:05 +0000
3277@@ -0,0 +1,25 @@
3278+// PR c++/48594
3279+// Test for uses of (X->*Y)() that don't actually involve a
3280+// pointer to member function.
3281+
3282+struct A { } a;
3283+struct B { } b;
3284+struct C * cp;
3285+
3286+struct Func { void operator()(); };
3287+Func operator->* (A, int);
3288+
3289+typedef void (*pfn)();
3290+pfn operator->* (B, int);
3291+
3292+pfn C::*cpfn;
3293+Func C::*cfunc;
3294+
3295+template <class T>
3296+void f()
3297+{
3298+ (a->*1)();
3299+ (b->*1)();
3300+ (cp->*cpfn)();
3301+ (cp->*cfunc)();
3302+}
3303
3304=== added file 'gcc/testsuite/g++.dg/torture/pr46364.C'
3305--- gcc/testsuite/g++.dg/torture/pr46364.C 1970-01-01 00:00:00 +0000
3306+++ gcc/testsuite/g++.dg/torture/pr46364.C 2011-04-28 16:44:05 +0000
3307@@ -0,0 +1,20 @@
3308+// { dg-do compile }
3309+#include <string>
3310+
3311+void a() throw (int);
3312+void b(std::string const &);
3313+
3314+void c(std::string *e)
3315+{
3316+ b("");
3317+
3318+ try {
3319+ a();
3320+ } catch (...) {
3321+ *e = "";
3322+ }
3323+}
3324+
3325+void d() {
3326+ c(0);
3327+}
3328
3329=== added file 'gcc/testsuite/g++.dg/torture/pr47290.C'
3330--- gcc/testsuite/g++.dg/torture/pr47290.C 1970-01-01 00:00:00 +0000
3331+++ gcc/testsuite/g++.dg/torture/pr47290.C 2011-04-28 16:44:05 +0000
3332@@ -0,0 +1,19 @@
3333+// PR tree-optimization/47290
3334+// { dg-do compile }
3335+
3336+struct V
3337+{
3338+ V (int = 0);
3339+ ~V ()
3340+ {
3341+ for (;;)
3342+ ;
3343+ }
3344+ int size ();
3345+};
3346+
3347+struct S
3348+{
3349+ V a, b;
3350+ S () : b (a.size ()) {}
3351+} s;
3352
3353=== modified file 'gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog'
3354--- gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 2010-12-16 12:32:45 +0000
3355+++ gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog 2011-04-28 16:44:05 +0000
3356@@ -1,3 +1,7 @@
3357+2011-04-28 Release Manager
3358+
3359+ * GCC 4.5.3 released.
3360+
3361 2010-12-16 Release Manager
3362
3363 * GCC 4.5.2 released.
3364
3365=== modified file 'gcc/testsuite/gcc.dg/attr-alias-5.c'
3366--- gcc/testsuite/gcc.dg/attr-alias-5.c 2009-05-04 11:23:50 +0000
3367+++ gcc/testsuite/gcc.dg/attr-alias-5.c 2011-04-28 16:44:05 +0000
3368@@ -3,6 +3,7 @@
3369 /* { dg-do compile } */
3370 /* { dg-options "-std=gnu99" } */
3371 /* { dg-require-alias "" } */
3372+/* { dg-require-ascii-locale "" } */
3373
3374 void f0 (void) __attribute__((alias("\xa1"))); /* { dg-error "undefined symbol '\\\\241'" } */
3375 void f1 (void) __attribute__((alias("\u00e9"))); /* { dg-error "undefined symbol '\\\\U000000e9'" } */
3376
3377=== added file 'gcc/testsuite/gcc.dg/dfp/pr48204.c'
3378--- gcc/testsuite/gcc.dg/dfp/pr48204.c 1970-01-01 00:00:00 +0000
3379+++ gcc/testsuite/gcc.dg/dfp/pr48204.c 2011-04-28 16:44:05 +0000
3380@@ -0,0 +1,10 @@
3381+/* PR debug/48204 */
3382+/* { dg-do compile } */
3383+/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre -g" } */
3384+
3385+void
3386+foo (void)
3387+{
3388+ float cf = 3.0f;
3389+ _Decimal64 d64 = cf;
3390+}
3391
3392=== added file 'gcc/testsuite/gcc.dg/gomp/pr47963.c'
3393--- gcc/testsuite/gcc.dg/gomp/pr47963.c 1970-01-01 00:00:00 +0000
3394+++ gcc/testsuite/gcc.dg/gomp/pr47963.c 2011-04-28 16:44:05 +0000
3395@@ -0,0 +1,11 @@
3396+/* PR c/47963 */
3397+/* { dg-do compile } */
3398+/* { dg-options "-fopenmp" } */
3399+
3400+void
3401+foo (float n)
3402+{
3403+ int A[n][n]; /* { dg-error "has non-integer type" } */
3404+#pragma omp parallel private(A)
3405+ ;
3406+}
3407
3408=== added file 'gcc/testsuite/gcc.dg/guality/pr36977.c'
3409--- gcc/testsuite/gcc.dg/guality/pr36977.c 1970-01-01 00:00:00 +0000
3410+++ gcc/testsuite/gcc.dg/guality/pr36977.c 2011-04-28 16:44:05 +0000
3411@@ -0,0 +1,32 @@
3412+/* PR debug/36977 */
3413+/* { dg-do run } */
3414+/* { dg-options "-g" } */
3415+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
3416+
3417+void
3418+foo ()
3419+{
3420+}
3421+
3422+int
3423+main ()
3424+{
3425+ struct { char c[100]; } cbig;
3426+ struct { int i[800]; } ibig;
3427+ struct { long l[900]; } lbig;
3428+ struct { float f[200]; } fbig;
3429+ struct { double d[300]; } dbig;
3430+ struct { short s[400]; } sbig;
3431+
3432+ ibig.i[0] = 55; /* { dg-final { gdb-test 30 "ibig.i\[0\]" "55" } } */
3433+ ibig.i[100] = 5; /* { dg-final { gdb-test 30 "ibig.i\[100\]" "5" } } */
3434+ cbig.c[0] = '\0'; /* { dg-final { gdb-test 30 "cbig.c\[0\]" "'\\0'" } } */
3435+ cbig.c[99] = 'A'; /* { dg-final { gdb-test 30 "cbig.c\[99\]" "'A'" } } */
3436+ fbig.f[100] = 11.0; /* { dg-final { gdb-test 30 "fbig.f\[100\]" "11" } } */
3437+ dbig.d[202] = 9.0; /* { dg-final { gdb-test 30 "dbig.d\[202\]" "9" } } */
3438+ sbig.s[90] = 255; /* { dg-final { gdb-test 30 "sbig.s\[90\]" "255" } } */
3439+ lbig.l[333] = 999; /* { dg-final { gdb-test 30 "lbig.l\[333\]" "999" } } */
3440+
3441+ foo ();
3442+ return 0;
3443+}
3444
3445=== added file 'gcc/testsuite/gcc.dg/guality/pr48466.c'
3446--- gcc/testsuite/gcc.dg/guality/pr48466.c 1970-01-01 00:00:00 +0000
3447+++ gcc/testsuite/gcc.dg/guality/pr48466.c 2011-04-28 16:44:05 +0000
3448@@ -0,0 +1,41 @@
3449+/* PR debug/48466 */
3450+/* { dg-do run } */
3451+/* { dg-options "-g" } */
3452+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
3453+
3454+struct S { unsigned int a; unsigned int *b; };
3455+struct T { struct S a; struct S b; };
3456+struct U { const char *u; };
3457+int n[10];
3458+volatile int v;
3459+
3460+struct U
3461+foo (const char *s)
3462+{
3463+ struct U r;
3464+ r.u = s;
3465+ return r;
3466+}
3467+
3468+void
3469+bar (struct T *s, int a, int b)
3470+{
3471+ s->a.a = a;
3472+ s->a.b = &s->a.a;
3473+ s->b.a = b;
3474+ s->b.b = &s->b.a;
3475+}
3476+
3477+int
3478+main ()
3479+{
3480+ struct T t;
3481+ struct U x = foo ("this is x");
3482+ struct S y, z;
3483+ y.b = n; /* { dg-final { gdb-test 38 "t.a.a" "17" } } */
3484+ y.a = 0; /* { dg-final { gdb-test 38 "*t.a.b" "17" } } */
3485+ bar (&t, 17, 21); /* { dg-final { gdb-test 38 "t.b.a" "21" } } */
3486+ v++; /* { dg-final { gdb-test 38 "*t.b.b" "21" } } */
3487+ z = y;
3488+ return 0;
3489+}
3490
3491=== added file 'gcc/testsuite/gcc.dg/pr45352-1.c'
3492--- gcc/testsuite/gcc.dg/pr45352-1.c 1970-01-01 00:00:00 +0000
3493+++ gcc/testsuite/gcc.dg/pr45352-1.c 2011-04-28 16:44:05 +0000
3494@@ -0,0 +1,13 @@
3495+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3496+/* { dg-options "-O3 -fschedule-insns -fschedule-insns2 -fselective-scheduling2 -fsel-sched-pipelining -funroll-loops -fprefetch-loop-arrays" } */
3497+
3498+void main1 (float *pa, float *pc)
3499+{
3500+ int i;
3501+ float b[256];
3502+ float c[256];
3503+ for (i = 0; i < 256; i++)
3504+ b[i] = c[i] = pc[i];
3505+ for (i = 0; i < 256; i++)
3506+ pa[i] = b[i] * c[i];
3507+}
3508
3509=== added file 'gcc/testsuite/gcc.dg/pr45352-2.c'
3510--- gcc/testsuite/gcc.dg/pr45352-2.c 1970-01-01 00:00:00 +0000
3511+++ gcc/testsuite/gcc.dg/pr45352-2.c 2011-04-28 16:44:05 +0000
3512@@ -0,0 +1,17 @@
3513+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3514+/* { dg-options "-O1 -freorder-blocks -fschedule-insns2 -funswitch-loops -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
3515+void
3516+foo1 (int *s)
3517+{
3518+ s[0] = s[1];
3519+ while (s[6] - s[8])
3520+ {
3521+ s[6] -= s[8];
3522+ if (s[8] || s[0])
3523+ {
3524+ s[3] += s[0];
3525+ s[4] += s[1];
3526+ }
3527+ s[7]++;
3528+ }
3529+}
3530
3531=== added file 'gcc/testsuite/gcc.dg/pr45352-3.c'
3532--- gcc/testsuite/gcc.dg/pr45352-3.c 1970-01-01 00:00:00 +0000
3533+++ gcc/testsuite/gcc.dg/pr45352-3.c 2011-04-28 16:44:05 +0000
3534@@ -0,0 +1,16 @@
3535+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3536+/* { dg-options "-O -fprofile-generate -fgcse -fno-gcse-lm -fgcse-sm -fno-ivopts -fno-tree-loop-im -ftree-pre -funroll-loops -fno-web -fschedule-insns2 -fselective-scheduling2 -fsel-sched-pipelining" } */
3537+
3538+extern volatile float f[];
3539+
3540+void foo (void)
3541+{
3542+ int i;
3543+ for (i = 0; i < 100; i++)
3544+ f[i] = 0;
3545+ for (i = 0; i < 100; i++)
3546+ f[i] = 0;
3547+ for (i = 0; i < 100; i++)
3548+ if (f[i])
3549+ __builtin_abort ();
3550+}
3551
3552=== added file 'gcc/testsuite/gcc.dg/pr45352.c'
3553--- gcc/testsuite/gcc.dg/pr45352.c 1970-01-01 00:00:00 +0000
3554+++ gcc/testsuite/gcc.dg/pr45352.c 2011-04-28 16:44:05 +0000
3555@@ -0,0 +1,24 @@
3556+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3557+/* { dg-options "-Os -fselective-scheduling2 -fsel-sched-pipelining -fprofile-generate" } */
3558+
3559+static inline void
3560+bmp_iter_next (int *bi, int *bit_no)
3561+{
3562+ *bi >>= 1;
3563+ *bit_no += 1;
3564+}
3565+
3566+int bmp_iter_set (int *bi, int *bit_no);
3567+void bitmap_initialize_stat (int, ...);
3568+void bitmap_clear (void);
3569+
3570+void
3571+df_md_alloc (int bi, int bb_index, void *bb_info)
3572+{
3573+ for (; bmp_iter_set (&bi, &bb_index); bmp_iter_next (&bi, &bb_index))
3574+
3575+ if (bb_info)
3576+ bitmap_clear ();
3577+ else
3578+ bitmap_initialize_stat (0);
3579+}
3580
3581=== added file 'gcc/testsuite/gcc.dg/pr45570.c'
3582--- gcc/testsuite/gcc.dg/pr45570.c 1970-01-01 00:00:00 +0000
3583+++ gcc/testsuite/gcc.dg/pr45570.c 2011-04-28 16:44:05 +0000
3584@@ -0,0 +1,28 @@
3585+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
3586+/* { dg-options "-O3 -fselective-scheduling2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -ftracer" } */
3587+void
3588+parser_get_next_char (char c, int qm, char *p)
3589+{
3590+ int quote_mode = 0;
3591+ for (; *p; p++)
3592+ {
3593+ if (qm)
3594+ {
3595+ if (quote_mode == 0 && *p == '"' && *(p - 1))
3596+ {
3597+ quote_mode = 1;
3598+ continue;
3599+ }
3600+ if (quote_mode && *p == '"' && *(p - 1))
3601+ quote_mode = 0;
3602+ }
3603+ if (quote_mode == 0 && *p == c && *(p - 1))
3604+ break;
3605+ }
3606+}
3607+
3608+void
3609+parser_get_next_parameter (char *p)
3610+{
3611+ parser_get_next_char (':', 1, p);
3612+}
3613
3614=== added file 'gcc/testsuite/gcc.dg/pr45652.c'
3615--- gcc/testsuite/gcc.dg/pr45652.c 1970-01-01 00:00:00 +0000
3616+++ gcc/testsuite/gcc.dg/pr45652.c 2011-04-28 16:44:05 +0000
3617@@ -0,0 +1,39 @@
3618+/* { dg-do run { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3619+/* { dg-options "-O2 -fselective-scheduling2" } */
3620+
3621+struct S {
3622+ double i[2];
3623+};
3624+
3625+void __attribute__ ((noinline)) checkcd (struct S x)
3626+{
3627+ if (x.i[0] != 7.0 || x.i[1] != 8.0)
3628+ __builtin_abort ();
3629+}
3630+
3631+void __attribute__ ((noinline)) testvacd (int n, ...)
3632+{
3633+ int i;
3634+ __builtin_va_list ap;
3635+ __builtin_va_start (ap, n);
3636+ for (i = 0; i < n; i++)
3637+ {
3638+ struct S t = __builtin_va_arg (ap, struct S);
3639+ checkcd (t);
3640+ }
3641+ __builtin_va_end (ap);
3642+}
3643+
3644+void
3645+testitcd (void)
3646+{
3647+ struct S x = { { 7.0, 8.0 } };
3648+ testvacd (2, x, x);
3649+}
3650+
3651+int
3652+main ()
3653+{
3654+ testitcd ();
3655+ return 0;
3656+}
3657
3658=== added file 'gcc/testsuite/gcc.dg/pr46521.c'
3659--- gcc/testsuite/gcc.dg/pr46521.c 1970-01-01 00:00:00 +0000
3660+++ gcc/testsuite/gcc.dg/pr46521.c 2011-04-28 16:44:05 +0000
3661@@ -0,0 +1,20 @@
3662+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3663+/* { dg-options "-Os -fselective-scheduling2 -fsel-sched-pipelining -fprofile-generate -fno-early-inlining" } */
3664+
3665+static void bmp_iter_next (int *bi)
3666+{
3667+ *bi >>= 1;
3668+}
3669+
3670+int bmp_iter_set (int *, int);
3671+void bitmap_clear (void);
3672+void bitmap_initialize_stat (void);
3673+
3674+void df_md_alloc (int bi, int bb_index, int bb_info)
3675+{
3676+ for (; bmp_iter_set (&bi, bb_index); bmp_iter_next (&bi))
3677+ if (bb_info)
3678+ bitmap_clear ();
3679+ else
3680+ bitmap_initialize_stat ();
3681+}
3682
3683=== added file 'gcc/testsuite/gcc.dg/pr46522.c'
3684--- gcc/testsuite/gcc.dg/pr46522.c 1970-01-01 00:00:00 +0000
3685+++ gcc/testsuite/gcc.dg/pr46522.c 2011-04-28 16:44:05 +0000
3686@@ -0,0 +1,33 @@
3687+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3688+/* { dg-options "-O3 -fkeep-inline-functions -fsel-sched-pipelining -fselective-scheduling2 -funroll-loops" } */
3689+
3690+struct S
3691+{
3692+ unsigned i, j;
3693+};
3694+
3695+static inline void
3696+bar (struct S *s)
3697+{
3698+ if (s->i++ == 1)
3699+ {
3700+ s->i = 0;
3701+ s->j++;
3702+ }
3703+}
3704+
3705+void
3706+foo1 (struct S *s)
3707+{
3708+ bar (s);
3709+}
3710+
3711+void
3712+foo2 (struct S s1, struct S s2, int i)
3713+{
3714+ while (s1.i != s2.i) {
3715+ if (i)
3716+ *(unsigned *) 0 |= (1U << s1.i);
3717+ bar (&s1);
3718+ }
3719+}
3720
3721=== added file 'gcc/testsuite/gcc.dg/pr46585.c'
3722--- gcc/testsuite/gcc.dg/pr46585.c 1970-01-01 00:00:00 +0000
3723+++ gcc/testsuite/gcc.dg/pr46585.c 2011-04-28 16:44:05 +0000
3724@@ -0,0 +1,11 @@
3725+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
3726+/* { dg-options "-fno-dce -fschedule-insns -fselective-scheduling" } */
3727+void
3728+foo (void)
3729+{
3730+ switch (0)
3731+ {
3732+ default:
3733+ break;
3734+ }
3735+}
3736
3737=== added file 'gcc/testsuite/gcc.dg/pr46875.c'
3738--- gcc/testsuite/gcc.dg/pr46875.c 1970-01-01 00:00:00 +0000
3739+++ gcc/testsuite/gcc.dg/pr46875.c 2011-04-28 16:44:05 +0000
3740@@ -0,0 +1,27 @@
3741+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3742+/* { dg-options "-Os -fselective-scheduling2" } */
3743+
3744+long
3745+foo (int x, long *y)
3746+{
3747+ long a = 0;
3748+ switch (x)
3749+ {
3750+ case 0:
3751+ a = *y;
3752+ break;
3753+ case 1:
3754+ a = *y;
3755+ break;
3756+ case 2:
3757+ a = *y;
3758+ break;
3759+ case 3:
3760+ a = *y;
3761+ break;
3762+ case 4:
3763+ a = *y;
3764+ break;
3765+ }
3766+ return a;
3767+}
3768
3769=== added file 'gcc/testsuite/gcc.dg/pr47391.c'
3770--- gcc/testsuite/gcc.dg/pr47391.c 1970-01-01 00:00:00 +0000
3771+++ gcc/testsuite/gcc.dg/pr47391.c 2011-04-28 16:44:05 +0000
3772@@ -0,0 +1,22 @@
3773+/* PR tree-optimization/47391 */
3774+/* { dg-do compile } */
3775+/* { dg-options "-O2 -fdump-tree-optimized" } */
3776+
3777+const volatile int v = 1;
3778+int i = 0;
3779+
3780+void
3781+foo (void)
3782+{
3783+ i = v;
3784+}
3785+
3786+int
3787+main (void)
3788+{
3789+ foo ();
3790+ return 0;
3791+}
3792+
3793+/* { dg-final { scan-tree-dump-not "i = 1;" "optimized" } } */
3794+/* { dg-final { cleanup-tree-dump "optimized" } } */
3795
3796=== added file 'gcc/testsuite/gcc.dg/pr47899.c'
3797--- gcc/testsuite/gcc.dg/pr47899.c 1970-01-01 00:00:00 +0000
3798+++ gcc/testsuite/gcc.dg/pr47899.c 2011-04-28 16:44:05 +0000
3799@@ -0,0 +1,26 @@
3800+/* PR rtl-optimization/47899 */
3801+/* { dg-do compile } */
3802+/* { dg-options "-O -funroll-loops" } */
3803+
3804+extern unsigned int a, b, c;
3805+extern int d;
3806+
3807+static int
3808+foo (void)
3809+{
3810+lab:
3811+ if (b)
3812+ for (d = 0; d >= 0; d--)
3813+ if (a || c)
3814+ for (; c; c++)
3815+ ;
3816+ else
3817+ goto lab;
3818+}
3819+
3820+int
3821+main ()
3822+{
3823+ foo ();
3824+ return 0;
3825+}
3826
3827=== added file 'gcc/testsuite/gcc.dg/pr48141.c'
3828--- gcc/testsuite/gcc.dg/pr48141.c 1970-01-01 00:00:00 +0000
3829+++ gcc/testsuite/gcc.dg/pr48141.c 2011-04-28 16:44:05 +0000
3830@@ -0,0 +1,17 @@
3831+/* PR rtl-optimization/48141 */
3832+/* { dg-do compile } */
3833+/* { dg-options "-O -fno-tree-fre" } */
3834+
3835+#define A i = 0;
3836+#define B A A A A A A A A A A
3837+#define C B B B B B B B B B B
3838+#define D C C C C C C C C C C
3839+#define E D D D D D D D D D D
3840+
3841+int
3842+foo (void)
3843+{
3844+ volatile int i = 0;
3845+ E E E E E E E E E E E
3846+ return 0;
3847+}
3848
3849=== added file 'gcc/testsuite/gcc.dg/pr48144.c'
3850--- gcc/testsuite/gcc.dg/pr48144.c 1970-01-01 00:00:00 +0000
3851+++ gcc/testsuite/gcc.dg/pr48144.c 2011-04-28 16:44:05 +0000
3852@@ -0,0 +1,16 @@
3853+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
3854+/* { dg-options "-O -frerun-cse-after-loop -fschedule-insns2 -fselective-scheduling2 -fno-tree-ch -funroll-loops --param=max-sched-extend-regions-iters=2 --param=max-sched-region-blocks=15" } */
3855+extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n);
3856+
3857+void bar (void *, void *, void *);
3858+
3859+void foo
3860+ (void *p, char *data, unsigned data_len)
3861+{
3862+ int buffer[8];
3863+ int buf2[8];
3864+ unsigned i;
3865+ for (i = 0; i + 8 <= data_len; i += 8)
3866+ bar (p, buffer, data + i);
3867+ memcpy (buf2, data + i, data_len);
3868+}
3869
3870=== added file 'gcc/testsuite/gcc.dg/torture/pr47473.c'
3871--- gcc/testsuite/gcc.dg/torture/pr47473.c 1970-01-01 00:00:00 +0000
3872+++ gcc/testsuite/gcc.dg/torture/pr47473.c 2011-04-28 16:44:05 +0000
3873@@ -0,0 +1,14 @@
3874+/* PR c/47473 */
3875+/* { dg-do run } */
3876+/* { dg-options "-std=c99" } */
3877+
3878+int
3879+main (void)
3880+{
3881+ long double _Complex w = 0.2L - 0.3iL;
3882+ w = w * (0.3L - (0.0F + 1.0iF) * 0.9L);
3883+ if (__builtin_fabsl (__real__ w + 0.21L) > 0.001L
3884+ || __builtin_fabsl (__imag__ w + 0.27L) > 0.001L)
3885+ __builtin_abort ();
3886+ return 0;
3887+}
3888
3889=== added file 'gcc/testsuite/gcc.dg/tree-prof/pr45354.c'
3890--- gcc/testsuite/gcc.dg/tree-prof/pr45354.c 1970-01-01 00:00:00 +0000
3891+++ gcc/testsuite/gcc.dg/tree-prof/pr45354.c 2011-04-28 16:44:05 +0000
3892@@ -0,0 +1,43 @@
3893+/* { dg-require-effective-target freorder } */
3894+/* { dg-options "-O -freorder-blocks-and-partition -fschedule-insns -fselective-scheduling" { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
3895+
3896+extern void abort (void);
3897+
3898+int ifelse_val2;
3899+
3900+int __attribute__((noinline))
3901+test_ifelse2 (int i)
3902+{
3903+ int result = 0;
3904+ if (!i) /* count(6) */
3905+ result = 1; /* count(1) */
3906+ if (i == 1) /* count(6) */
3907+ result = 1024;
3908+ if (i == 2) /* count(6) */
3909+ result = 2; /* count(3) */
3910+ if (i == 3) /* count(6) */
3911+ return 8; /* count(2) */
3912+ if (i == 4) /* count(4) */
3913+ return 2048;
3914+ return result; /* count(4) */
3915+}
3916+
3917+void __attribute__((noinline))
3918+call_ifelse ()
3919+{
3920+ ifelse_val2 += test_ifelse2 (0);
3921+ ifelse_val2 += test_ifelse2 (2);
3922+ ifelse_val2 += test_ifelse2 (2);
3923+ ifelse_val2 += test_ifelse2 (2);
3924+ ifelse_val2 += test_ifelse2 (3);
3925+ ifelse_val2 += test_ifelse2 (3);
3926+}
3927+
3928+int
3929+main()
3930+{
3931+ call_ifelse ();
3932+ if (ifelse_val2 != 23)
3933+ abort ();
3934+ return 0;
3935+}
3936
3937=== modified file 'gcc/testsuite/gcc.dg/ucnid-10.c'
3938--- gcc/testsuite/gcc.dg/ucnid-10.c 2009-05-04 19:24:22 +0000
3939+++ gcc/testsuite/gcc.dg/ucnid-10.c 2011-04-28 16:44:05 +0000
3940@@ -2,6 +2,7 @@
3941 locale). Test #pragma pack diagnostics. */
3942 /* { dg-do compile { target *-*-linux* *-*-cygwin* powerpc*-*-eabi* } } */
3943 /* { dg-options "-std=gnu99 -fextended-identifiers" } */
3944+/* { dg-require-ascii-locale "" } */
3945
3946 #pragma pack(push)
3947 #pragma pack(pop, \u00f3) /* { dg-warning "pop, \\\\U000000f3.*push, \\\\U000000f3" } */
3948
3949=== modified file 'gcc/testsuite/gcc.dg/ucnid-13.c'
3950--- gcc/testsuite/gcc.dg/ucnid-13.c 2009-05-04 22:44:36 +0000
3951+++ gcc/testsuite/gcc.dg/ucnid-13.c 2011-04-28 16:44:05 +0000
3952@@ -2,6 +2,7 @@
3953 locale). Miscellaneous diagnostics. */
3954 /* { dg-do compile } */
3955 /* { dg-options "-std=gnu99 -fextended-identifiers -Wpacked" } */
3956+/* { dg-require-ascii-locale "" } */
3957
3958 int a __attribute__((\u00c0)); /* { dg-warning "'\\\\U000000c0' attribute directive ignored" } */
3959
3960
3961=== modified file 'gcc/testsuite/gcc.dg/ucnid-7.c'
3962--- gcc/testsuite/gcc.dg/ucnid-7.c 2009-05-04 11:23:50 +0000
3963+++ gcc/testsuite/gcc.dg/ucnid-7.c 2011-04-28 16:44:05 +0000
3964@@ -2,6 +2,7 @@
3965 locale). */
3966 /* { dg-do compile } */
3967 /* { dg-options "-std=c99 -fextended-identifiers" } */
3968+/* { dg-require-ascii-locale "" } */
3969
3970 void *p = &\u00e9; /* { dg-error "'\\\\U000000e9' undeclared" } */
3971 void *q = &\u1e00; /* { dg-error "'\\\\U00001e00' undeclared" } */
3972
3973=== modified file 'gcc/testsuite/gcc.dg/ucnid-8.c'
3974--- gcc/testsuite/gcc.dg/ucnid-8.c 2009-05-04 19:24:22 +0000
3975+++ gcc/testsuite/gcc.dg/ucnid-8.c 2011-04-28 16:44:05 +0000
3976@@ -2,6 +2,7 @@
3977 locale). Further tests of C front-end diagnostics. */
3978 /* { dg-do compile } */
3979 /* { dg-options "-std=gnu99 -fextended-identifiers -Wvla" } */
3980+/* { dg-require-ascii-locale "" } */
3981
3982 int a __attribute__((__mode__(\u00e9))); /* { dg-error "unknown machine mode '\\\\U000000e9'" } */
3983 struct s1 { int \u00e9 : 0; }; /* { dg-error "zero width for bit-field '\\\\U000000e9'" } */
3984@@ -11,4 +12,4 @@
3985 void g (static int \u00e9); /* { dg-error "storage class specified for parameter '\\\\U000000e9'" } */
3986
3987 struct s2 { int \u00e1; } \u00e9 = { { 0 } }; /* { dg-warning "braces around scalar initializer" } */
3988-/* { dg-warning "near initialization for '\\\\U000000e9\\.\\\\U000000e1'" "UCN diag" { target *-*-* } 13 } */
3989+/* { dg-warning "near initialization for '\\\\U000000e9\\.\\\\U000000e1'" "UCN diag" { target *-*-* } 14 } */
3990
3991=== added file 'gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c'
3992--- gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c 1970-01-01 00:00:00 +0000
3993+++ gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c 2011-04-28 16:44:05 +0000
3994@@ -0,0 +1,8 @@
3995+/* { dg-do run { target ilp32 } } */
3996+/* { dg-require-effective-target avx } */
3997+/* { dg-options "-O2 -mfpmath=sse -mavx -mtune=geode" } */
3998+
3999+#define CHECK_H "avx-check.h"
4000+#define TEST avx_test
4001+
4002+#include "sse4_1-insertps-3.c"
4003
4004=== added file 'gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c'
4005--- gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c 1970-01-01 00:00:00 +0000
4006+++ gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c 2011-04-28 16:44:05 +0000
4007@@ -0,0 +1,8 @@
4008+/* { dg-do run } */
4009+/* { dg-require-effective-target avx } */
4010+/* { dg-options "-O2 -mfpmath=sse -mavx" } */
4011+
4012+#define CHECK_H "avx-check.h"
4013+#define TEST avx_test
4014+
4015+#include "sse4_1-insertps-4.c"
4016
4017=== added file 'gcc/testsuite/gcc.target/i386/pr45352-1.c'
4018--- gcc/testsuite/gcc.target/i386/pr45352-1.c 1970-01-01 00:00:00 +0000
4019+++ gcc/testsuite/gcc.target/i386/pr45352-1.c 2011-04-28 16:44:05 +0000
4020@@ -0,0 +1,19 @@
4021+/* { dg-do compile } */
4022+/* { dg-options "-mtune=amdfam10 -O3 -fpeel-loops -fselective-scheduling2 -fsel-sched-pipelining -fPIC" } */
4023+
4024+static int FIR_Tab_16[16][16];
4025+
4026+void
4027+V_Pass_Avrg_16_C_ref (int *Dst, int *Src, int W, int BpS, int Rnd)
4028+{
4029+ while (W-- > 0)
4030+ {
4031+ int i, k;
4032+ int Sums[16] = { };
4033+ for (i = 0; i < 16; ++i)
4034+ for (k = 0; k < 16; ++k)
4035+ Sums[k] += FIR_Tab_16[i][k] * Src[i];
4036+ for (i = 0; i < 16; ++i)
4037+ Dst[i] = Sums[i] + Src[i];
4038+ }
4039+}
4040
4041=== added file 'gcc/testsuite/gcc.target/i386/pr45352-2.c'
4042--- gcc/testsuite/gcc.target/i386/pr45352-2.c 1970-01-01 00:00:00 +0000
4043+++ gcc/testsuite/gcc.target/i386/pr45352-2.c 2011-04-28 16:44:05 +0000
4044@@ -0,0 +1,109 @@
4045+/* { dg-do compile } */
4046+/* { dg-options "-O1 -mtune=amdfam10 -fexpensive-optimizations -fgcse -foptimize-register-move -freorder-blocks -fschedule-insns2 -funswitch-loops -fgcse-las -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
4047+
4048+typedef char uint8_t;
4049+typedef uint32_t;
4050+typedef vo_frame_t;
4051+struct vo_frame_s
4052+{
4053+ uint8_t base[3];
4054+ int pitches[3];};
4055+typedef struct
4056+{
4057+void
4058+ (*proc_macro_block)
4059+ (void);
4060+}
4061+xine_xvmc_t;
4062+typedef struct
4063+{
4064+ uint8_t ref[2][3];
4065+int pmv;
4066+}
4067+motion_t;
4068+typedef struct
4069+{
4070+ uint32_t bitstream_buf;
4071+ int bitstream_bits;
4072+ uint8_t * bitstream_ptr;
4073+ uint8_t dest[3];
4074+ int pitches[3];
4075+ int offset;
4076+ motion_t b_motion;
4077+ motion_t f_motion;
4078+ int v_offset;
4079+ int coded_picture_width;
4080+ int picture_structure;
4081+struct vo_frame_s *current_frame;}
4082+picture_t;
4083+typedef struct
4084+{
4085+int xvmc_last_slice_code;}
4086+mpeg2dec_accel_t;
4087+static int bitstream_init (picture_t * picture, void *start)
4088+{
4089+ picture->bitstream_ptr = start;
4090+ return (int) (long) start;
4091+}
4092+static slice_xvmc_init (picture_t * picture, int code)
4093+{
4094+ int offset;
4095+ struct vo_frame_s *forward_reference_frame;
4096+ offset = picture->picture_structure == 2;
4097+ picture->pitches[0] = picture->current_frame->pitches[0];
4098+ picture->pitches[1] = picture->current_frame->pitches[1];
4099+ if (picture)
4100+ picture->f_motion.ref
4101+ [0]
4102+ [0]
4103+ = (char) (long) (forward_reference_frame->base + (offset ? picture->pitches[0] : 0));
4104+ picture->f_motion.ref[0][1] = (offset);
4105+ if (picture->picture_structure)
4106+ picture->pitches[0] <<= picture->pitches[1] <<= 1;
4107+ offset = 0;
4108+ while (1)
4109+ {
4110+ if (picture->bitstream_buf >= 0x08000000)
4111+ break;
4112+ switch (picture->bitstream_buf >> 12)
4113+ {
4114+ case 8:
4115+ offset += 33;
4116+ picture->bitstream_buf
4117+ |=
4118+ picture->bitstream_ptr[1] << picture->bitstream_bits;
4119+ }
4120+ }
4121+ picture->offset = (offset);
4122+ while (picture->offset - picture->coded_picture_width >= 0)
4123+ {
4124+ picture->offset -= picture->coded_picture_width;
4125+ if (picture->current_frame)
4126+ {
4127+ picture->dest[0] += picture->pitches[0];
4128+ picture->dest[1] += picture->pitches[1];
4129+ }
4130+ picture->v_offset += 16;
4131+ }
4132+}
4133+
4134+void
4135+mpeg2_xvmc_slice
4136+ (mpeg2dec_accel_t * accel, picture_t * picture, int code, uint8_t buffer,int mba_inc)
4137+{
4138+ xine_xvmc_t * xvmc = (xine_xvmc_t *) (long) bitstream_init (picture, (void *) (long) buffer);
4139+ slice_xvmc_init (picture, code);
4140+ while (1)
4141+ {
4142+ if (picture)
4143+ break;
4144+ switch (picture->bitstream_buf)
4145+ {
4146+ case 8:
4147+ mba_inc += accel->xvmc_last_slice_code = code;
4148+ xvmc->proc_macro_block ();
4149+ while (mba_inc)
4150+ ;
4151+ }
4152+ }
4153+}
4154
4155=== added file 'gcc/testsuite/gcc.target/i386/pr45352.c'
4156--- gcc/testsuite/gcc.target/i386/pr45352.c 1970-01-01 00:00:00 +0000
4157+++ gcc/testsuite/gcc.target/i386/pr45352.c 2011-04-28 16:44:05 +0000
4158@@ -0,0 +1,25 @@
4159+/* { dg-do compile } */
4160+/* { dg-options "-O3 -march=amdfam10 -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" } */
4161+
4162+struct S
4163+{
4164+ struct
4165+ {
4166+ int i;
4167+ } **p;
4168+ int x;
4169+ int y;
4170+};
4171+
4172+extern int baz (void);
4173+extern int bar (void *, int, int);
4174+
4175+void
4176+foo (struct S *s)
4177+{
4178+ int i;
4179+ for (i = 0; i < s->x; i++)
4180+ bar (s->p[i], baz (), s->y);
4181+ for (i = 0; i < s->x; i++)
4182+ s->p[i]->i++;
4183+}
4184
4185=== added file 'gcc/testsuite/gcc.target/i386/pr47809.c'
4186--- gcc/testsuite/gcc.target/i386/pr47809.c 1970-01-01 00:00:00 +0000
4187+++ gcc/testsuite/gcc.target/i386/pr47809.c 2011-04-28 16:44:05 +0000
4188@@ -0,0 +1,13 @@
4189+/* PR c/47809 */
4190+/* { dg-do compile } */
4191+/* { dg-options "-O2 -msse2" } */
4192+
4193+#include <emmintrin.h>
4194+double bar (double, double);
4195+
4196+__m128d
4197+foo (__m128d x)
4198+{
4199+ x *= (__m128d) { bar (1.0, 1.0), 0.0 };
4200+ return (__m128d) ((__m128i) x ^ (__m128i) { 0, 0});
4201+}
4202
4203=== added file 'gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c'
4204--- gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c 1970-01-01 00:00:00 +0000
4205+++ gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c 2011-04-28 16:44:05 +0000
4206@@ -0,0 +1,5 @@
4207+/* { dg-do run { target ilp32 } } */
4208+/* { dg-require-effective-target sse4 } */
4209+/* { dg-options "-O2 -msse4.1 -mtune=geode" } */
4210+
4211+#include "sse4_1-insertps-2.c"
4212
4213=== added file 'gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c'
4214--- gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c 1970-01-01 00:00:00 +0000
4215+++ gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c 2011-04-28 16:44:05 +0000
4216@@ -0,0 +1,92 @@
4217+/* { dg-do run } */
4218+/* { dg-require-effective-target sse4 } */
4219+/* { dg-options "-O2 -msse4.1" } */
4220+
4221+#ifndef CHECK_H
4222+#define CHECK_H "sse4_1-check.h"
4223+#endif
4224+
4225+#ifndef TEST
4226+#define TEST sse4_1_test
4227+#endif
4228+
4229+#include CHECK_H
4230+
4231+#include <smmintrin.h>
4232+#include <string.h>
4233+
4234+#define msk0 0x41
4235+#define msk1 0x90
4236+#define msk2 0xe9
4237+#define msk3 0x70
4238+
4239+#define msk4 0xFC
4240+#define msk5 0x05
4241+#define msk6 0x0A
4242+#define msk7 0x0F
4243+
4244+union
4245+ {
4246+ __m128 x;
4247+ float f[4];
4248+ } val1;
4249+
4250+static void
4251+TEST (void)
4252+{
4253+ union
4254+ {
4255+ __m128 x;
4256+ float f[4];
4257+ } res[8], val2, tmp;
4258+ int masks[8];
4259+ int i, j;
4260+
4261+ val2.f[0] = 55.0;
4262+ val2.f[1] = 55.0;
4263+ val2.f[2] = 55.0;
4264+ val2.f[3] = 55.0;
4265+
4266+ val1.f[0] = 1.;
4267+ val1.f[1] = 2.;
4268+ val1.f[2] = 3.;
4269+ val1.f[3] = 4.;
4270+
4271+ asm volatile ("" : "+m" (val1));
4272+ res[0].x = _mm_insert_ps (val2.x, val1.x, msk0);
4273+ asm volatile ("" : "+m" (val1));
4274+ res[1].x = _mm_insert_ps (val2.x, val1.x, msk1);
4275+ asm volatile ("" : "+m" (val1));
4276+ res[2].x = _mm_insert_ps (val2.x, val1.x, msk2);
4277+ asm volatile ("" : "+m" (val1));
4278+ res[3].x = _mm_insert_ps (val2.x, val1.x, msk3);
4279+
4280+ masks[0] = msk0;
4281+ masks[1] = msk1;
4282+ masks[2] = msk2;
4283+ masks[3] = msk3;
4284+
4285+ for (i = 0; i < 4; i++)
4286+ {
4287+ asm volatile ("" : "+m" (val1));
4288+ res[i + 4].x = _mm_insert_ps (val2.x, val1.x, msk4);
4289+ }
4290+
4291+ masks[4] = msk4;
4292+ masks[5] = msk4;
4293+ masks[6] = msk4;
4294+ masks[7] = msk4;
4295+
4296+ for (i=0; i < 8; i++)
4297+ {
4298+ tmp = val2;
4299+ tmp.f[(masks[i] & 0x30) >> 4] = val1.f[(masks[i] & 0xC0) >> 6];
4300+
4301+ for (j = 0; j < 4; j++)
4302+ if (masks[i] & (0x1 << j))
4303+ tmp.f[j] = 0.f;
4304+
4305+ if (memcmp (&res[i], &tmp, sizeof (tmp)))
4306+ abort ();
4307+ }
4308+}
4309
4310=== added file 'gcc/testsuite/gcc.target/ia64/pr43603.c'
4311--- gcc/testsuite/gcc.target/ia64/pr43603.c 1970-01-01 00:00:00 +0000
4312+++ gcc/testsuite/gcc.target/ia64/pr43603.c 2011-04-28 16:44:05 +0000
4313@@ -0,0 +1,39 @@
4314+/* { dg-do compile } */
4315+/* { dg-options "-O3" } */
4316+
4317+int
4318+foo( long * np, int * dp, int qn)
4319+{
4320+ int i;
4321+ int n0;
4322+ int d0;
4323+ int a;
4324+ int b;
4325+ int c;
4326+ int d;
4327+
4328+ a = 1;
4329+ b = 0;
4330+ c = 1;
4331+ d = 1;
4332+
4333+ d0 = dp[0];
4334+
4335+ for (i = qn; i >= 0; i--) {
4336+ if (bar((c == 0)) && (np[1] == d0)) {
4337+ car(np - 3, dp, 3);
4338+ } else {
4339+ __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" : "=&f" ((a)),
4340+"=f" (b) : "f" ((c)), "f" ((d)));
4341+ n0 = np[0];
4342+ if (n0 < d0)
4343+ c = 1;
4344+ else
4345+ c = 0;
4346+
4347+ }
4348+ *--np = a;
4349+ }
4350+
4351+ return 0;
4352+}
4353
4354=== added file 'gcc/testsuite/gfortran.dg/gomp/pr48117.f90'
4355--- gcc/testsuite/gfortran.dg/gomp/pr48117.f90 1970-01-01 00:00:00 +0000
4356+++ gcc/testsuite/gfortran.dg/gomp/pr48117.f90 2011-04-28 16:44:05 +0000
4357@@ -0,0 +1,11 @@
4358+! PR fortran/48117
4359+! { dg-do compile }
4360+! { dg-options "-O2 -fopenmp" }
4361+
4362+subroutine foo(x)
4363+ character(len=*), optional :: x
4364+ character(len=80) :: v
4365+ !$omp master
4366+ if (present(x)) v = adjustl(x)
4367+ !$omp end master
4368+end subroutine foo
4369
4370=== modified file 'gcc/testsuite/lib/target-supports-dg.exp'
4371--- gcc/testsuite/lib/target-supports-dg.exp 2010-05-19 15:52:49 +0000
4372+++ gcc/testsuite/lib/target-supports-dg.exp 2011-04-28 16:44:05 +0000
4373@@ -1,5 +1,5 @@
4374-# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4375-# Free Software Foundation, Inc.
4376+# Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
4377+# 2011 Free Software Foundation, Inc.
4378
4379 # This program is free software; you can redistribute it and/or modify
4380 # it under the terms of the GNU General Public License as published by
4381@@ -128,6 +128,15 @@
4382 set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
4383 }
4384
4385+# If this host does not support an ASCII locale, skip this test.
4386+
4387+proc dg-require-ascii-locale { args } {
4388+ if { ![ check_ascii_locale_available] } {
4389+ upvar dg-do-what dg-do-what
4390+ set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
4391+ }
4392+}
4393+
4394 proc dg-require-iconv { args } {
4395 if { ![ check_iconv_available ${args} ] } {
4396 upvar dg-do-what dg-do-what
4397
4398=== modified file 'gcc/testsuite/lib/target-supports.exp'
4399--- gcc/testsuite/lib/target-supports.exp 2011-02-22 11:38:56 +0000
4400+++ gcc/testsuite/lib/target-supports.exp 2011-04-28 16:44:05 +0000
4401@@ -850,6 +850,17 @@
4402 }] $libiconv]
4403 }
4404
4405+# Return 1 if an ASCII locale is supported on this host, 0 otherwise.
4406+
4407+proc check_ascii_locale_available { } {
4408+ if { ([ishost alpha*-dec-osf*] || [ishost mips-sgi-irix*]) } {
4409+ # Neither Tru64 UNIX nor IRIX support an ASCII locale.
4410+ return 0
4411+ } else {
4412+ return 1
4413+ }
4414+}
4415+
4416 # Return true if named sections are supported on this target.
4417
4418 proc check_named_sections_available { } {
4419
4420=== modified file 'gcc/tree-eh.c'
4421--- gcc/tree-eh.c 2010-10-07 13:36:18 +0000
4422+++ gcc/tree-eh.c 2011-04-28 16:44:05 +0000
4423@@ -1,5 +1,5 @@
4424 /* Exception handling semantics and decomposition for trees.
4425- Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4426+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4427 Free Software Foundation, Inc.
4428
4429 This file is part of GCC.
4430@@ -3688,6 +3688,42 @@
4431 return false;
4432 }
4433
4434+/* Return true if edge E_FIRST is part of an empty infinite loop
4435+ or leads to such a loop through a series of single successor
4436+ empty bbs. */
4437+
4438+static bool
4439+infinite_empty_loop_p (edge e_first)
4440+{
4441+ bool inf_loop = false;
4442+ edge e;
4443+
4444+ if (e_first->dest == e_first->src)
4445+ return true;
4446+
4447+ e_first->src->aux = (void *) 1;
4448+ for (e = e_first; single_succ_p (e->dest); e = single_succ_edge (e->dest))
4449+ {
4450+ gimple_stmt_iterator gsi;
4451+ if (e->dest->aux)
4452+ {
4453+ inf_loop = true;
4454+ break;
4455+ }
4456+ e->dest->aux = (void *) 1;
4457+ gsi = gsi_after_labels (e->dest);
4458+ if (!gsi_end_p (gsi) && is_gimple_debug (gsi_stmt (gsi)))
4459+ gsi_next_nondebug (&gsi);
4460+ if (!gsi_end_p (gsi))
4461+ break;
4462+ }
4463+ e_first->src->aux = NULL;
4464+ for (e = e_first; e->dest->aux; e = single_succ_edge (e->dest))
4465+ e->dest->aux = NULL;
4466+
4467+ return inf_loop;
4468+}
4469+
4470 /* Examine the block associated with LP to determine if it's an empty
4471 handler for its EH region. If so, attempt to redirect EH edges to
4472 an outer region. Return true the CFG was updated in any way. This
4473@@ -3727,7 +3763,7 @@
4474 if (gsi_end_p (gsi))
4475 {
4476 /* For the degenerate case of an infinite loop bail out. */
4477- if (e_out->dest == bb)
4478+ if (infinite_empty_loop_p (e_out))
4479 return false;
4480
4481 return cleanup_empty_eh_unsplit (bb, e_out, lp);
4482
4483=== modified file 'gcc/tree-ssa-ccp.c'
4484--- gcc/tree-ssa-ccp.c 2011-02-22 11:38:56 +0000
4485+++ gcc/tree-ssa-ccp.c 2011-04-28 16:44:05 +0000
4486@@ -277,7 +277,7 @@
4487 get_symbol_constant_value (tree sym)
4488 {
4489 if (TREE_STATIC (sym)
4490- && (TREE_READONLY (sym)
4491+ && ((TREE_READONLY (sym) && !TREE_THIS_VOLATILE (sym))
4492 || TREE_CODE (sym) == CONST_DECL))
4493 {
4494 tree val = DECL_INITIAL (sym);
4495
4496=== modified file 'gcc/tree.c'
4497--- gcc/tree.c 2011-04-06 12:29:08 +0000
4498+++ gcc/tree.c 2011-04-28 16:44:05 +0000
4499@@ -2337,6 +2337,10 @@
4500 min = TYPE_MIN_VALUE (index_type);
4501 max = TYPE_MAX_VALUE (index_type);
4502
4503+ /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
4504+ if (!max)
4505+ return error_mark_node;
4506+
4507 return (integer_zerop (min)
4508 ? max
4509 : fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
4510
4511=== modified file 'gnattools/ChangeLog'
4512--- gnattools/ChangeLog 2010-12-16 12:30:12 +0000
4513+++ gnattools/ChangeLog 2011-04-28 16:44:05 +0000
4514@@ -1,3 +1,7 @@
4515+2011-04-28 Release Manager
4516+
4517+ * GCC 4.5.3 released.
4518+
4519 2010-12-16 Release Manager
4520
4521 * GCC 4.5.2 released.
4522
4523=== modified file 'include/ChangeLog'
4524--- include/ChangeLog 2010-12-16 12:30:40 +0000
4525+++ include/ChangeLog 2011-04-28 16:44:05 +0000
4526@@ -1,3 +1,7 @@
4527+2011-04-28 Release Manager
4528+
4529+ * GCC 4.5.3 released.
4530+
4531 2010-12-16 Release Manager
4532
4533 * GCC 4.5.2 released.
4534
4535=== modified file 'intl/ChangeLog'
4536--- intl/ChangeLog 2010-12-16 12:30:17 +0000
4537+++ intl/ChangeLog 2011-04-28 16:44:05 +0000
4538@@ -1,3 +1,7 @@
4539+2011-04-28 Release Manager
4540+
4541+ * GCC 4.5.3 released.
4542+
4543 2010-12-16 Release Manager
4544
4545 * GCC 4.5.2 released.
4546
4547=== modified file 'libada/ChangeLog'
4548--- libada/ChangeLog 2010-12-16 12:31:11 +0000
4549+++ libada/ChangeLog 2011-04-28 16:44:05 +0000
4550@@ -1,3 +1,7 @@
4551+2011-04-28 Release Manager
4552+
4553+ * GCC 4.5.3 released.
4554+
4555 2010-12-16 Release Manager
4556
4557 * GCC 4.5.2 released.
4558
4559=== modified file 'libcpp/ChangeLog'
4560--- libcpp/ChangeLog 2011-03-21 20:59:02 +0000
4561+++ libcpp/ChangeLog 2011-04-28 16:44:05 +0000
4562@@ -1,3 +1,17 @@
4563+2011-04-28 Release Manager
4564+
4565+ * GCC 4.5.3 released.
4566+
4567+2011-04-26 Jakub Jelinek <jakub@redhat.com>
4568+
4569+ Backported from mainline
4570+ 2011-04-24 Jakub Jelinek <jakub@redhat.com>
4571+
4572+ PR preprocessor/48740
4573+ * lex.c (lex_raw_string): When raw string ends with
4574+ ??) followed by raw prefix and ", ensure it is preprocessed
4575+ with ??) rather than ??].
4576+
4577 2011-03-21 Michael Meissner <meissner@linux.vnet.ibm.com>
4578
4579 PR preprocessor/48192
4580
4581=== modified file 'libcpp/lex.c'
4582--- libcpp/lex.c 2010-04-06 06:02:40 +0000
4583+++ libcpp/lex.c 2011-04-28 16:44:05 +0000
4584@@ -858,7 +858,9 @@
4585 raw_prefix_len) == 0
4586 && cur[raw_prefix_len+1] == '"')
4587 {
4588- cur += raw_prefix_len+2;
4589+ BUF_APPEND (")", 1);
4590+ base++;
4591+ cur += raw_prefix_len + 2;
4592 goto break_outer_loop;
4593 }
4594 else
4595
4596=== modified file 'libcpp/po/ChangeLog'
4597--- libcpp/po/ChangeLog 2010-12-16 12:31:00 +0000
4598+++ libcpp/po/ChangeLog 2011-04-28 16:44:05 +0000
4599@@ -1,3 +1,7 @@
4600+2011-04-28 Release Manager
4601+
4602+ * GCC 4.5.3 released.
4603+
4604 2010-12-16 Release Manager
4605
4606 * GCC 4.5.2 released.
4607
4608=== modified file 'libdecnumber/ChangeLog'
4609--- libdecnumber/ChangeLog 2010-12-16 12:29:40 +0000
4610+++ libdecnumber/ChangeLog 2011-04-28 16:44:05 +0000
4611@@ -1,3 +1,7 @@
4612+2011-04-28 Release Manager
4613+
4614+ * GCC 4.5.3 released.
4615+
4616 2010-12-16 Release Manager
4617
4618 * GCC 4.5.2 released.
4619
4620=== modified file 'libffi/ChangeLog'
4621--- libffi/ChangeLog 2011-02-09 14:40:15 +0000
4622+++ libffi/ChangeLog 2011-04-28 16:44:05 +0000
4623@@ -1,3 +1,7 @@
4624+2011-04-28 Release Manager
4625+
4626+ * GCC 4.5.3 released.
4627+
4628 2011-02-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4629
4630 PR libffi/46661
4631
4632=== modified file 'libgcc/ChangeLog'
4633--- libgcc/ChangeLog 2011-02-23 18:06:29 +0000
4634+++ libgcc/ChangeLog 2011-04-28 16:44:05 +0000
4635@@ -1,3 +1,7 @@
4636+2011-04-28 Release Manager
4637+
4638+ * GCC 4.5.3 released.
4639+
4640 2011-02-23 Nathan Froyd <froydnj@codesourcery.com>
4641
4642 PR target/43810
4643
4644=== modified file 'libgcc/config/libbid/ChangeLog'
4645--- libgcc/config/libbid/ChangeLog 2010-12-16 12:32:07 +0000
4646+++ libgcc/config/libbid/ChangeLog 2011-04-28 16:44:05 +0000
4647@@ -1,3 +1,7 @@
4648+2011-04-28 Release Manager
4649+
4650+ * GCC 4.5.3 released.
4651+
4652 2010-12-16 Release Manager
4653
4654 * GCC 4.5.2 released.
4655
4656=== modified file 'libgfortran/ChangeLog'
4657--- libgfortran/ChangeLog 2011-03-13 20:57:49 +0000
4658+++ libgfortran/ChangeLog 2011-04-28 16:44:05 +0000
4659@@ -1,3 +1,7 @@
4660+2011-04-28 Release Manager
4661+
4662+ * GCC 4.5.3 released.
4663+
4664 2011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
4665
4666 PR libfortran/48066
4667
4668=== modified file 'libgomp/ChangeLog'
4669--- libgomp/ChangeLog 2011-02-27 18:12:41 +0000
4670+++ libgomp/ChangeLog 2011-04-28 16:44:05 +0000
4671@@ -1,3 +1,7 @@
4672+2011-04-28 Release Manager
4673+
4674+ * GCC 4.5.3 released.
4675+
4676 2011-02-27 Tobias Burnus <burnus@net-b.de>
4677
4678 Backport from mainline
4679
4680=== modified file 'libiberty/ChangeLog'
4681--- libiberty/ChangeLog 2010-12-16 12:31:47 +0000
4682+++ libiberty/ChangeLog 2011-04-28 16:44:05 +0000
4683@@ -1,3 +1,7 @@
4684+2011-04-28 Release Manager
4685+
4686+ * GCC 4.5.3 released.
4687+
4688 2010-12-16 Release Manager
4689
4690 * GCC 4.5.2 released.
4691
4692=== modified file 'libjava/ChangeLog'
4693--- libjava/ChangeLog 2011-01-07 15:32:24 +0000
4694+++ libjava/ChangeLog 2011-04-28 16:44:05 +0000
4695@@ -1,3 +1,12 @@
4696+2011-04-28 Release Manager
4697+
4698+ * GCC 4.5.3 released.
4699+
4700+2011-04-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4701+
4702+ * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation):
4703+ Add $libiconv to cxxflags for alpha*-dec-osf*.
4704+
4705 2011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4706
4707 Backport from mainline:
4708
4709=== modified file 'libjava/classpath/ChangeLog'
4710--- libjava/classpath/ChangeLog 2010-12-16 12:31:21 +0000
4711+++ libjava/classpath/ChangeLog 2011-04-28 16:44:05 +0000
4712@@ -1,3 +1,7 @@
4713+2011-04-28 Release Manager
4714+
4715+ * GCC 4.5.3 released.
4716+
4717 2010-12-16 Release Manager
4718
4719 * GCC 4.5.2 released.
4720
4721=== modified file 'libjava/libltdl/ChangeLog'
4722--- libjava/libltdl/ChangeLog 2010-12-16 12:31:26 +0000
4723+++ libjava/libltdl/ChangeLog 2011-04-28 16:44:05 +0000
4724@@ -1,3 +1,7 @@
4725+2011-04-28 Release Manager
4726+
4727+ * GCC 4.5.3 released.
4728+
4729 2010-12-16 Release Manager
4730
4731 * GCC 4.5.2 released.
4732
4733=== modified file 'libjava/testsuite/libjava.jni/jni.exp'
4734--- libjava/testsuite/libjava.jni/jni.exp 2011-01-07 15:32:24 +0000
4735+++ libjava/testsuite/libjava.jni/jni.exp 2011-04-28 16:44:05 +0000
4736@@ -280,6 +280,11 @@
4737 lappend cxxflags "-shared-libgcc"
4738 }
4739
4740+ # Tru64 UNIX needs -liconv linked explicitly since gcc does the linking.
4741+ if { [istarget "alpha*-dec-osf*"] } {
4742+ lappend cxxflags $libiconv
4743+ }
4744+
4745 return $cxxflags
4746 }
4747
4748
4749=== modified file 'libmudflap/ChangeLog'
4750--- libmudflap/ChangeLog 2010-12-16 12:31:51 +0000
4751+++ libmudflap/ChangeLog 2011-04-28 16:44:05 +0000
4752@@ -1,3 +1,7 @@
4753+2011-04-28 Release Manager
4754+
4755+ * GCC 4.5.3 released.
4756+
4757 2010-12-16 Release Manager
4758
4759 * GCC 4.5.2 released.
4760
4761=== modified file 'libobjc/ChangeLog'
4762--- libobjc/ChangeLog 2010-12-16 12:30:34 +0000
4763+++ libobjc/ChangeLog 2011-04-28 16:44:05 +0000
4764@@ -1,3 +1,7 @@
4765+2011-04-28 Release Manager
4766+
4767+ * GCC 4.5.3 released.
4768+
4769 2010-12-16 Release Manager
4770
4771 * GCC 4.5.2 released.
4772
4773=== modified file 'libssp/ChangeLog'
4774--- libssp/ChangeLog 2010-12-16 12:31:57 +0000
4775+++ libssp/ChangeLog 2011-04-28 16:44:05 +0000
4776@@ -1,3 +1,7 @@
4777+2011-04-28 Release Manager
4778+
4779+ * GCC 4.5.3 released.
4780+
4781 2010-12-16 Release Manager
4782
4783 * GCC 4.5.2 released.
4784
4785=== modified file 'libstdc++-v3/ChangeLog'
4786--- libstdc++-v3/ChangeLog 2011-03-21 13:41:37 +0000
4787+++ libstdc++-v3/ChangeLog 2011-04-28 16:44:05 +0000
4788@@ -1,3 +1,7 @@
4789+2011-04-28 Release Manager
4790+
4791+ * GCC 4.5.3 released.
4792+
4793 2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4794
4795 * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on
4796
4797=== modified file 'lto-plugin/ChangeLog'
4798--- lto-plugin/ChangeLog 2010-12-16 12:31:31 +0000
4799+++ lto-plugin/ChangeLog 2011-04-28 16:44:05 +0000
4800@@ -1,3 +1,7 @@
4801+2011-04-28 Release Manager
4802+
4803+ * GCC 4.5.3 released.
4804+
4805 2010-12-16 Release Manager
4806
4807 * GCC 4.5.2 released.
4808
4809=== modified file 'maintainer-scripts/ChangeLog'
4810--- maintainer-scripts/ChangeLog 2010-12-16 12:30:27 +0000
4811+++ maintainer-scripts/ChangeLog 2011-04-28 16:44:05 +0000
4812@@ -1,3 +1,7 @@
4813+2011-04-28 Release Manager
4814+
4815+ * GCC 4.5.3 released.
4816+
4817 2010-12-16 Release Manager
4818
4819 * GCC 4.5.2 released.
4820
4821=== modified file 'zlib/ChangeLog'
4822--- zlib/ChangeLog 2010-12-16 12:31:36 +0000
4823+++ zlib/ChangeLog 2011-04-28 16:44:05 +0000
4824@@ -1,3 +1,7 @@
4825+2011-04-28 Release Manager
4826+
4827+ * GCC 4.5.3 released.
4828+
4829 2010-12-16 Release Manager
4830
4831 * GCC 4.5.2 released.

Subscribers

People subscribed via source and target branches