]> git.pld-linux.org Git - packages/gcc.git/blob - gcc-branch.diff
- rel 2; disable mozilla bcond until it's fixed
[packages/gcc.git] / gcc-branch.diff
1 Index: libgomp/ChangeLog
2 ===================================================================
3 --- libgomp/ChangeLog   (.../tags/gcc_4_4_3_release)    (wersja 156526)
4 +++ libgomp/ChangeLog   (.../branches/gcc-4_4-branch)   (wersja 156526)
5 @@ -1,3 +1,8 @@
6 +2010-01-26  Jakub Jelinek  <jakub@redhat.com>
7 +
8 +       PR fortran/42866
9 +       * testsuite/libgomp.fortran/allocatable5.f90: New test.
10 +
11  2010-01-21  Release Manager
12  
13         * GCC 4.4.3 released.
14 Index: libgomp/testsuite/libgomp.fortran/allocatable5.f90
15 ===================================================================
16 --- libgomp/testsuite/libgomp.fortran/allocatable5.f90  (.../tags/gcc_4_4_3_release)    (wersja 0)
17 +++ libgomp/testsuite/libgomp.fortran/allocatable5.f90  (.../branches/gcc-4_4-branch)   (wersja 156526)
18 @@ -0,0 +1,17 @@
19 +! PR fortran/42866
20 +! { dg-do run }
21 +
22 +program pr42866
23 +  integer, allocatable :: a(:)
24 +  allocate (a(16))
25 +  a = 0
26 +  !$omp parallel
27 +    !$omp sections reduction(+:a)
28 +      a = a + 1
29 +    !$omp section
30 +      a = a + 2
31 +    !$omp end sections
32 +  !$omp end parallel
33 +  if (any (a.ne.3)) call abort
34 +  deallocate (a)
35 +end
36 Index: gcc/DATESTAMP
37 ===================================================================
38 --- gcc/DATESTAMP       (.../tags/gcc_4_4_3_release)    (wersja 156526)
39 +++ gcc/DATESTAMP       (.../branches/gcc-4_4-branch)   (wersja 156526)
40 @@ -1 +1 @@
41 -20100121
42 +20100205
43 Index: gcc/omp-low.c
44 ===================================================================
45 --- gcc/omp-low.c       (.../tags/gcc_4_4_3_release)    (wersja 156526)
46 +++ gcc/omp-low.c       (.../branches/gcc-4_4-branch)   (wersja 156526)
47 @@ -4606,7 +4606,7 @@
48    l2_bb = region->exit;
49    if (exit_reachable)
50      {
51 -      if (single_pred (l2_bb) == l0_bb)
52 +      if (single_pred_p (l2_bb) && single_pred (l2_bb) == l0_bb)
53         l2 = gimple_block_label (l2_bb);
54        else
55         {
56 Index: gcc/DEV-PHASE
57 ===================================================================
58 --- gcc/DEV-PHASE       (.../tags/gcc_4_4_3_release)    (wersja 156526)
59 +++ gcc/DEV-PHASE       (.../branches/gcc-4_4-branch)   (wersja 156526)
60 @@ -0,0 +1 @@
61 +prerelease
62 Index: gcc/ChangeLog
63 ===================================================================
64 --- gcc/ChangeLog       (.../tags/gcc_4_4_3_release)    (wersja 156526)
65 +++ gcc/ChangeLog       (.../branches/gcc-4_4-branch)   (wersja 156526)
66 @@ -1,3 +1,76 @@
67 +2010-02-04  Richard Guenther  <rguenther@suse.de>
68 +
69 +       PR rtl-optimization/42952
70 +       * dse.c (const_or_frame_p): Remove MEM handling.
71 +
72 +2010-01-31  Eric Botcazou  <ebotcazou@adacore.com>
73 +
74 +       PR middle-end/42898
75 +       Backport from mainline:
76 +       2009-04-23  Eric Botcazou  <ebotcazou@adacore.com>
77 +
78 +       * gimplify.c (gimplify_modify_expr_rhs) <VAR_DECL>: Do not do a direct
79 +       assignment from the constructor either if the target is volatile.
80 +
81 +2010-01-31  Richard Guenther  <rguenther@suse.de>
82 +
83 +       PR middle-end/42898
84 +       * gimplify.c (gimplify_init_constructor): For volatile LHS
85 +       initialize a temporary.
86 +
87 +2010-01-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
88 +
89 +       * config/sparc/sparc.c (sparc_elf_asm_named_section): Test for
90 +       HAVE_GNU_AS value.
91 +       * config/sparc/sysv4.h [HAVE_GNU_AS] (TARGET_ASM_NAMED_SECTION):
92 +       Test for HAVE_GNU_AS value.
93 +
94 +2010-01-26  Jakub Jelinek  <jakub@redhat.com>
95 +
96 +       PR fortran/42866
97 +       * omp-low.c (expand_omp_sections): Only use single_pred if
98 +       l2_bb is single_pred_p.
99 +
100 +2010-01-25  Christian Bruel  <christian.bruel@st.com>
101 +
102 +       PR target/42841
103 +       * config/sh/sh.c (find_barrier): Increase length for non delayed
104 +       conditional branches.
105 +       (sh_insn_length_adjustment): Use JUMP_TABLE_DATA_P.
106 +       
107 +2010-01-25  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
108 +
109 +       Backport from trunk.
110 +       2010-01-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
111 +
112 +       PR target/38697
113 +       * config/arm/neon-testgen.m (emit_automatics): New parameter
114 +       features. Adjust for Fixed_return_reg feature.
115 +       (test_intrinsic): Call emit_automatics with new feature.
116 +       * config/arm/neon.ml: Update copyright years.
117 +       (features): New Fixed_return_reg feature.
118 +       (ops): Update feature for Vget_low.
119 +
120 +2010-01-24  David S. Miller  <davem@davemloft.net>
121 +
122 +       * config/sparc/sysv4.h (TARGET_ASM_NAMED_SECTION): Only
123 +       define if not using GAS.
124 +       * config/sparc/sparc.c (sparc_elf_asm_named_section):
125 +       Likewise.  Delete SECTION_MERGE code, which is only applicable
126 +       when using GAS.
127 +
128 +2010-01-21  Felyza Wishbringer  <fwishbringer@gmail.com>
129 +
130 +       PR bootstrap/42786
131 +       * config.gcc (i[34567]86-*-*): Fix handling of athlon64 and athlon-fx
132 +       cpu types.  Add support for *-sse3 cpu types.
133 +       (x86_64-*-*): Ditto.
134 +
135 +2010-01-21  Jakub Jelinek  <jakub@redhat.com>
136 +
137 +       * BASE-VER: Set to 4.4.4.
138 +       * DEV-PHASE: Set to prerelease.
139 +
140  2010-01-21  Release Manager
141  
142         * GCC 4.4.3 released.
143 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
144 ===================================================================
145 --- gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c      (.../tags/gcc_4_4_3_release)    (wersja 156526)
146 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c      (.../branches/gcc-4_4-branch)   (wersja 156526)
147 @@ -9,7 +9,7 @@
148  
149  void test_vget_lowp8 (void)
150  {
151 -  poly8x8_t out_poly8x8_t;
152 +  register poly8x8_t out_poly8x8_t asm ("d18");
153    poly8x16_t arg0_poly8x16_t;
154  
155    out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t);
156 Index: gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
157 ===================================================================
158 --- gcc/testsuite/gcc.target/arm/neon/vget_lows64.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
159 +++ gcc/testsuite/gcc.target/arm/neon/vget_lows64.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
160 @@ -15,5 +15,4 @@
161    out_int64x1_t = vget_low_s64 (arg0_int64x2_t);
162  }
163  
164 -/* { dg-final { scan-assembler "vmov\[         \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[         \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
165  /* { dg-final { cleanup-saved-temps } } */
166 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
167 ===================================================================
168 --- gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
169 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
170 @@ -15,5 +15,4 @@
171    out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t);
172  }
173  
174 -/* { dg-final { scan-assembler "vmov\[         \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[         \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
175  /* { dg-final { cleanup-saved-temps } } */
176 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
177 ===================================================================
178 --- gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
179 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
180 @@ -9,7 +9,7 @@
181  
182  void test_vget_lowp16 (void)
183  {
184 -  poly16x4_t out_poly16x4_t;
185 +  register poly16x4_t out_poly16x4_t asm ("d18");
186    poly16x8_t arg0_poly16x8_t;
187  
188    out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t);
189 Index: gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
190 ===================================================================
191 --- gcc/testsuite/gcc.target/arm/neon/vget_lows8.c      (.../tags/gcc_4_4_3_release)    (wersja 156526)
192 +++ gcc/testsuite/gcc.target/arm/neon/vget_lows8.c      (.../branches/gcc-4_4-branch)   (wersja 156526)
193 @@ -9,7 +9,7 @@
194  
195  void test_vget_lows8 (void)
196  {
197 -  int8x8_t out_int8x8_t;
198 +  register int8x8_t out_int8x8_t asm ("d18");
199    int8x16_t arg0_int8x16_t;
200  
201    out_int8x8_t = vget_low_s8 (arg0_int8x16_t);
202 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
203 ===================================================================
204 --- gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c      (.../tags/gcc_4_4_3_release)    (wersja 156526)
205 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c      (.../branches/gcc-4_4-branch)   (wersja 156526)
206 @@ -9,7 +9,7 @@
207  
208  void test_vget_lowu8 (void)
209  {
210 -  uint8x8_t out_uint8x8_t;
211 +  register uint8x8_t out_uint8x8_t asm ("d18");
212    uint8x16_t arg0_uint8x16_t;
213  
214    out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t);
215 Index: gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
216 ===================================================================
217 --- gcc/testsuite/gcc.target/arm/neon/vget_lows32.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
218 +++ gcc/testsuite/gcc.target/arm/neon/vget_lows32.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
219 @@ -9,7 +9,7 @@
220  
221  void test_vget_lows32 (void)
222  {
223 -  int32x2_t out_int32x2_t;
224 +  register int32x2_t out_int32x2_t asm ("d18");
225    int32x4_t arg0_int32x4_t;
226  
227    out_int32x2_t = vget_low_s32 (arg0_int32x4_t);
228 Index: gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
229 ===================================================================
230 --- gcc/testsuite/gcc.target/arm/neon/vget_lows16.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
231 +++ gcc/testsuite/gcc.target/arm/neon/vget_lows16.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
232 @@ -9,7 +9,7 @@
233  
234  void test_vget_lows16 (void)
235  {
236 -  int16x4_t out_int16x4_t;
237 +  register int16x4_t out_int16x4_t asm ("d18");
238    int16x8_t arg0_int16x8_t;
239  
240    out_int16x4_t = vget_low_s16 (arg0_int16x8_t);
241 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
242 ===================================================================
243 --- gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
244 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
245 @@ -9,7 +9,7 @@
246  
247  void test_vget_lowu32 (void)
248  {
249 -  uint32x2_t out_uint32x2_t;
250 +  register uint32x2_t out_uint32x2_t asm ("d18");
251    uint32x4_t arg0_uint32x4_t;
252  
253    out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t);
254 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
255 ===================================================================
256 --- gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
257 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
258 @@ -9,7 +9,7 @@
259  
260  void test_vget_lowu16 (void)
261  {
262 -  uint16x4_t out_uint16x4_t;
263 +  register uint16x4_t out_uint16x4_t asm ("d18");
264    uint16x8_t arg0_uint16x8_t;
265  
266    out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t);
267 Index: gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
268 ===================================================================
269 --- gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
270 +++ gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
271 @@ -9,7 +9,7 @@
272  
273  void test_vget_lowf32 (void)
274  {
275 -  float32x2_t out_float32x2_t;
276 +  register float32x2_t out_float32x2_t asm ("d18");
277    float32x4_t arg0_float32x4_t;
278  
279    out_float32x2_t = vget_low_f32 (arg0_float32x4_t);
280 Index: gcc/testsuite/ada/acats/run_all.sh
281 ===================================================================
282 --- gcc/testsuite/ada/acats/run_all.sh  (.../tags/gcc_4_4_3_release)    (wersja 156526)
283 +++ gcc/testsuite/ada/acats/run_all.sh  (.../branches/gcc-4_4-branch)   (wersja 156526)
284 @@ -129,6 +129,7 @@
285  
286  cp $testdir/tests/cd/*.c $dir/support
287  cp $testdir/tests/cxb/*.c $dir/support
288 +grep -v '^#' $testdir/norun.lst | sort > $dir/support/norun.lst
289  
290  rm -rf $dir/run
291  mv $dir/tests $dir/tests.$$ 2> /dev/null
292 @@ -206,7 +207,7 @@
293  
294     cd $dir/tests/$chapter
295     ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \
296 -   cut -c1-7 | sort | uniq | comm -23 - $testdir/norun.lst \
297 +   cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \
298       > $dir/tests/$chapter/${chapter}.lst 
299     countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
300     glob_countn=`expr $glob_countn + $countn`
301 Index: gcc/testsuite/gcc.dg/torture/pr42952.c
302 ===================================================================
303 --- gcc/testsuite/gcc.dg/torture/pr42952.c      (.../tags/gcc_4_4_3_release)    (wersja 0)
304 +++ gcc/testsuite/gcc.dg/torture/pr42952.c      (.../branches/gcc-4_4-branch)   (wersja 156526)
305 @@ -0,0 +1,19 @@
306 +/* { dg-do run } */
307 +/* { dg-options "-fno-tree-ccp -fno-tree-fre" } */
308 +
309 +extern void abort (void);
310 +
311 +static int g[1];
312 +
313 +static int * const p = &g[0];
314 +static int * const q = &g[0];
315 +
316 +int main(void)
317 +{
318 +  g[0] = 1;
319 +  *p = 0;
320 +  *p = *q;
321 +  if (g[0] != 0)
322 +    abort ();
323 +  return 0;
324 +}
325 Index: gcc/testsuite/gcc.dg/torture/pr42898-2.c
326 ===================================================================
327 --- gcc/testsuite/gcc.dg/torture/pr42898-2.c    (.../tags/gcc_4_4_3_release)    (wersja 0)
328 +++ gcc/testsuite/gcc.dg/torture/pr42898-2.c    (.../branches/gcc-4_4-branch)   (wersja 156526)
329 @@ -0,0 +1,25 @@
330 +/* { dg-do compile } */
331 +/* { dg-options "-fdump-tree-optimized" } */
332 +
333 +struct hardware {
334 +  int parm1:8;
335 +  int :4;
336 +  int parm2:4;
337 +  int parm3:15;
338 +  int parm4:1;
339 +};
340 +
341 +const struct hardware h = {
342 +  .parm1=42,
343 +  .parm2=13,
344 +  .parm3=11850,
345 +  .parm4=1,
346 +};
347 +
348 +void f1(volatile struct hardware *ptr)
349 +{
350 +  *ptr = h;
351 +}
352 +
353 +/* { dg-final { scan-tree-dump-times "\\*ptr" 1 "optimized" } } */
354 +/* { dg-final { cleanup-tree-dump "optimized" } } */
355 Index: gcc/testsuite/gcc.dg/torture/pr42898.c
356 ===================================================================
357 --- gcc/testsuite/gcc.dg/torture/pr42898.c      (.../tags/gcc_4_4_3_release)    (wersja 0)
358 +++ gcc/testsuite/gcc.dg/torture/pr42898.c      (.../branches/gcc-4_4-branch)   (wersja 156526)
359 @@ -0,0 +1,23 @@
360 +/* { dg-do compile } */
361 +/* { dg-options "-fdump-tree-optimized" } */
362 +
363 +struct hardware {
364 +  int parm1:8;
365 +  int :4;
366 +  int parm2:4;
367 +  int parm3:15;
368 +  int parm4:1;
369 +};
370 +
371 +void f1(volatile struct hardware *ptr)
372 +{
373 +  *ptr=(struct hardware) {
374 +    .parm1=42,
375 +    .parm2=13,
376 +    .parm3=11850,
377 +    .parm4=1,
378 +  };
379 +}
380 +
381 +/* { dg-final { scan-tree-dump-times "\\*ptr" 1 "optimized" } } */
382 +/* { dg-final { cleanup-tree-dump "optimized" } } */
383 Index: gcc/testsuite/ChangeLog
384 ===================================================================
385 --- gcc/testsuite/ChangeLog     (.../tags/gcc_4_4_3_release)    (wersja 156526)
386 +++ gcc/testsuite/ChangeLog     (.../branches/gcc-4_4-branch)   (wersja 156526)
387 @@ -1,3 +1,84 @@
388 +2010-02-04  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
389 +
390 +       PR libfortran/42901
391 +       *gfortran.dg/namelist_60.f90: New test.
392 +       *gfortran.dg/namelist_59.f90: New test.
393 +
394 +2010-02-04  Richard Guenther  <rguenther@suse.de>
395 +
396 +       PR rtl-optimization/42952
397 +       * gcc.dg/torture/pr42952.c: New testcase.
398 +
399 +2010-02-02  Tobias Burnus  <burnus@net-b.de>
400 +
401 +       PR fortran/42650
402 +       * gfortran.dg/func_result_5.f90: New test.
403 +
404 +2010-02-01  Uros Bizjak  <ubizjak@gmail.com>
405 +
406 +       Backport from mainline:
407 +       2009-12-17  Uros Bizjak  <ubizjak@gmail.com>
408 +
409 +       * objc/execute/forward-1.x: XFAIL for -fgnu-runtime on
410 +       x86_64-*-darwin*, powerpc*-*-darwin* and alpha*-*-linux* targets.
411 +
412 +2010-01-31  Eric Botcazou  <ebotcazou@adacore.com>
413 +
414 +       PR middle-end/42898
415 +       * gcc.dg/torture/pr42898-2.c: New test.
416 +
417 +2010-01-31  Richard Guenther  <rguenther@suse.de>
418 +
419 +       PR middle-end/42898
420 +       * gcc.dg/torture/pr42898.c: New testcase.
421 +
422 +2010-01-31  Paul Thomas  <pault@gcc.gnu.org>
423 +
424 +       PR fortran/38324
425 +       * gfortran.dg/alloc_comp_basics_1.f90: Remove option -O2.
426 +       * gfortran.dg/alloc_comp_bounds_1.f90: New test.
427 +
428 +2010-01-30  Paul Thomas  <pault@gcc.gnu.org>
429 +
430 +       PR fortran/41044
431 +       * gfortran.dg/parameter_array_ref_2.f90 : New test.
432 +
433 +       PR fortran/41167
434 +       * gfortran.dg/char_array_arg_1.f90 : New test.
435 +
436 +2010-01-27  Paul Thomas  <pault@gcc.gnu.org>
437 +
438 +       PR fortran/42736
439 +       * gfortran.dg/dependency_25.f90 : New test.
440 +
441 +2010-01-26  Jakub Jelinek  <jakub@redhat.com>
442 +
443 +       * ada/acats/run_all.sh: Make sure norun.lst is sorted using the
444 +       current collation.
445 +
446 +       Backport from mainline:
447 +       2009-12-17  Arnaud Charlet  <charlet@adacore.com>
448 +
449 +       * ada/acats/run_all.sh: Strip comments from norun.lst.
450 +
451 +2010-01-25  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
452 +
453 +       Backport from mainline.
454 +       2010-01-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
455 +
456 +       PR target/38697.
457 +       * gcc.target/arm/neon/vget_lowf32.c: Regenerate.
458 +       * gcc.target/arm/neon/vget_lowp16.c: Likewise.
459 +       * gcc.target/arm/neon/vget_lowp8.c:  Likewise.
460 +       * gcc.target/arm/neon/vget_lows16.c: Likewise.
461 +       * gcc.target/arm/neon/vget_lows32.c: Likewise.
462 +       * gcc.target/arm/neon/vget_lows64.c: Likewise.
463 +       * gcc.target/arm/neon/vget_lows8.c: Likewise.
464 +       * gcc.target/arm/neon/vget_lowu16.c: Likewise.
465 +       * gcc.target/arm/neon/vget_lowu32.c: Likewise.
466 +       * gcc.target/arm/neon/vget_lowu64.c: Likewise.
467 +       * gcc.target/arm/neon/vget_lowu8.c: Likewise.
468 +
469  2010-01-21  Release Manager
470  
471         * GCC 4.4.3 released.
472 Index: gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90
473 ===================================================================
474 --- gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90   (.../tags/gcc_4_4_3_release)    (wersja 0)
475 +++ gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90   (.../branches/gcc-4_4-branch)   (wersja 156526)
476 @@ -0,0 +1,50 @@
477 +! { dg-do run }
478 +! Test the fix for PR38324, in which the bounds were not set correctly for
479 +! constructor assignments with allocatable components.
480 +!
481 +! Contributed by Dominique d'Humieres <dominiq@lps.ens.fr>
482 +!
483 +  integer, parameter :: ik4 = 4
484 +  integer, parameter :: ik8 = 8
485 +  integer, parameter :: from = -1, to = 2
486 +  call foo
487 +  call bar
488 +contains
489 +  subroutine foo
490 +    type :: struct
491 +      integer(4), allocatable :: ib(:)
492 +    end type struct
493 +    integer(ik4), allocatable :: ia(:)
494 +    type(struct) :: x
495 +    allocate(ia(from:to))
496 +    if (any(lbound(ia) .ne. -1) .or. any(ubound(ia) .ne. 2)) call abort
497 +    if (any(lbound(ia(:)) .ne. 1) .or. any(ubound(ia(:)) .ne. 4)) call abort
498 +    if (any(lbound(ia(from:to)) .ne. 1) .or. any(ubound(ia(from:to)) .ne. 4)) call abort
499 +    x=struct(ia)
500 +    if (any(lbound(x%ib) .ne. -1) .or. any(ubound(x%ib) .ne. 2)) call abort
501 +    x=struct(ia(:))
502 +    if (any(lbound(x%ib) .ne. 1) .or. any(ubound(x%ib) .ne. 4)) call abort
503 +    x=struct(ia(from:to))
504 +    if (any(lbound(x%ib) .ne. 1) .or. any(ubound(x%ib) .ne. 4)) call abort
505 +    deallocate(ia)
506 +  end subroutine
507 +  subroutine bar
508 +    type :: struct
509 +      integer(4), allocatable :: ib(:)
510 +    end type struct
511 +    integer(ik8), allocatable :: ia(:)
512 +    type(struct) :: x
513 +    allocate(ia(from:to))
514 +    if (any(lbound(ia) .ne. -1) .or. any(ubound(ia) .ne. 2)) call abort
515 +    if (any(lbound(ia(:)) .ne. 1) .or. any(ubound(ia(:)) .ne. 4)) call abort
516 +    if (any(lbound(ia(from:to)) .ne. 1) .or. any(ubound(ia(from:to)) .ne. 4)) call abort
517 +    x=struct(ia)
518 +    if (any(lbound(x%ib) .ne. -1) .or. any(ubound(x%ib) .ne. 2)) call abort
519 +    x=struct(ia(:))
520 +    if (any(lbound(x%ib) .ne. 1) .or. any(ubound(x%ib) .ne. 4)) call abort
521 +    x=struct(ia(from:to))
522 +    if (any(lbound(x%ib) .ne. 1) .or. any(ubound(x%ib) .ne. 4)) call abort
523 +    deallocate(ia)
524 +  end subroutine
525 +end
526 +
527 Index: gcc/testsuite/gfortran.dg/parameter_array_ref_2.f90
528 ===================================================================
529 --- gcc/testsuite/gfortran.dg/parameter_array_ref_2.f90 (.../tags/gcc_4_4_3_release)    (wersja 0)
530 +++ gcc/testsuite/gfortran.dg/parameter_array_ref_2.f90 (.../branches/gcc-4_4-branch)   (wersja 156526)
531 @@ -0,0 +1,39 @@
532 +! { dg-do compile }
533 +! Test the fix for the problems in PR41044
534 +!
535 +! Contributed by <ros@rzg.mpg.de>
536 +! Reduced by Joos VandeVondele <jv244@cam.ac.uk>
537 +!
538 +  Subroutine PS_INIT (bkgd, punit, pform, psize, rot90, bbox, clip, eps,  &
539 +                        caller)
540 +    type psfd                          ! paper size and frame defaults
541 +      character(3)                     :: n
542 +      real                             :: p(2)
543 +      real                             :: f(4)
544 +    end type psfd
545 +    character(4)                       :: fn, orich, pfmt
546 +    type(psfd), parameter              :: pfd(0:11)=(/  &
547 +         psfd('   ',(/   0.0,   0.0/),(/200.,120.,800.,560./)), &    ! A0_L
548 +         psfd('A0 ',(/ 840.9,1189.2/),(/140., 84.,560.,400./)), &    ! A0_P
549 +         psfd('A1 ',(/ 594.6, 840.9/),(/100., 60.,400.,280./)), &    ! A1_P
550 +         psfd('A2 ',(/ 420.4, 594.6/),(/ 70., 42.,280.,200./)), &    ! A2_P
551 +         psfd('A3 ',(/ 297.3, 420.4/),(/ 50., 30.,200.,140./)), &    ! A3_P
552 +         psfd('A4 ',(/ 210.2, 297.3/),(/ 35., 21.,140.,100./)), &    ! A4_P
553 +         psfd('A5 ',(/ 148.7, 210.2/),(/ 25., 15.,100., 70./)), &    ! A5_P
554 +         psfd('A6 ',(/ 105.1, 148.7/),(/ 18., 11., 70., 50./)), &    ! A6_P
555 +         psfd('   ',(/   0.0,   0.0/),(/ 50., 30.,200.,140./)), &    ! Letter_L
556 +         psfd('LET',(/ 215.9, 279.4/),(/ 35., 21.,140.,100./)), &    ! Letter_P
557 +         psfd('   ',(/   0.0,   0.0/),(/ 50., 30.,200.,140./)), &    ! Legal_L
558 +         psfd('LEG',(/ 215.9, 355.6/),(/ 35., 21.,140.,100./))/)     ! Legal_P
559 +    if (len_trim(pfmt) > 0) then       ! set paper format
560 +      idx=sum(maxloc(index(pfd%n,pfmt(1:3))))-1
561 +    end if
562 +  end subroutine PS_INIT
563 +
564 +! This, additional problem, was posted as comment #8 by Tobias Burnus <burnus@gcc.gnu.org>
565 +  type t
566 +    integer :: i
567 +  end type t
568 +  type(t), parameter :: a(1) = t(4) ! [t(4)] worked OK
569 +  real(a(1)%i) :: b
570 +end
571 Index: gcc/testsuite/gfortran.dg/namelist_60.f90
572 ===================================================================
573 --- gcc/testsuite/gfortran.dg/namelist_60.f90   (.../tags/gcc_4_4_3_release)    (wersja 0)
574 +++ gcc/testsuite/gfortran.dg/namelist_60.f90   (.../branches/gcc-4_4-branch)   (wersja 156526)
575 @@ -0,0 +1,27 @@
576 +! { dg-do run }
577 +! PR42901  Reading array of structures from namelist
578 +! Test case derived from the reporters test case.
579 +program test_nml
580 +type field_descr
581 +  integer number
582 +end type
583 +type fsetup
584 +  type (field_descr), dimension(3) :: vel ! 3 velocity components
585 +end type
586 +type (fsetup) field_setup
587 +namelist /nl_setup/ field_setup
588 +field_setup%vel%number = 0
589 +! write(*,nml=nl_setup)
590 +open(10, status="scratch")
591 +write(10,'(a)') "&nl_setup"
592 +write(10,'(a)') " field_setup%vel(1)%number=  3,"
593 +write(10,'(a)') " field_setup%vel(2)%number=  9,"
594 +write(10,'(a)') " field_setup%vel(3)%number=  27,"
595 +write(10,'(a)') "/"
596 +rewind(10)
597 +read(10,nml=nl_setup)
598 +if (field_setup%vel(1)%number .ne. 3) call abort
599 +if (field_setup%vel(2)%number .ne. 9) call abort
600 +if (field_setup%vel(3)%number .ne. 27) call abort
601 +! write(*,nml=nl_setup)
602 +end program test_nml
603 Index: gcc/testsuite/gfortran.dg/func_result_5.f90
604 ===================================================================
605 --- gcc/testsuite/gfortran.dg/func_result_5.f90 (.../tags/gcc_4_4_3_release)    (wersja 0)
606 +++ gcc/testsuite/gfortran.dg/func_result_5.f90 (.../branches/gcc-4_4-branch)   (wersja 156526)
607 @@ -0,0 +1,14 @@
608 +! { dg-do compile }
609 +!
610 +! PR fortran/42650
611 +!
612 +! Result type was not working
613 +!
614 +
615 +type(t) function func2() result(res)
616 +  type t
617 +    sequence
618 +    integer :: i = 5
619 +  end type t
620 +  res%i = 2
621 +end function func2
622 Index: gcc/testsuite/gfortran.dg/char_array_arg_1.f90
623 ===================================================================
624 --- gcc/testsuite/gfortran.dg/char_array_arg_1.f90      (.../tags/gcc_4_4_3_release)    (wersja 0)
625 +++ gcc/testsuite/gfortran.dg/char_array_arg_1.f90      (.../branches/gcc-4_4-branch)   (wersja 156526)
626 @@ -0,0 +1,17 @@
627 +! { dg-do compile }
628 +! Test the fix for pr41167, in which the first argument of 'pack', below,
629 +! was simplified incorrectly, with the results indicated.
630 +!
631 +! Contributed by Harald Anlauf <anlauf@gmx.de>
632 +!
633 +program gfcbug88
634 +  implicit none
635 +  type t
636 +     character(len=8) :: name
637 +  end type t
638 +  type(t) ,parameter :: obstyp(2)= (/ t ('A'), t ('B') /)
639 +  character(9) :: chr(1)
640 +
641 +  print *, pack (" "//obstyp(:)% name, (/ .true., .false. /))  ! Used to ICE on compilation
642 +  chr = pack (" "//obstyp(:)% name, (/ .true., .false. /))  ! Used to give conversion error
643 +end program gfcbug88
644 Index: gcc/testsuite/gfortran.dg/namelist_59.f90
645 ===================================================================
646 --- gcc/testsuite/gfortran.dg/namelist_59.f90   (.../tags/gcc_4_4_3_release)    (wersja 0)
647 +++ gcc/testsuite/gfortran.dg/namelist_59.f90   (.../branches/gcc-4_4-branch)   (wersja 156526)
648 @@ -0,0 +1,26 @@
649 +! { dg-do run }
650 +! PR41192 NAMELIST input with just a comment ("&NAME ! comment \") error 
651 +program cmdline
652 +! comment by itself causes error in gfortran
653 +   call process(' ')
654 +   call process('i=10 , j=20 k=30 ! change all three values')
655 +   call process(' ')
656 +   call process('! change no values')! before patch this failed.
657 +end program cmdline
658 +
659 +subroutine process(string)
660 + implicit none
661 + character(len=*) :: string
662 + character(len=132) :: lines(3)
663 + character(len=255) :: message
664 + integer :: i=1,j=2,k=3
665 + integer ios
666 + namelist /cmd/ i,j,k
667 + save cmd
668 + lines(1)='&cmd'
669 + lines(2)=string
670 + lines(3)='/'
671 +
672 + read(lines,nml=cmd,iostat=ios,iomsg=message)
673 + if (ios.ne.0) call abort
674 +end subroutine process
675 Index: gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
676 ===================================================================
677 --- gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90   (.../tags/gcc_4_4_3_release)    (wersja 156526)
678 +++ gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90   (.../branches/gcc-4_4-branch)   (wersja 156526)
679 @@ -1,5 +1,5 @@
680  ! { dg-do run }
681 -! { dg-options "-O2 -fdump-tree-original" }
682 +! { dg-options "-fdump-tree-original" }
683  !
684  ! Check some basic functionality of allocatable components, including that they
685  ! are nullified when created and automatically deallocated when
686 Index: gcc/testsuite/gfortran.dg/dependency_25.f90
687 ===================================================================
688 --- gcc/testsuite/gfortran.dg/dependency_25.f90 (.../tags/gcc_4_4_3_release)    (wersja 0)
689 +++ gcc/testsuite/gfortran.dg/dependency_25.f90 (.../branches/gcc-4_4-branch)   (wersja 156526)
690 @@ -0,0 +1,95 @@
691 +! { dg-do run }
692 +! Test the fix for PR42736, in which an excessively rigorous dependency
693 +! checking for the assignment generated an unnecessary temporary, whose
694 +! rank was wrong.  When accessed by the scalarizer, a segfault ensued.
695 +!
696 +! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
697 +! Reported by Armelius Cameron <armeliusc@gmail.com>
698 +!
699 +module UnitValue_Module
700 +
701 +  implicit none
702 +  private
703 +
704 +  public :: &
705 +    operator(*), &
706 +    assignment(=)
707 +
708 +  type, public :: UnitValue
709 +    real :: &
710 +      Value = 1.0
711 +    character(31) :: &
712 +      Label
713 +  end type UnitValue
714 +
715 +  interface operator(*)
716 +    module procedure ProductReal_LV
717 +  end interface operator(*)
718 +
719 +  interface assignment(=)
720 +    module procedure Assign_LV_Real
721 +  end interface assignment(=)
722 +
723 +contains
724 +
725 +  elemental function ProductReal_LV(Multiplier, Multiplicand) result(P_R_LV)
726 +
727 +    real, intent(in) :: &
728 +      Multiplier
729 +    type(UnitValue), intent(in) :: &
730 +      Multiplicand
731 +    type(UnitValue) :: &
732 +      P_R_LV
733 +
734 +    P_R_LV%Value = Multiplier * Multiplicand%Value
735 +    P_R_LV%Label = Multiplicand%Label
736 +
737 +  end function ProductReal_LV
738 +
739 +
740 +  elemental subroutine Assign_LV_Real(LeftHandSide, RightHandSide)
741 +
742 +    real, intent(inout) :: &
743 +      LeftHandSide
744 +    type(UnitValue), intent(in) :: &
745 +      RightHandSide
746 +
747 +    LeftHandSide = RightHandSide%Value
748 +
749 +  end subroutine Assign_LV_Real
750 +
751 +end module UnitValue_Module
752 +
753 +program TestProgram
754 +
755 +  use UnitValue_Module
756 +
757 +  implicit none
758 +
759 +  type :: TableForm
760 +    real, dimension(:,:), allocatable :: &
761 +      RealData
762 +  end type TableForm
763 +
764 +  type(UnitValue) :: &
765 +    CENTIMETER
766 +
767 +  type(TableForm), pointer :: &
768 +    Table
769 +
770 +  allocate(Table)
771 +  allocate(Table%RealData(10,5))
772 +
773 +  CENTIMETER%value = 42
774 +  Table%RealData = 1
775 +  Table%RealData(:,1) = Table%RealData(:,1) * CENTIMETER
776 +  Table%RealData(:,2) = Table%RealData(:,2) * CENTIMETER
777 +  Table%RealData(:,3) = Table%RealData(:,3) * CENTIMETER
778 +  Table%RealData(:,5) = Table%RealData(:,5) * CENTIMETER
779 +
780 +!  print *, Table%RealData
781 +  if (any (abs(Table%RealData(:,4) - 1) > epsilon(1.0))) call abort ()
782 +  if (any (abs(Table%RealData(:,[1,2,3,5]) - 42) > epsilon(1.0))) call abort ()
783 +end program TestProgram
784 +
785 +! { dg-final { cleanup-modules "UnitValue_Module" } }
786 Index: gcc/testsuite/objc/execute/forward-1.x
787 ===================================================================
788 --- gcc/testsuite/objc/execute/forward-1.x      (.../tags/gcc_4_4_3_release)    (wersja 156526)
789 +++ gcc/testsuite/objc/execute/forward-1.x      (.../branches/gcc-4_4-branch)   (wersja 156526)
790 @@ -1,8 +1,6 @@
791  load_lib target-supports.exp
792  
793  # XFAIL: PR libobjc/36610, for targets which pass arguments via registers
794 -# For powerpc-darwin it fails with -fgnu-runtime, passes with -fnext-runtime,
795 -# but that would be too ugly to handle; let it fail there.
796  
797  if { ([istarget x86_64-*-linux*] && [check_effective_target_lp64] )
798       || [istarget powerpc*-*-linux*]
799 @@ -15,4 +13,21 @@
800      set torture_execute_xfail "*-*-*"
801  }
802  
803 +# For darwin and alpha-linux it fails with -fgnu-runtime,
804 +# passes with -fnext-runtime.
805 +
806 +if { ([istarget x86_64-*-darwin*] && [check_effective_target_lp64] )
807 +     || [istarget powerpc*-*-darwin*]
808 +     || [istarget alpha*-*-linux*] } {
809 +    set torture_eval_before_execute {
810 +       global compiler_conditional_xfail_data
811 +       set compiler_conditional_xfail_data {
812 +           "Target fails with -fgnu-runtime" \
813 +               "*-*-*" \
814 +               { "-fgnu-runtime" } \
815 +               { "" }
816 +       }
817 +    }
818 +}
819 +
820  return 0
821 Index: gcc/dse.c
822 ===================================================================
823 --- gcc/dse.c   (.../tags/gcc_4_4_3_release)    (wersja 156526)
824 +++ gcc/dse.c   (.../branches/gcc-4_4-branch)   (wersja 156526)
825 @@ -1015,9 +1015,6 @@
826  {
827    switch (GET_CODE (x))
828      {
829 -    case MEM:
830 -      return MEM_READONLY_P (x);
831 -
832      case CONST:
833      case CONST_INT:
834      case CONST_DOUBLE:
835 Index: gcc/fortran/trans-expr.c
836 ===================================================================
837 --- gcc/fortran/trans-expr.c    (.../tags/gcc_4_4_3_release)    (wersja 156526)
838 +++ gcc/fortran/trans-expr.c    (.../branches/gcc-4_4-branch)   (wersja 156526)
839 @@ -3518,6 +3518,150 @@
840  }
841  
842  
843 +static tree
844 +gfc_trans_alloc_subarray_assign (tree dest, gfc_component * cm,
845 +                                gfc_expr * expr)
846 +{
847 +  gfc_se se;
848 +  gfc_ss *rss;
849 +  stmtblock_t block;
850 +  tree offset;
851 +  int n;
852 +  tree tmp;
853 +  tree tmp2;
854 +  gfc_array_spec *as;
855 +  gfc_expr *arg = NULL;
856 +
857 +  gfc_start_block (&block);
858 +  gfc_init_se (&se, NULL);
859 +
860 +  /* Get the descriptor for the expressions.  */ 
861 +  rss = gfc_walk_expr (expr);
862 +  se.want_pointer = 0;
863 +  gfc_conv_expr_descriptor (&se, expr, rss);
864 +  gfc_add_block_to_block (&block, &se.pre);
865 +  gfc_add_modify (&block, dest, se.expr);
866 +
867 +  /* Deal with arrays of derived types with allocatable components.  */
868 +  if (cm->ts.type == BT_DERIVED
869 +       && cm->ts.derived->attr.alloc_comp)
870 +    tmp = gfc_copy_alloc_comp (cm->ts.derived,
871 +                              se.expr, dest,
872 +                              cm->as->rank);
873 +  else
874 +    tmp = gfc_duplicate_allocatable (dest, se.expr,
875 +                                    TREE_TYPE(cm->backend_decl),
876 +                                    cm->as->rank);
877 +
878 +  gfc_add_expr_to_block (&block, tmp);
879 +  gfc_add_block_to_block (&block, &se.post);
880 +
881 +  if (expr->expr_type != EXPR_VARIABLE)
882 +    gfc_conv_descriptor_data_set (&block, se.expr,
883 +                                 null_pointer_node);
884 +
885 +  /* We need to know if the argument of a conversion function is a
886 +     variable, so that the correct lower bound can be used.  */
887 +  if (expr->expr_type == EXPR_FUNCTION
888 +       && expr->value.function.isym
889 +       && expr->value.function.isym->conversion
890 +       && expr->value.function.actual->expr
891 +       && expr->value.function.actual->expr->expr_type == EXPR_VARIABLE)
892 +    arg = expr->value.function.actual->expr;
893 +
894 +  /* Obtain the array spec of full array references.  */
895 +  if (arg)
896 +    as = gfc_get_full_arrayspec_from_expr (arg);
897 +  else
898 +    as = gfc_get_full_arrayspec_from_expr (expr);
899 +
900 +  /* Shift the lbound and ubound of temporaries to being unity,
901 +     rather than zero, based. Always calculate the offset.  */
902 +  offset = gfc_conv_descriptor_offset (dest);
903 +  gfc_add_modify (&block, offset, gfc_index_zero_node);
904 +  tmp2 =gfc_create_var (gfc_array_index_type, NULL);
905 +
906 +  for (n = 0; n < expr->rank; n++)
907 +    {
908 +      tree span;
909 +      tree lbound;
910 +      tree ubound;
911 +
912 +      /* Obtain the correct lbound - ISO/IEC TR 15581:2001 page 9.
913 +        TODO It looks as if gfc_conv_expr_descriptor should return
914 +        the correct bounds and that the following should not be
915 +        necessary.  This would simplify gfc_conv_intrinsic_bound
916 +        as well.  */
917 +      if (as && as->lower[n])
918 +       {
919 +         gfc_se lbse;
920 +         gfc_init_se (&lbse, NULL);
921 +         gfc_conv_expr (&lbse, as->lower[n]);
922 +         gfc_add_block_to_block (&block, &lbse.pre);
923 +         lbound = gfc_evaluate_now (lbse.expr, &block);
924 +       }
925 +      else if (as && arg)
926 +       {
927 +         tmp = gfc_get_symbol_decl (arg->symtree->n.sym);
928 +         lbound = gfc_conv_descriptor_lbound (tmp, gfc_rank_cst[n]);
929 +       }
930 +      else if (as)
931 +       lbound = gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]);
932 +      else
933 +       lbound = gfc_index_one_node;
934 +
935 +      lbound = fold_convert (gfc_array_index_type, lbound);
936 +
937 +      /* Shift the bounds and set the offset accordingly.  */
938 +      tmp = gfc_conv_descriptor_ubound (dest, gfc_rank_cst[n]);
939 +      span = fold_build2 (MINUS_EXPR, gfc_array_index_type, tmp,
940 +               gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]));
941 +
942 +      ubound = fold_build2 (PLUS_EXPR, gfc_array_index_type,
943 +                           span, lbound);
944 +      gfc_add_modify (&block, tmp, ubound);
945 +
946 +      tmp = gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]);
947 +      gfc_add_modify (&block, tmp, lbound);
948 +
949 +      tmp = fold_build2 (MULT_EXPR, gfc_array_index_type,
950 +               gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]),
951 +               gfc_conv_descriptor_stride (dest, gfc_rank_cst[n]));
952 +
953 +      gfc_add_modify (&block, tmp2, tmp);
954 +      tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type,
955 +                        offset, tmp2);
956 +      gfc_add_modify (&block, offset, tmp);
957 +    }
958 +
959 +  if (arg)
960 +    {
961 +      /* If a conversion expression has a null data pointer
962 +        argument, nullify the allocatable component.  */
963 +      tree non_null_expr;
964 +      tree null_expr;
965 +
966 +      if (arg->symtree->n.sym->attr.allocatable
967 +           || arg->symtree->n.sym->attr.pointer)
968 +       {
969 +         non_null_expr = gfc_finish_block (&block);
970 +         gfc_start_block (&block);
971 +         gfc_conv_descriptor_data_set (&block, dest,
972 +                                       null_pointer_node);
973 +         null_expr = gfc_finish_block (&block);
974 +         tmp = gfc_conv_descriptor_data_get (arg->symtree->n.sym->backend_decl);
975 +         tmp = build2 (EQ_EXPR, boolean_type_node, tmp,
976 +                       fold_convert (TREE_TYPE (tmp),
977 +                                     null_pointer_node));
978 +         return build3_v (COND_EXPR, tmp,
979 +                          null_expr, non_null_expr);
980 +       }
981 +    }
982 +
983 +  return gfc_finish_block (&block);
984 +}
985 +
986 +
987  /* Assign a single component of a derived type constructor.  */
988  
989  static tree
990 @@ -3528,8 +3672,6 @@
991    gfc_ss *rss;
992    stmtblock_t block;
993    tree tmp;
994 -  tree offset;
995 -  int n;
996  
997    gfc_start_block (&block);
998  
999 @@ -3569,91 +3711,8 @@
1000         gfc_conv_descriptor_data_set (&block, dest, null_pointer_node);
1001        else if (cm->attr.allocatable)
1002         {
1003 -         tree tmp2;
1004 -
1005 -          gfc_init_se (&se, NULL);
1006
1007 -         rss = gfc_walk_expr (expr);
1008 -         se.want_pointer = 0;
1009 -         gfc_conv_expr_descriptor (&se, expr, rss);
1010 -         gfc_add_block_to_block (&block, &se.pre);
1011 -
1012 -         tmp = fold_convert (TREE_TYPE (dest), se.expr);
1013 -         gfc_add_modify (&block, dest, tmp);
1014 -
1015 -         if (cm->ts.type == BT_DERIVED && cm->ts.derived->attr.alloc_comp)
1016 -           tmp = gfc_copy_alloc_comp (cm->ts.derived, se.expr, dest,
1017 -                                      cm->as->rank);
1018 -         else
1019 -           tmp = gfc_duplicate_allocatable (dest, se.expr,
1020 -                                            TREE_TYPE(cm->backend_decl),
1021 -                                            cm->as->rank);
1022 -
1023 +         tmp = gfc_trans_alloc_subarray_assign (dest, cm, expr);
1024           gfc_add_expr_to_block (&block, tmp);
1025 -         gfc_add_block_to_block (&block, &se.post);
1026 -
1027 -         if (expr->expr_type != EXPR_VARIABLE)
1028 -           gfc_conv_descriptor_data_set (&block, se.expr, null_pointer_node);
1029 -
1030 -         /* Shift the lbound and ubound of temporaries to being unity, rather
1031 -            than zero, based.  Calculate the offset for all cases.  */
1032 -         offset = gfc_conv_descriptor_offset (dest);
1033 -         gfc_add_modify (&block, offset, gfc_index_zero_node);
1034 -         tmp2 =gfc_create_var (gfc_array_index_type, NULL);
1035 -         for (n = 0; n < expr->rank; n++)
1036 -           {
1037 -             if (expr->expr_type != EXPR_VARIABLE
1038 -                   && expr->expr_type != EXPR_CONSTANT)
1039 -               {
1040 -                 tree span;
1041 -                 tmp = gfc_conv_descriptor_ubound (dest, gfc_rank_cst[n]);
1042 -                 span = fold_build2 (MINUS_EXPR, gfc_array_index_type, tmp,
1043 -                           gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]));
1044 -                 gfc_add_modify (&block, tmp,
1045 -                                      fold_build2 (PLUS_EXPR,
1046 -                                                   gfc_array_index_type,
1047 -                                                   span, gfc_index_one_node));
1048 -                 tmp = gfc_conv_descriptor_lbound (dest, gfc_rank_cst[n]);
1049 -                 gfc_add_modify (&block, tmp, gfc_index_one_node);
1050 -               }
1051 -             tmp = fold_build2 (MULT_EXPR, gfc_array_index_type,
1052 -                                gfc_conv_descriptor_lbound (dest,
1053 -                                                            gfc_rank_cst[n]),
1054 -                                gfc_conv_descriptor_stride (dest,
1055 -                                                            gfc_rank_cst[n]));
1056 -             gfc_add_modify (&block, tmp2, tmp);
1057 -             tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, offset, tmp2);
1058 -             gfc_add_modify (&block, offset, tmp);
1059 -           }
1060 -
1061 -         if (expr->expr_type == EXPR_FUNCTION
1062 -               && expr->value.function.isym
1063 -               && expr->value.function.isym->conversion
1064 -               && expr->value.function.actual->expr
1065 -               && expr->value.function.actual->expr->expr_type
1066 -                                               == EXPR_VARIABLE)
1067 -           {
1068 -             /* If a conversion expression has a null data pointer
1069 -                argument, nullify the allocatable component.  */
1070 -             gfc_symbol *s;
1071 -             tree non_null_expr;
1072 -             tree null_expr;
1073 -             s = expr->value.function.actual->expr->symtree->n.sym;
1074 -             if (s->attr.allocatable || s->attr.pointer)
1075 -               {
1076 -                 non_null_expr = gfc_finish_block (&block);
1077 -                 gfc_start_block (&block);
1078 -                 gfc_conv_descriptor_data_set (&block, dest,
1079 -                                               null_pointer_node);
1080 -                 null_expr = gfc_finish_block (&block);
1081 -                 tmp = gfc_conv_descriptor_data_get (s->backend_decl);
1082 -                 tmp = build2 (EQ_EXPR, boolean_type_node, tmp,
1083 -                               fold_convert (TREE_TYPE (tmp),
1084 -                                             null_pointer_node));
1085 -                 return build3_v (COND_EXPR, tmp, null_expr,
1086 -                                  non_null_expr);
1087 -               }
1088 -           }
1089         }
1090        else
1091         {
1092 Index: gcc/fortran/gfortran.h
1093 ===================================================================
1094 --- gcc/fortran/gfortran.h      (.../tags/gcc_4_4_3_release)    (wersja 156526)
1095 +++ gcc/fortran/gfortran.h      (.../branches/gcc-4_4-branch)   (wersja 156526)
1096 @@ -2450,6 +2450,8 @@
1097  gfc_expr *gfc_default_initializer (gfc_typespec *);
1098  gfc_expr *gfc_get_variable_expr (gfc_symtree *);
1099  
1100 +gfc_array_spec *gfc_get_full_arrayspec_from_expr (gfc_expr *expr);
1101 +
1102  bool gfc_traverse_expr (gfc_expr *, gfc_symbol *,
1103                         bool (*)(gfc_expr *, gfc_symbol *, int*),
1104                         int);
1105 Index: gcc/fortran/ChangeLog
1106 ===================================================================
1107 --- gcc/fortran/ChangeLog       (.../tags/gcc_4_4_3_release)    (wersja 156526)
1108 +++ gcc/fortran/ChangeLog       (.../branches/gcc-4_4-branch)   (wersja 156526)
1109 @@ -1,3 +1,39 @@
1110 +2010-02-02  Tobias Burnus  <burnus@net-b.de>
1111 +
1112 +       PR fortran/42650
1113 +       * parse.c (decode_specification_statement): Use sym->result not sym.
1114 +
1115 +2010-01-31  Paul Thomas  <pault@gcc.gnu.org>
1116 +
1117 +       PR fortran/38324
1118 +       * expr.c (gfc_get_full_arrayspec_from_expr): New function.
1119 +       * gfortran.h : Add prototype for above.
1120 +       * trans-expr.c (gfc_trans_alloc_subarray_assign): New function.
1121 +       (gfc_trans_subcomponent_assign): Call new function to replace
1122 +       the code to deal with allocatable components.
1123 +       * trans-intrinsic.c (gfc_conv_intrinsic_bound): Call
1124 +       gfc_get_full_arrayspec_from_expr to replace existing code.
1125 +
1126 +2010-01-30  Paul Thomas  <pault@gcc.gnu.org>
1127 +
1128 +       PR fortran/41044
1129 +       PR fortran/41167
1130 +       * expr.c (remove_subobject_ref): If the constructor is NULL use
1131 +       the expression as the source.
1132 +       (simplify_const_ref): Change the type of expression if
1133 +       there are component references.  Allow for substring to be at
1134 +       the end of an arbitrarily long chain of references.  If an
1135 +       element is found that is not in an EXPR_ARRAY, assume that this
1136 +       is scalar initialization of array. Call remove_subobject_ref in
1137 +       this case with NULL second argument.
1138 +
1139 +2010-01-27  Paul Thomas  <pault@gcc.gnu.org>
1140 +
1141 +       PR fortran/42736
1142 +       * trans-stmt.c (gfc_conv_elemental_dependencies): If temporary
1143 +       is required, turn any trailing array elements after a range
1144 +       into ranges so that offsets can be calculated.
1145 +
1146  2010-01-21  Release Manager
1147  
1148         * GCC 4.4.3 released.
1149 Index: gcc/fortran/trans-stmt.c
1150 ===================================================================
1151 --- gcc/fortran/trans-stmt.c    (.../tags/gcc_4_4_3_release)    (wersja 156526)
1152 +++ gcc/fortran/trans-stmt.c    (.../branches/gcc-4_4-branch)   (wersja 156526)
1153 @@ -212,6 +212,7 @@
1154    gfc_ss *ss;
1155    gfc_ss_info *info;
1156    gfc_symbol *fsym;
1157 +  gfc_ref *ref;
1158    int n;
1159    tree data;
1160    tree offset;
1161 @@ -267,6 +268,34 @@
1162           /* Obtain the argument descriptor for unpacking.  */
1163           gfc_init_se (&parmse, NULL);
1164           parmse.want_pointer = 1;
1165 +
1166 +         /* The scalarizer introduces some specific peculiarities when
1167 +            handling elemental subroutines; the stride can be needed up to
1168 +            the dim_array - 1, rather than dim_loop - 1 to calculate
1169 +            offsets outside the loop.  For this reason, we make sure that
1170 +            the descriptor has the dimensionality of the array by converting
1171 +            trailing elements into ranges with end = start.  */
1172 +         for (ref = e->ref; ref; ref = ref->next)
1173 +           if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION)
1174 +             break;
1175 +
1176 +         if (ref)
1177 +           {
1178 +             bool seen_range = false;
1179 +             for (n = 0; n < ref->u.ar.dimen; n++)
1180 +               {
1181 +                 if (ref->u.ar.dimen_type[n] == DIMEN_RANGE)
1182 +                   seen_range = true;
1183 +
1184 +                 if (!seen_range
1185 +                       || ref->u.ar.dimen_type[n] != DIMEN_ELEMENT)
1186 +                   continue;
1187 +
1188 +                 ref->u.ar.end[n] = gfc_copy_expr (ref->u.ar.start[n]);
1189 +                 ref->u.ar.dimen_type[n] = DIMEN_RANGE;
1190 +               }
1191 +           }
1192 +
1193           gfc_conv_expr_descriptor (&parmse, e, gfc_walk_expr (e));
1194           gfc_add_block_to_block (&se->pre, &parmse.pre);
1195  
1196 Index: gcc/fortran/expr.c
1197 ===================================================================
1198 --- gcc/fortran/expr.c  (.../tags/gcc_4_4_3_release)    (wersja 156526)
1199 +++ gcc/fortran/expr.c  (.../branches/gcc-4_4-branch)   (wersja 156526)
1200 @@ -1123,8 +1123,13 @@
1201  {
1202    gfc_expr *e;
1203  
1204 -  e = cons->expr;
1205 -  cons->expr = NULL;
1206 +  if (cons)
1207 +    {
1208 +      e = cons->expr;
1209 +      cons->expr = NULL;
1210 +    }
1211 +  else
1212 +    e = gfc_copy_expr (p);
1213    e->ref = p->ref->next;
1214    p->ref->next =  NULL;
1215    gfc_replace_expr (p, e);
1216 @@ -1428,6 +1433,7 @@
1217  {
1218    gfc_constructor *cons;
1219    gfc_expr *newp;
1220 +  gfc_ref *last_ref;
1221  
1222    while (p->ref)
1223      {
1224 @@ -1437,6 +1443,13 @@
1225           switch (p->ref->u.ar.type)
1226             {
1227             case AR_ELEMENT:
1228 +             /* <type/kind spec>, parameter :: x(<int>) = scalar_expr
1229 +                will generate this.  */
1230 +             if (p->expr_type != EXPR_ARRAY)
1231 +               {
1232 +                 remove_subobject_ref (p, NULL);
1233 +                 break;
1234 +               }
1235               if (find_array_element (p->value.constructor, &p->ref->u.ar,
1236                                       &cons) == FAILURE)
1237                 return FAILURE;
1238 @@ -1466,18 +1479,25 @@
1239                         return FAILURE;
1240                     }
1241  
1242 -                 /* If this is a CHARACTER array and we possibly took a
1243 -                    substring out of it, update the type-spec's character
1244 -                    length according to the first element (as all should have
1245 -                    the same length).  */
1246 -                 if (p->ts.type == BT_CHARACTER)
1247 +                 if (p->ts.type == BT_DERIVED
1248 +                       && p->ref->next
1249 +                       && p->value.constructor)
1250                     {
1251 -                     int string_len;
1252 +                     /* There may have been component references.  */
1253 +                     p->ts = p->value.constructor->expr->ts;
1254 +                   }
1255  
1256 -                     gcc_assert (p->ref->next);
1257 -                     gcc_assert (!p->ref->next->next);
1258 -                     gcc_assert (p->ref->next->type == REF_SUBSTRING);
1259 +                 last_ref = p->ref;
1260 +                 for (; last_ref->next; last_ref = last_ref->next) {};
1261  
1262 +                 if (p->ts.type == BT_CHARACTER
1263 +                       && last_ref->type == REF_SUBSTRING)
1264 +                   {
1265 +                     /* If this is a CHARACTER array and we possibly took
1266 +                        a substring out of it, update the type-spec's
1267 +                        character length according to the first element
1268 +                        (as all should have the same length).  */
1269 +                     int string_len;
1270                       if (p->value.constructor)
1271                         {
1272                           const gfc_expr* first = p->value.constructor->expr;
1273 @@ -3327,6 +3347,58 @@
1274  }
1275  
1276  
1277 +/* Returns the array_spec of a full array expression.  A NULL is
1278 +   returned otherwise.  */
1279 +gfc_array_spec *
1280 +gfc_get_full_arrayspec_from_expr (gfc_expr *expr)
1281 +{
1282 +  gfc_array_spec *as;
1283 +  gfc_ref *ref;
1284 +
1285 +  if (expr->rank == 0)
1286 +    return NULL;
1287 +
1288 +  /* Follow any component references.  */
1289 +  if (expr->expr_type == EXPR_VARIABLE
1290 +      || expr->expr_type == EXPR_CONSTANT)
1291 +    {
1292 +      as = expr->symtree->n.sym->as;
1293 +      for (ref = expr->ref; ref; ref = ref->next)
1294 +       {
1295 +         switch (ref->type)
1296 +           {
1297 +           case REF_COMPONENT:
1298 +             as = ref->u.c.component->as;
1299 +             continue;
1300 +
1301 +           case REF_SUBSTRING:
1302 +             continue;
1303 +
1304 +           case REF_ARRAY:
1305 +             {
1306 +               switch (ref->u.ar.type)
1307 +                 {
1308 +                 case AR_ELEMENT:
1309 +                 case AR_SECTION:
1310 +                 case AR_UNKNOWN:
1311 +                   as = NULL;
1312 +                   continue;
1313 +
1314 +                 case AR_FULL:
1315 +                   break;
1316 +                 }
1317 +               break;
1318 +             }
1319 +           }
1320 +       }
1321 +    }
1322 +  else
1323 +    as = NULL;
1324 +
1325 +  return as;
1326 +}
1327 +
1328 +
1329  /* General expression traversal function.  */
1330  
1331  bool
1332 Index: gcc/fortran/parse.c
1333 ===================================================================
1334 --- gcc/fortran/parse.c (.../tags/gcc_4_4_3_release)    (wersja 156526)
1335 +++ gcc/fortran/parse.c (.../branches/gcc-4_4-branch)   (wersja 156526)
1336 @@ -110,7 +110,7 @@
1337    match ("import", gfc_match_import, ST_IMPORT);
1338    match ("use", gfc_match_use, ST_USE);
1339  
1340 -  if (gfc_current_block ()->ts.type != BT_DERIVED)
1341 +  if (gfc_current_block ()->result->ts.type != BT_DERIVED)
1342      goto end_of_block;
1343  
1344    match (NULL, gfc_match_st_function, ST_STATEMENT_FUNCTION);
1345 Index: gcc/fortran/trans-intrinsic.c
1346 ===================================================================
1347 --- gcc/fortran/trans-intrinsic.c       (.../tags/gcc_4_4_3_release)    (wersja 156526)
1348 +++ gcc/fortran/trans-intrinsic.c       (.../branches/gcc-4_4-branch)   (wersja 156526)
1349 @@ -832,7 +832,6 @@
1350    gfc_se argse;
1351    gfc_ss *ss;
1352    gfc_array_spec * as;
1353 -  gfc_ref *ref;
1354  
1355    arg = expr->value.function.actual;
1356    arg2 = arg->next;
1357 @@ -901,43 +900,8 @@
1358    ubound = gfc_conv_descriptor_ubound (desc, bound);
1359    lbound = gfc_conv_descriptor_lbound (desc, bound);
1360    
1361 -  /* Follow any component references.  */
1362 -  if (arg->expr->expr_type == EXPR_VARIABLE
1363 -      || arg->expr->expr_type == EXPR_CONSTANT)
1364 -    {
1365 -      as = arg->expr->symtree->n.sym->as;
1366 -      for (ref = arg->expr->ref; ref; ref = ref->next)
1367 -       {
1368 -         switch (ref->type)
1369 -           {
1370 -           case REF_COMPONENT:
1371 -             as = ref->u.c.component->as;
1372 -             continue;
1373 +  as = gfc_get_full_arrayspec_from_expr (arg->expr);
1374  
1375 -           case REF_SUBSTRING:
1376 -             continue;
1377 -
1378 -           case REF_ARRAY:
1379 -             {
1380 -               switch (ref->u.ar.type)
1381 -                 {
1382 -                 case AR_ELEMENT:
1383 -                 case AR_SECTION:
1384 -                 case AR_UNKNOWN:
1385 -                   as = NULL;
1386 -                   continue;
1387 -
1388 -                 case AR_FULL:
1389 -                   break;
1390 -                 }
1391 -               break;
1392 -             }
1393 -           }
1394 -       }
1395 -    }
1396 -  else
1397 -    as = NULL;
1398 -
1399    /* 13.14.53: Result value for LBOUND
1400  
1401       Case (i): For an array section or for an array expression other than a
1402 Index: gcc/BASE-VER
1403 ===================================================================
1404 --- gcc/BASE-VER        (.../tags/gcc_4_4_3_release)    (wersja 156526)
1405 +++ gcc/BASE-VER        (.../branches/gcc-4_4-branch)   (wersja 156526)
1406 @@ -1 +1 @@
1407 -4.4.3
1408 +4.4.4
1409 Index: gcc/gimplify.c
1410 ===================================================================
1411 --- gcc/gimplify.c      (.../tags/gcc_4_4_3_release)    (wersja 156526)
1412 +++ gcc/gimplify.c      (.../branches/gcc-4_4-branch)   (wersja 156526)
1413 @@ -3684,6 +3684,21 @@
1414               }
1415           }
1416  
1417 +       /* If the target is volatile and we have non-zero elements
1418 +          initialize the target from a temporary.  */
1419 +       if (TREE_THIS_VOLATILE (object)
1420 +           && !TREE_ADDRESSABLE (type)
1421 +           && num_nonzero_elements > 0)
1422 +         {
1423 +           tree temp = create_tmp_var (TYPE_MAIN_VARIANT (type), NULL);
1424 +           TREE_OPERAND (*expr_p, 0) = temp;
1425 +           *expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
1426 +                             *expr_p,
1427 +                             build2 (MODIFY_EXPR, void_type_node,
1428 +                                     object, temp));
1429 +           return GS_OK;
1430 +         }
1431 +
1432         if (notify_temp_creation)
1433           return GS_OK;
1434  
1435 @@ -3931,11 +3946,14 @@
1436      switch (TREE_CODE (*from_p))
1437        {
1438        case VAR_DECL:
1439 -       /* If we're assigning from a constant constructor, move the
1440 -          constructor expression to the RHS of the MODIFY_EXPR.  */
1441 +       /* If we're assigning from a read-only variable initialized with
1442 +          a constructor, do the direct assignment from the constructor,
1443 +          but only if neither source nor target are volatile since this
1444 +          latter assignment might end up being done on a per-field basis.  */
1445         if (DECL_INITIAL (*from_p)
1446             && TREE_READONLY (*from_p)
1447             && !TREE_THIS_VOLATILE (*from_p)
1448 +           && !TREE_THIS_VOLATILE (*to_p)
1449             && TREE_CODE (DECL_INITIAL (*from_p)) == CONSTRUCTOR)
1450           {
1451             tree old_from = *from_p;
1452 Index: gcc/config.gcc
1453 ===================================================================
1454 --- gcc/config.gcc      (.../tags/gcc_4_4_3_release)    (wersja 156526)
1455 +++ gcc/config.gcc      (.../branches/gcc-4_4-branch)   (wersja 156526)
1456 @@ -1088,7 +1088,7 @@
1457                         tmake_file="${tmake_file} i386/t-linux64"
1458                         need_64bit_hwint=yes
1459                         case X"${with_cpu}" in
1460 -                       Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
1461 +                       Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
1462                                 ;;
1463                         X)
1464                                 if test x$with_cpu_64 = x; then
1465 @@ -1097,7 +1097,7 @@
1466                                 ;;
1467                         *)
1468                                 echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
1469 -                               echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2
1470 +                               echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
1471                                 exit 1
1472                                 ;;
1473                         esac
1474 @@ -1202,7 +1202,7 @@
1475                 # libgcc/configure.ac instead.
1476                 need_64bit_hwint=yes
1477                 case X"${with_cpu}" in
1478 -               Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx)
1479 +               Xgeneric|Xcore2|Xnocona|Xx86-64|Xamdfam10|Xbarcelona|Xk8|Xopteron|Xathlon64|Xathlon-fx|Xathlon64-sse3|Xk8-sse3|Xopteron-sse3)
1480                         ;;
1481                 X)
1482                         if test x$with_cpu_64 = x; then
1483 @@ -1211,7 +1211,7 @@
1484                         ;;
1485                 *)
1486                         echo "Unsupported CPU used in --with-cpu=$with_cpu, supported values:" 1>&2
1487 -                       echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx" 1>&2
1488 +                       echo "generic core2 nocona x86-64 amdfam10 barcelona k8 opteron athlon64 athlon-fx athlon64-sse3 k8-sse3 opteron-sse3" 1>&2
1489                         exit 1
1490                         ;;
1491                 esac
1492 @@ -2472,7 +2472,10 @@
1493          amdfam10-*|barcelona-*)
1494            with_cpu=amdfam10
1495            ;;
1496 -        k8-*|opteron-*|athlon_64-*)
1497 +        k8_sse3-*|opteron_sse3-*|athlon64_sse3-*)
1498 +          with_cpu=k8-sse3
1499 +          ;;
1500 +        k8-*|opteron-*|athlon64-*|athlon_fx-*)
1501            with_cpu=k8
1502            ;;
1503          athlon_xp-*|athlon_mp-*|athlon_4-*)
1504 @@ -2518,7 +2521,10 @@
1505          amdfam10-*|barcelona-*)
1506            with_cpu=amdfam10
1507            ;;
1508 -        k8-*|opteron-*|athlon_64-*)
1509 +        k8_sse3-*|opteron_sse3-*|athlon64_sse3-*)
1510 +          with_cpu=k8-sse3
1511 +          ;;
1512 +        k8-*|opteron-*|athlon64-*|athlon_fx-*)
1513            with_cpu=k8
1514            ;;
1515          nocona-*)
1516 @@ -2812,7 +2818,7 @@
1517                                 esac
1518                                 # OK
1519                                 ;;
1520 -                       "" | amdfam10 | barcelona | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | generic)
1521 +                       "" | amdfam10 | barcelona | k8-sse3 | opteron-sse3 | athlon64-sse3 | k8 | opteron | athlon64 | athlon-fx | nocona | core2 | generic)
1522                                 # OK
1523                                 ;;
1524                         *)
1525 Index: gcc/config/sparc/sparc.c
1526 ===================================================================
1527 --- gcc/config/sparc/sparc.c    (.../tags/gcc_4_4_3_release)    (wersja 156526)
1528 +++ gcc/config/sparc/sparc.c    (.../branches/gcc-4_4-branch)   (wersja 156526)
1529 @@ -1,6 +1,6 @@
1530  /* Subroutines for insn-output.c for SPARC.
1531     Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1532 -   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
1533 +   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
1534     Free Software Foundation, Inc.
1535     Contributed by Michael Tiemann (tiemann@cygnus.com)
1536     64-bit SPARC-V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
1537 @@ -371,7 +371,7 @@
1538  static void emit_save_or_restore_regs (int);
1539  static void sparc_asm_function_prologue (FILE *, HOST_WIDE_INT);
1540  static void sparc_asm_function_epilogue (FILE *, HOST_WIDE_INT);
1541 -#ifdef OBJECT_FORMAT_ELF
1542 +#if defined (OBJECT_FORMAT_ELF) && !HAVE_GNU_AS
1543  static void sparc_elf_asm_named_section (const char *, unsigned int, tree);
1544  #endif
1545  
1546 @@ -7847,19 +7847,11 @@
1547      }
1548  }
1549  \f
1550 -#ifdef OBJECT_FORMAT_ELF
1551 +#if defined (OBJECT_FORMAT_ELF) && !HAVE_GNU_AS
1552  static void
1553  sparc_elf_asm_named_section (const char *name, unsigned int flags,
1554                              tree decl)
1555  {
1556 -  if (flags & SECTION_MERGE)
1557 -    {
1558 -      /* entsize cannot be expressed in this section attributes
1559 -        encoding style.  */
1560 -      default_elf_asm_named_section (name, flags, decl);
1561 -      return;
1562 -    }
1563 -
1564    fprintf (asm_out_file, "\t.section\t\"%s\"", name);
1565  
1566    if (!(flags & SECTION_DEBUG))
1567 Index: gcc/config/sparc/sysv4.h
1568 ===================================================================
1569 --- gcc/config/sparc/sysv4.h    (.../tags/gcc_4_4_3_release)    (wersja 156526)
1570 +++ gcc/config/sparc/sysv4.h    (.../branches/gcc-4_4-branch)   (wersja 156526)
1571 @@ -1,5 +1,6 @@
1572  /* Target definitions for GNU compiler for SPARC running System V.4
1573 -   Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998, 2000, 2002, 2007, 2009
1574 +   Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998, 2000, 2002, 2007, 2009,
1575 +   2010
1576     Free Software Foundation, Inc.
1577     Contributed by Ron Guilmette (rfg@monkeys.com).
1578  
1579 @@ -126,9 +127,11 @@
1580  #undef DTORS_SECTION_ASM_OP
1581  #define DTORS_SECTION_ASM_OP    "\t.section\t\".dtors\",#alloc,#write"
1582  
1583 +#if !HAVE_GNU_AS
1584  /* Switch into a generic section.  */
1585  #undef TARGET_ASM_NAMED_SECTION
1586  #define TARGET_ASM_NAMED_SECTION  sparc_elf_asm_named_section
1587 +#endif
1588  
1589  #undef ASM_OUTPUT_ALIGNED_BSS
1590  #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
1591 Index: gcc/config/sh/sh.c
1592 ===================================================================
1593 --- gcc/config/sh/sh.c  (.../tags/gcc_4_4_3_release)    (wersja 156526)
1594 +++ gcc/config/sh/sh.c  (.../branches/gcc-4_4-branch)   (wersja 156526)
1595 @@ -4061,6 +4061,13 @@
1596                && ! TARGET_SMALLCODE)
1597         new_align = 4;
1598  
1599 +      /* There is a possibility that a bf is transformed into a bf/s by the
1600 +        delay slot scheduler.  */
1601 +      if (JUMP_P (from) && !JUMP_TABLE_DATA_P (from) 
1602 +         && get_attr_type (from) == TYPE_CBRANCH
1603 +         && GET_CODE (PATTERN (NEXT_INSN (PREV_INSN (from)))) != SEQUENCE)
1604 +       inc += 2;
1605 +
1606        if (found_si)
1607         {
1608           count_si += inc;
1609 @@ -8721,9 +8728,7 @@
1610         && GET_CODE (PATTERN (insn)) != USE
1611         && GET_CODE (PATTERN (insn)) != CLOBBER)
1612         || GET_CODE (insn) == CALL_INSN
1613 -       || (GET_CODE (insn) == JUMP_INSN
1614 -          && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
1615 -          && GET_CODE (PATTERN (insn)) != ADDR_VEC))
1616 +       || (JUMP_P (insn) && !JUMP_TABLE_DATA_P (insn)))
1617        && GET_CODE (PATTERN (NEXT_INSN (PREV_INSN (insn)))) != SEQUENCE
1618        && get_attr_needs_delay_slot (insn) == NEEDS_DELAY_SLOT_YES)
1619      return 2;
1620 @@ -8731,9 +8736,7 @@
1621    /* SH2e has a bug that prevents the use of annulled branches, so if
1622       the delay slot is not filled, we'll have to put a NOP in it.  */
1623    if (sh_cpu == CPU_SH2E
1624 -      && GET_CODE (insn) == JUMP_INSN
1625 -      && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC
1626 -      && GET_CODE (PATTERN (insn)) != ADDR_VEC
1627 +      && JUMP_P (insn) && !JUMP_TABLE_DATA_P (insn)
1628        && get_attr_type (insn) == TYPE_CBRANCH
1629        && GET_CODE (PATTERN (NEXT_INSN (PREV_INSN (insn)))) != SEQUENCE)
1630      return 2;
1631 Index: gcc/config/arm/neon.ml
1632 ===================================================================
1633 --- gcc/config/arm/neon.ml      (.../tags/gcc_4_4_3_release)    (wersja 156526)
1634 +++ gcc/config/arm/neon.ml      (.../branches/gcc-4_4-branch)   (wersja 156526)
1635 @@ -1,7 +1,7 @@
1636  (* Common code for ARM NEON header file, documentation and test case
1637     generators.
1638  
1639 -   Copyright (C) 2006, 2007 Free Software Foundation, Inc.
1640 +   Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
1641     Contributed by CodeSourcery.
1642  
1643     This file is part of GCC.
1644 @@ -233,6 +233,7 @@
1645         cases.  The function supplied must return the integer to be written
1646         into the testcase for the argument number (0-based) supplied to it.  *)
1647    | Const_valuator of (int -> int)
1648 +  | Fixed_return_reg
1649  
1650  exception MixedMode of elts * elts
1651  
1652 @@ -1076,9 +1077,13 @@
1653        Use_operands [| Dreg; Qreg |], "vget_high",
1654        notype_1, pf_su_8_64;
1655      Vget_low, [Instruction_name ["vmov"];
1656 -               Disassembles_as [Use_operands [| Dreg; Dreg |]]],
1657 +               Disassembles_as [Use_operands [| Dreg; Dreg |]];
1658 +              Fixed_return_reg],
1659        Use_operands [| Dreg; Qreg |], "vget_low",
1660 -      notype_1, pf_su_8_64;
1661 +      notype_1, pf_su_8_32;
1662 +     Vget_low, [No_op],
1663 +      Use_operands [| Dreg; Qreg |], "vget_low",
1664 +      notype_1, [S64; U64];
1665  
1666      (* Conversions.  *)
1667      Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1,
1668 Index: gcc/config/arm/neon-testgen.ml
1669 ===================================================================
1670 --- gcc/config/arm/neon-testgen.ml      (.../tags/gcc_4_4_3_release)    (wersja 156526)
1671 +++ gcc/config/arm/neon-testgen.ml      (.../branches/gcc-4_4-branch)   (wersja 156526)
1672 @@ -1,5 +1,5 @@
1673  (* Auto-generate ARM Neon intrinsics tests.
1674 -   Copyright (C) 2006, 2007 Free Software Foundation, Inc.
1675 +   Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
1676     Contributed by CodeSourcery.
1677  
1678     This file is part of GCC.
1679 @@ -58,7 +58,7 @@
1680  
1681  (* Emit declarations of local variables that are going to be passed
1682     to an intrinsic, together with one to take a returned value if needed.  *)
1683 -let emit_automatics chan c_types =
1684 +let emit_automatics chan c_types features =
1685    let emit () =
1686      ignore (
1687        List.fold_left (fun arg_number -> fun (flags, ty) ->
1688 @@ -75,11 +75,17 @@
1689    in
1690      match c_types with
1691        (_, return_ty) :: tys ->
1692 -        if return_ty <> "void" then
1693 -          (* The intrinsic returns a value.  *)
1694 -          (Printf.fprintf chan "  %s out_%s;\n" return_ty return_ty;
1695 -           emit ())
1696 -        else
1697 +        if return_ty <> "void" then begin
1698 +          (* The intrinsic returns a value.  We need to do explict register
1699 +             allocation for vget_low tests or they fail because of copy
1700 +             elimination.  *)
1701 +          ((if List.mem Fixed_return_reg features then
1702 +              Printf.fprintf chan "  register %s out_%s asm (\"d18\");\n"
1703 +                             return_ty return_ty
1704 +            else
1705 +              Printf.fprintf chan "  %s out_%s;\n" return_ty return_ty);
1706 +          emit ())
1707 +        end else
1708            (* The intrinsic does not return a value.  *)
1709            emit ()
1710      | _ -> assert false
1711 @@ -256,7 +262,7 @@
1712      (* Emit file and function prologues.  *)
1713      emit_prologue chan test_name;
1714      (* Emit local variable declarations.  *)
1715 -    emit_automatics chan c_types;
1716 +    emit_automatics chan c_types features;
1717      Printf.fprintf chan "\n";
1718      (* Emit the call to the intrinsic.  *)
1719      emit_call chan const_valuator c_types name elt_ty;
1720 Index: libgfortran/ChangeLog
1721 ===================================================================
1722 --- libgfortran/ChangeLog       (.../tags/gcc_4_4_3_release)    (wersja 156526)
1723 +++ libgfortran/ChangeLog       (.../branches/gcc-4_4-branch)   (wersja 156526)
1724 @@ -1,3 +1,10 @@
1725 +2010-02-04  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
1726 +
1727 +       PR libfortran/42901
1728 +       * io/list_read.c (nml_get_obj_data): Add new qualifier flag, clean up
1729 +       code, and adjust logic to set namelist info pointer correctly for array
1730 +       qualifiers of derived type components.
1731 +
1732  2010-01-21  Release Manager
1733  
1734         * GCC 4.4.3 released.
1735 Index: libgfortran/io/list_read.c
1736 ===================================================================
1737 --- libgfortran/io/list_read.c  (.../tags/gcc_4_4_3_release)    (wersja 156526)
1738 +++ libgfortran/io/list_read.c  (.../branches/gcc-4_4-branch)   (wersja 156526)
1739 @@ -287,10 +287,10 @@
1740  eat_line (st_parameter_dt *dtp)
1741  {
1742    char c;
1743 -  if (!is_internal_unit (dtp))
1744 -    do
1745 -      c = next_char (dtp);
1746 -    while (c != '\n');
1747 +
1748 +  do
1749 +    c = next_char (dtp);
1750 +  while (c != '\n');
1751  }
1752  
1753  
1754 @@ -2563,7 +2563,7 @@
1755    namelist_info * first_nl = NULL;
1756    namelist_info * root_nl = NULL;
1757    int dim, parsed_rank;
1758 -  int component_flag;
1759 +  int component_flag, qualifier_flag;
1760    index_type clow, chigh;
1761    int non_zero_rank_count;
1762  
1763 @@ -2612,11 +2612,12 @@
1764        break;
1765      }
1766  
1767 -  /* Untouch all nodes of the namelist and reset the flag that is set for
1768 +  /* Untouch all nodes of the namelist and reset the flags that are set for
1769       derived type components.  */
1770  
1771    nml_untouch_nodes (dtp);
1772    component_flag = 0;
1773 +  qualifier_flag = 0;
1774    non_zero_rank_count = 0;
1775  
1776    /* Get the object name - should '!' and '\n' be permitted separators?  */
1777 @@ -2698,10 +2699,11 @@
1778                     " for namelist variable %s", nl->var_name);
1779           goto nml_err_ret;
1780         }
1781 -
1782        if (parsed_rank > 0)
1783         non_zero_rank_count++;
1784  
1785 +      qualifier_flag = 1;
1786 +
1787        c = next_char (dtp);
1788        unget_char (dtp, c);
1789      }
1790 @@ -2726,6 +2728,7 @@
1791  
1792        root_nl = nl;
1793        component_flag = 1;
1794 +
1795        c = next_char (dtp);
1796        goto get_name;
1797      }
1798 @@ -2766,15 +2769,6 @@
1799        unget_char (dtp, c);
1800      }
1801  
1802 -  /* If a derived type touch its components and restore the root
1803 -     namelist_info if we have parsed a qualified derived type
1804 -     component.  */
1805 -
1806 -  if (nl->type == GFC_DTYPE_DERIVED)
1807 -    nml_touch_nodes (nl);
1808 -  if (component_flag && nl->var_rank > 0 && nl->next)
1809 -    nl = first_nl;
1810 -
1811    /* Make sure no extraneous qualifiers are there.  */
1812  
1813    if (c == '(')
1814 @@ -2819,10 +2813,24 @@
1815                 nl->var_name);
1816        goto nml_err_ret;
1817      }
1818 +  /* If a derived type, touch its components and restore the root
1819 +     namelist_info if we have parsed a qualified derived type
1820 +     component.  */
1821  
1822 -  if (first_nl != NULL && first_nl->var_rank > 0)
1823 -    nl = first_nl;
1824 -  
1825 +  if (nl->type == GFC_DTYPE_DERIVED)
1826 +    nml_touch_nodes (nl);
1827 +
1828 +  if (first_nl)
1829 +    {
1830 +      if (first_nl->var_rank == 0)
1831 +       {
1832 +         if (component_flag && qualifier_flag)
1833 +           nl = first_nl;
1834 +       }
1835 +      else
1836 +       nl = first_nl;
1837 +    }
1838 +
1839    if (nml_read_obj (dtp, nl, 0, pprev_nl, nml_err_msg, nml_err_msg_size,
1840                     clow, chigh) == FAILURE)
1841      goto nml_err_ret;
1842 Index: libiberty/ChangeLog
1843 ===================================================================
1844 --- libiberty/ChangeLog (.../tags/gcc_4_4_3_release)    (wersja 156526)
1845 +++ libiberty/ChangeLog (.../branches/gcc-4_4-branch)   (wersja 156526)
1846 @@ -1,3 +1,9 @@
1847 +2010-01-25  Ian Lance Taylor  <iant@google.com>
1848 +
1849 +       * cp-demangle.c (cplus_demangle_type): Check for invalid type
1850 +       after "DF".
1851 +       * testsuite/demangle-expected: Add test.
1852 +
1853  2010-01-21  Release Manager
1854  
1855         * GCC 4.4.3 released.
1856 Index: libiberty/testsuite/demangle-expected
1857 ===================================================================
1858 --- libiberty/testsuite/demangle-expected       (.../tags/gcc_4_4_3_release)    (wersja 156526)
1859 +++ libiberty/testsuite/demangle-expected       (.../branches/gcc-4_4-branch)   (wersja 156526)
1860 @@ -3910,3 +3910,8 @@
1861  --format=gnu-v3
1862  _Z1gIIidEEDTclL_Z1fEspplfp_Li1EEEDpT_
1863  decltype (f((parm#1+(1))...)) g<int, double>(int, double)
1864 +#
1865 +# Used to crash the demangler.
1866 +--format=gnu-v3
1867 +DFA
1868 +DFA
1869 Index: libiberty/cp-demangle.c
1870 ===================================================================
1871 --- libiberty/cp-demangle.c     (.../tags/gcc_4_4_3_release)    (wersja 156526)
1872 +++ libiberty/cp-demangle.c     (.../branches/gcc-4_4-branch)   (wersja 156526)
1873 @@ -1,5 +1,5 @@
1874  /* Demangler for g++ V3 ABI.
1875 -   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
1876 +   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
1877     Free Software Foundation, Inc.
1878     Written by Ian Lance Taylor <ian@wasabisystems.com>.
1879  
1880 @@ -2149,6 +2149,8 @@
1881             /* For demangling we don't care about the bits.  */
1882             d_number (di);
1883           ret->u.s_fixed.length = cplus_demangle_type (di);
1884 +         if (ret->u.s_fixed.length == NULL)
1885 +           return NULL;
1886           d_number (di);
1887           peek = d_next_char (di);
1888           ret->u.s_fixed.sat = (peek == 's');
1889
1890 Zmiany atrybutów dla: .
1891 ___________________________________________________________________
1892 Dodane: svn:mergeinfo
1893    Połączono zmiany /trunk:r155835,156042
1894
This page took 0.19029 seconds and 3 git commands to generate.