93
212
2013-04-11 Release Manager
95
214
* GCC 4.7.3 released.
215
Index: libgcc/config/tilepro/atomic.h
216
===================================================================
217
--- a/src/libgcc/config/tilepro/atomic.h (.../tags/gcc_4_7_3_release)
218
+++ b/src/libgcc/config/tilepro/atomic.h (.../branches/gcc-4_7-branch)
220
/* Macros for atomic functionality for tile.
221
- Copyright (C) 2011, 2012
222
- Free Software Foundation, Inc.
223
+ Copyright (C) 2011-2013 Free Software Foundation, Inc.
224
Contributed by Walter Lee (walt@tilera.com)
226
This file is free software; you can redistribute it and/or modify it
228
compare-and-exchange routine, so may be potentially less efficient. */
232
-#include <features.h>
234
#include <arch/spr_def.h>
238
/* 64-bit integer compare-and-exchange. */
239
static __inline __attribute__ ((always_inline))
240
- int64_t arch_atomic_val_compare_and_exchange_8 (volatile int64_t * mem,
243
+ long long arch_atomic_val_compare_and_exchange_8 (volatile long long
244
+ *mem, long long oldval,
248
__insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
250
"R04" (newval_lo), "R05" (newval_hi),
251
"m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
252
"r26", "r27", "r28", "r29", "memory");
253
- return ((uint64_t) result_hi) << 32 | result_lo;
254
+ return ((long long) result_hi) << 32 | result_lo;
258
@@ -151,11 +148,11 @@
261
#define arch_atomic_val_compare_and_exchange(mem, o, n) \
264
(__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
265
((sizeof(*(mem)) == 8) ? \
266
arch_atomic_val_compare_and_exchange_8( \
267
- (volatile int64_t*)(mem), (__typeof((o)-(o)))(o), \
268
+ (volatile long long*)(mem), (__typeof((o)-(o)))(o), \
269
(__typeof((n)-(n)))(n)) : \
270
(sizeof(*(mem)) == 4) ? \
271
arch_atomic_val_compare_and_exchange_4( \
275
#define arch_atomic_bool_compare_and_exchange(mem, o, n) \
278
__typeof(o) __o = (o); \
280
__o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \
282
/* Loop with compare_and_exchange until we guess the correct value.
283
Normally "expr" will be an expression using __old and __value. */
284
#define __arch_atomic_update_cmpxchg(mem, value, expr) \
287
__typeof(value) __value = (value); \
288
__typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \
290
@@ -190,12 +187,14 @@
291
/* Generic atomic op with 8- or 4-byte variant.
292
The _mask, _addend, and _expr arguments are ignored on tilegx. */
293
#define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \
296
((__typeof(*(mem))) \
297
((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \
298
- (void *)(mem), (int64_t)(__typeof((value)-(value)))(value)) : \
299
+ (volatile void *)(mem), \
300
+ (long long)(__typeof((value)-(value)))(value)) : \
301
(sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \
302
- (void *)(mem), (int32_t)(__typeof((value)-(value)))(value)) : \
303
+ (volatile void *)(mem), \
304
+ (int)(__typeof((value)-(value)))(value)) : \
305
__arch_atomic_error_bad_argument_size())); \
309
/* Generic atomic op with 8- or 4-byte variant.
310
The _op argument is ignored on tilepro. */
311
#define __arch_atomic_update(mem, value, _op, mask, addend, expr) \
314
(__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
315
((sizeof(*(mem)) == 8) ? \
316
__arch_atomic_update_cmpxchg((mem), (value), (expr)) : \
317
@@ -264,13 +263,13 @@
318
__arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value))
320
#define arch_atomic_bit_set(mem, bit) \
323
__typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
324
__mask & arch_atomic_or((mem), __mask); \
327
#define arch_atomic_bit_clear(mem, bit) \
330
__typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
331
__mask & arch_atomic_and((mem), ~__mask); \
96
333
Index: libgcc/config/arm/linux-atomic.c
97
334
===================================================================
98
335
--- a/src/libgcc/config/arm/linux-atomic.c (.../tags/gcc_4_7_3_release)
227
464
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_7-branch)
468
Index: gcc/builtins.c
469
===================================================================
470
--- a/src/gcc/builtins.c (.../tags/gcc_4_7_3_release)
471
+++ b/src/gcc/builtins.c (.../branches/gcc-4_7-branch)
472
@@ -9692,7 +9692,16 @@
474
/* If arg is Inf or NaN and we're logb, return it. */
475
if (TREE_CODE (rettype) == REAL_TYPE)
476
- return fold_convert_loc (loc, rettype, arg);
478
+ /* For logb(-Inf) we have to return +Inf. */
479
+ if (real_isinf (value) && real_isneg (value))
481
+ REAL_VALUE_TYPE tem;
483
+ return build_real (rettype, tem);
485
+ return fold_convert_loc (loc, rettype, arg);
487
/* Fall through... */
489
/* Zero may set errno and/or raise an exception for logb, also
231
490
Index: gcc/ChangeLog
232
491
===================================================================
233
492
--- a/src/gcc/ChangeLog (.../tags/gcc_4_7_3_release)
234
493
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_7-branch)
495
+2013-06-07 Uros Bizjak <ubizjak@gmail.com>
497
+ Backport from mainline
498
+ 2013-06-10 Uros Bizjak <ubizjak@gmail.com>
500
+ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Also use
501
+ cmp_code to construct REG_EQUAL note.
503
+ Backport from mainline
504
+ 2013-06-05 Uros Bizjak <ubizjak@gmail.com>
506
+ * config/alpha/alpha.c (alpha_emit_conditional_move): Swap all
507
+ GE, GT, GEU and GTU compares, modulo DImode compares with zero.
509
+ Backport from mainline
510
+ 2013-05-23 Uros Bizjak <ubizjak@gmail.com>
513
+ * config/alpha/alpha.md (unspec): Add UNSPEC_XFLT_COMPARE.
514
+ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Construct
515
+ REG_EQUAL note as UNSPEC_XFLT_COMPARE unspec.
517
+2013-06-09 Jakub Jelinek <jakub@redhat.com>
520
+ * config/i386/i386.md (TARGET_READ_MODIFY_WRITE peepholes): Ensure
521
+ that operands[2] doesn't overlap with operands[0].
523
+2013-05-22 Uros Bizjak <ubizjak@gmail.com>
526
+ * config/i386/i386.md (*movti_internal_rex64): Emit movaps/movups
527
+ for non-sse2 targets. Simplify mode attribute calculation.
529
+2013-05-17 Uros Bizjak <ubizjak@gmail.com>
531
+ Backport from mainline
532
+ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
534
+ * config/i386/driver-i386.c (host_detect_local_cpu): Determine
535
+ cache parameters using detect_caches_amd also for CYRIX,
536
+ NSC and TM2 signatures.
538
+ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
539
+ Dzianis Kahanovich <mahatma@eu.by>
543
+ * config/i386/driver-i386.c (host_detect_local_cpu): Detect
544
+ VIA/Centaur processors and determine their cache parameters
545
+ using detect_caches_amd.
547
+ 2013-05-15 Uros Bizjak <ubizjak@gmail.com>
549
+ * config/i386/i386.c (ix86_option_override_internal): Add
550
+ PTA_POPCNT to corei7 entry.
552
+2013-05-14 Richard Biener <rguenther@suse.de>
554
+ PR gcov-profile/57269
555
+ Backport from mainline
556
+ 2012-06-30 Nathan Sidwell <nathan@acm.org>
558
+ * coverage.c (coverage_init): Read counts file before writing
561
+2013-05-13 Uros Bizjak <ubizjak@gmail.com>
564
+ Backport from mainline
565
+ 2013-01-22 Jakub Jelinek <jakub@redhat.com>
568
+ * config/i386/i386.md (UNSPEC_STOS): New.
569
+ (strset_singleop, *strsetdi_rex_1, *strsetsi_1, *strsethi_1,
570
+ *strsetqi_1): Add UNSPEC_STOS.
572
+2013-05-10 Joey Ye <joey.ye@arm.com>
574
+ Backport from mainline
575
+ 2012-11-29 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
578
+ * config/arm/arm.md (thumb2_pool_range, pool_range): Add comment on
580
+ (thumb1_extendhisi2): Reduce Thumb pool range.
581
+ (arm_movdi): Likewise.
582
+ (thumb1_movdi_insn): Likewise.
583
+ (thumb1_movsi_insn): Likewise.
584
+ (pic_load_addr_unified): Likewise.
585
+ (pic_load_addr_32bit): Likewise.
586
+ (pic_load_addr_thumb1): Likewise.
587
+ (thumb1_movhf): Likewise.
588
+ (arm_movsf_soft_insn): Likewise.
589
+ (thumb1_movsf_soft_insn): Likewise.
590
+ (movdf_soft_insn): Likewise.
591
+ (thumb1_movdf_soft_insn): Likewise.
592
+ * config/arm/neon.md (*neon_mov<mode>): Likewise.
593
+ (*neon_mov<mode>): Likwise.
594
+ * config/arm/thumb2.md: (*thumb2_movsi_insn): Likewise.
595
+ (*thumb2_movhi_insn): Likewise.
596
+ (*thumb2_extendqisi_v6): Likewise.
597
+ (*thumb2_zero_extendqisi_v6): Likewise.
598
+ (*thumb2_zero_extendqisi2_v6): Likewise.
599
+ * config/arm/vfp.md: (*thumb2_movsi_vfp): Likewise.
600
+ (*movdi_vfp): Likewise.
601
+ (*movdi_vfp_cortexa8): Likewise.
602
+ (*thumb2_movsf_vfp): Likewise.
603
+ (*thumb2_movdf_vfp): Likewise.
605
+2013-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
607
+ * config/arm/t-rtems-eabi: Remove mthumb/march=armv7 multilib.
608
+ Add mthumb/march=armv7-a multilib.
609
+ Add mthumb/march=armv7-r multilib.
610
+ Add mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard multilib.
612
+2013-05-10 Ralf Corsépius <ralf.corsepius@rtems.org>
615
+ * config/v850/t-rtems: Add more multilibs.
617
+2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
619
+ Backport from trunk
620
+ 2013-05-03 Michael Meissner <meissner@linux.vnet.ibm.com>
623
+ * config/rs6000/rs6000.h (HARD_REGNO_CALLER_SAVE_MODE): Use DFmode
624
+ to save TFmode registers and DImode to save TImode registers for
625
+ caller save operations.
626
+ (HARD_REGNO_CALL_PART_CLOBBERED): TFmode and TDmode do not need to
627
+ mark being partially clobbered since they only use the first
630
+ * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): TFmode
631
+ and TDmode only use the upper 64-bits of each VSX register.
633
+2013-05-03 Marek Polacek <polacek@redhat.com>
635
+ Backport from mainline
636
+ 2013-04-25 Marek Polacek <polacek@redhat.com>
638
+ PR tree-optimization/57066
639
+ * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
641
+2013-04-30 Uros Bizjak <ubizjak@gmail.com>
643
+ Backport from mainline
644
+ 2013-04-29 Uros Bizjak <ubizjak@gmail.com>
647
+ * config/i386/i386.md (*zero_extendsidi2_rex64): Add "!" to m->?*y
649
+ (*zero_extendsidi2): Ditto.
651
+ Backport from mainline
652
+ 2013-04-29 Uros Bizjak <ubizjak@gmail.com>
655
+ * config/i386/i386.c (ix86_expand_vec_perm): Validize constant memory.
657
+2013-04-29 Christian Bruel <christian.bruel@st.com>
660
+ * sh.md (tstsi_t_zero_extract_eq): Set mode for operand 0.
662
+2013-04-27 Jakub Jelinek <jakub@redhat.com>
665
+ * config/i386/sse.md (xop_rotr<mode>3): Fix up computation of
666
+ the immediate rotate count.
236
668
+2013-04-21 Eric Botcazou <ebotcazou@adacore.com>
238
670
+ * cfgexpand.c (avoid_complex_debug_insns): Fix C++ism.
308
740
2013-04-11 Release Manager
310
742
* GCC 4.7.3 released.
743
Index: gcc/testsuite/gcc.target/powerpc/pr57150.c
744
===================================================================
745
--- a/src/gcc/testsuite/gcc.target/powerpc/pr57150.c (.../tags/gcc_4_7_3_release)
746
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr57150.c (.../branches/gcc-4_7-branch)
748
+/* { dg-do compile { target { powerpc*-*-* } } } */
749
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
750
+/* { dg-require-effective-target powerpc_vsx_ok } */
751
+/* { dg-options "-O3 -mcpu=power7 -fcaller-saves" } */
752
+/* { dg-final { scan-assembler-not "lxvd2x" } } */
753
+/* { dg-final { scan-assembler-not "lxvw4x" } } */
754
+/* { dg-final { scan-assembler-not "lvx" } } */
755
+/* { dg-final { scan-assembler-not "stxvd2x" } } */
756
+/* { dg-final { scan-assembler-not "stxvw4x" } } */
757
+/* { dg-final { scan-assembler-not "stvx" } } */
759
+/* Insure caller save on long double does not use VSX instructions. */
761
+extern long double modify (long double);
764
+sum (long double *ptr, long double value, unsigned long n)
768
+ for (i = 0; i < n; i++)
769
+ ptr[i] += modify (value);
771
Index: gcc/testsuite/gcc.target/i386/pr57264.c
772
===================================================================
773
--- a/src/gcc/testsuite/gcc.target/i386/pr57264.c (.../tags/gcc_4_7_3_release)
774
+++ b/src/gcc/testsuite/gcc.target/i386/pr57264.c (.../branches/gcc-4_7-branch)
776
+/* { dg-do compile } */
777
+/* { dg-options "-O1 -mcld" } */
779
+void test (int x, int **pp)
793
+/* { dg-final { scan-assembler-not "stosl" } } */
794
Index: gcc/testsuite/gcc.target/i386/pr44578.c
795
===================================================================
796
--- a/src/gcc/testsuite/gcc.target/i386/pr44578.c (.../tags/gcc_4_7_3_release)
797
+++ b/src/gcc/testsuite/gcc.target/i386/pr44578.c (.../branches/gcc-4_7-branch)
800
+/* { dg-options "-O2 -mtune=athlon64" } */
802
+extern void abort (void);
805
+__attribute__((noinline, noclone))
813
+ __builtin_memcpy (&i, &num, sizeof(unsigned int));
815
+ return (long double)(unsigned long long) i;
830
Index: gcc/testsuite/gcc.target/i386/pr56866.c
831
===================================================================
832
--- a/src/gcc/testsuite/gcc.target/i386/pr56866.c (.../tags/gcc_4_7_3_release)
833
+++ b/src/gcc/testsuite/gcc.target/i386/pr56866.c (.../branches/gcc-4_7-branch)
835
+/* PR target/56866 */
837
+/* { dg-require-effective-target xop } */
838
+/* { dg-options "-O3 -mxop" } */
840
+#define main xop_test_main
841
+#include "../../gcc.c-torture/execute/pr56866.c"
844
+#include "xop-check.h"
851
Index: gcc/testsuite/gcc.target/i386/pr57098.c
852
===================================================================
853
--- a/src/gcc/testsuite/gcc.target/i386/pr57098.c (.../tags/gcc_4_7_3_release)
854
+++ b/src/gcc/testsuite/gcc.target/i386/pr57098.c (.../branches/gcc-4_7-branch)
856
+/* { dg-do compile } */
857
+/* { dg-require-effective-target lp64 } */
858
+/* { dg-options "-msse4 -mcmodel=large" } */
860
+typedef int V __attribute__((vector_size(16)));
862
+void foo (V *p, V *mask)
864
+ *p = __builtin_shuffle (*p, *mask);
866
Index: gcc/testsuite/gcc.target/sh/pr57108.c
867
===================================================================
868
--- a/src/gcc/testsuite/gcc.target/sh/pr57108.c (.../tags/gcc_4_7_3_release)
869
+++ b/src/gcc/testsuite/gcc.target/sh/pr57108.c (.../branches/gcc-4_7-branch)
871
+/* { dg-do compile { target "sh*-*-*" } } */
872
+/* { dg-options "-O1" } */
874
+void __assert_func (void) __attribute__ ((__noreturn__)) ;
876
+void ATATransfer (int num, int buffer)
882
+ wordCount = num * 512 / sizeof (int);
884
+ ((0 == (buffer & 63)) ? (void)0 : __assert_func () );
885
+ ((0 == (wordCount & 31)) ? (void)0 : __assert_func ());
890
Index: gcc/testsuite/gfortran.dg/size_kind_3.f90
891
===================================================================
892
--- a/src/gcc/testsuite/gfortran.dg/size_kind_3.f90 (.../tags/gcc_4_7_3_release)
893
+++ b/src/gcc/testsuite/gfortran.dg/size_kind_3.f90 (.../branches/gcc-4_7-branch)
899
+integer :: B(huge(1)+3_8,2_8)
900
+integer(8) :: var1(2), var2, var3
902
+var1 = shape(B) ! { dg-error "SHAPE overflows its kind" }
903
+var2 = size(B) ! { dg-error "SIZE overflows its kind" }
904
+var3 = size(B,dim=1) ! { dg-error "SIZE overflows its kind" }
906
Index: gcc/testsuite/gfortran.dg/transfer_check_4.f90
907
===================================================================
908
--- a/src/gcc/testsuite/gfortran.dg/transfer_check_4.f90 (.../tags/gcc_4_7_3_release)
909
+++ b/src/gcc/testsuite/gfortran.dg/transfer_check_4.f90 (.../branches/gcc-4_7-branch)
912
+! { dg-options "-Wall" }
914
+! PR 57022: [4.7/4.8/4.9 Regression] Inappropriate warning for use of TRANSFER with arrays
915
+! Contributed by William Clodius <wclodius@los-alamos.net>
917
+subroutine transfers (test)
919
+ use, intrinsic :: iso_fortran_env
921
+ integer, intent(in) :: test
923
+ integer(int8) :: test8(8) = 0
924
+ integer(int16) :: test16(4) = 0
925
+ integer(int32) :: test32(2) = 0
926
+ integer(int64) :: test64 = 0
930
+ test64 = transfer(test8, test64)
932
+ test64 = transfer(test16, test64)
934
+ test64 = transfer(test32, test64)
936
+ test8 = transfer(test64, test8, 8)
938
+ test16 = transfer(test64, test16, 4)
940
+ test32 = transfer(test64, test32, 2)
946
+! PR 53685: surprising warns about transfer with explicit character range
947
+! Contributed by Jos de Kloe <kloedej@knmi.nl>
949
+subroutine mytest(byte_array,val)
950
+ integer, parameter :: r8_ = Selected_Real_Kind(15,307) ! = real*8
951
+ character(len=1), dimension(16), intent(in) :: byte_array
952
+ real(r8_),intent(out) :: val
953
+ val = transfer(byte_array(1:8),val)
955
Index: gcc/testsuite/gfortran.dg/namelist_77.f90
956
===================================================================
957
--- a/src/gcc/testsuite/gfortran.dg/namelist_77.f90 (.../tags/gcc_4_7_3_release)
958
+++ b/src/gcc/testsuite/gfortran.dg/namelist_77.f90 (.../branches/gcc-4_7-branch)
962
+! PR libfortran/51825 - Fortran runtime error: Cannot match namelist object name
963
+! Test case derived from PR.
976
+ type beam_init_struct
977
+ character(16) :: chars(1) = ''
978
+ type (mytype1) dummy
979
+ type (mytype2) grid(1)
984
+program error_namelist
990
+ type (beam_init_struct) beam_init
992
+ namelist / error_params / beam_init
994
+ open (10, status='scratch')
995
+ write (10, '(a)') "&error_params"
996
+ write (10, '(a)') " beam_init%chars(1)='JUNK'"
997
+ write (10, '(a)') " beam_init%grid(1)%n_x=3"
998
+ write (10, '(a)') " beam_init%grid(1)%n_px=2"
999
+ write (10, '(a)') "/"
1001
+ read(10, nml=error_params)
1004
+ if (beam_init%chars(1) /= 'JUNK') call abort
1005
+ if (beam_init%grid(1)%n_x /= 3) call abort
1006
+ if (beam_init%grid(1)%n_px /= 2) call abort
1009
Index: gcc/testsuite/gfortran.dg/namelist_79.f90
1010
===================================================================
1011
--- a/src/gcc/testsuite/gfortran.dg/namelist_79.f90 (.../tags/gcc_4_7_3_release)
1012
+++ b/src/gcc/testsuite/gfortran.dg/namelist_79.f90 (.../branches/gcc-4_7-branch)
1015
+! PR libfortran/52512 - Cannot match namelist object name
1016
+! Test case derived from PR.
1022
+ integer :: getal, jn
1024
+ character(len = 8) :: sname !: short name
1025
+ logical :: lini !: read in a file or not
1027
+ type(ptracer) , dimension(3) :: tracer
1028
+ namelist/namtoptrc/ getal,tracer
1033
+ tracer(jn)%sname = 'default_name'
1034
+ tracer(jn)%lini = .false.
1037
+ open (10, status='scratch')
1038
+ write (10, '(a)') "&namtoptrc"
1039
+ write (10, '(a)') " getal = 7"
1040
+ write (10, '(a)') " tracer(1) = 'DIC ', .true."
1041
+ write (10, '(a)') " tracer(2) = 'Alkalini', .true."
1042
+ write (10, '(a)') " tracer(3) = 'O2 ', .true."
1043
+ write (10, '(a)') "/"
1045
+ read(10, nml=namtoptrc)
1048
+ if (getal /= 7) call abort
1049
+ if (tracer(1)%sname /= 'DIC ') call abort
1050
+ if (tracer(2)%sname /= 'Alkalini') call abort
1051
+ if (tracer(3)%sname /= 'O2 ') call abort
1052
+ if (.not. tracer(1)%lini) call abort
1053
+ if (.not. tracer(2)%lini) call abort
1054
+ if (.not. tracer(3)%lini) call abort
1057
Index: gcc/testsuite/gfortran.dg/size_kind_2.f90
1058
===================================================================
1059
--- a/src/gcc/testsuite/gfortran.dg/size_kind_2.f90 (.../tags/gcc_4_7_3_release)
1060
+++ b/src/gcc/testsuite/gfortran.dg/size_kind_2.f90 (.../branches/gcc-4_7-branch)
1062
+! { dg-do compile }
1063
+! { dg-options "-fdump-tree-original" }
1067
+integer :: B(huge(1)+3_8,2_8)
1068
+integer(8) :: var1(2), var2, var3
1070
+var1 = shape(B,kind=8)
1071
+var2 = size(B,kind=8)
1072
+var3 = size(B,dim=1,kind=8)
1075
+! { dg-final { scan-tree-dump "static integer.kind=8. A..\\\[2\\\] = \\\{2147483650, 2\\\};" "original" } }
1076
+! { dg-final { scan-tree-dump "var2 = 4294967300;" "original" } }
1077
+! { dg-final { scan-tree-dump "var3 = 2147483650;" "original" } }
1078
+! { dg-final { cleanup-tree-dump "original" } }
1079
Index: gcc/testsuite/gfortran.dg/do_5.f90
1080
===================================================================
1081
--- a/src/gcc/testsuite/gfortran.dg/do_5.f90 (.../tags/gcc_4_7_3_release)
1082
+++ b/src/gcc/testsuite/gfortran.dg/do_5.f90 (.../branches/gcc-4_7-branch)
1084
+! { dg-do compile }
1088
+! The following program was ICEing at tree-check time
1089
+! "L()" was regarded as default-kind logical.
1091
+! Contributed by Kirill Chilikin
1096
+ LOGICAL(C_BOOL) FUNCTION L() BIND(C)
1097
+ USE, INTRINSIC :: ISO_C_BINDING
1101
+ LOGICAL(8) FUNCTION L2() BIND(C) ! { dg-warning "may not be a C interoperable kind but it is bind" }
1113
Index: gcc/testsuite/gfortran.dg/proc_ptr_41.f90
1114
===================================================================
1115
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_41.f90 (.../tags/gcc_4_7_3_release)
1116
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_41.f90 (.../branches/gcc-4_7-branch)
1118
+! { dg-do compile }
1120
+! PR 56968: [4.7/4.8/4.9 Regression] [F03] Issue with a procedure defined with a generic name returning procedure pointer
1122
+! Contributed by Samuel Debionne <samuel.debionne@ujf-grenoble.fr>
1126
+ interface generic_name_get_proc_ptr
1127
+ module procedure specific_name_get_proc_ptr
1130
+ abstract interface
1131
+ double precision function foo(arg1)
1132
+ real, intent(in) :: arg1
1138
+ function specific_name_get_proc_ptr() result(res)
1139
+ procedure(foo), pointer :: res
1147
+ procedure(foo), pointer :: ptr
1149
+ ptr => specific_name_get_proc_ptr()
1150
+ ptr => generic_name_get_proc_ptr()
1154
+! { dg-final { cleanup-modules "test" } }
1155
Index: gcc/testsuite/gfortran.dg/namelist_81.f90
1156
===================================================================
1157
--- a/src/gcc/testsuite/gfortran.dg/namelist_81.f90 (.../tags/gcc_4_7_3_release)
1158
+++ b/src/gcc/testsuite/gfortran.dg/namelist_81.f90 (.../branches/gcc-4_7-branch)
1161
+! PR56786 Error on embedded spaces
1166
+open(99,status='scratch')
1167
+write(99,'(a)') '&nml i(3 ) = 5 /'
1171
+if (i(1)/=-42 .or. i(2)/=-42 .or. i(3)/=5) call abort()
1173
+! Shorten the file so the read hits EOF
1175
+open(99,status='scratch')
1176
+write(99,'(a)') '&nml i(3 ) = 5 '
1178
+read(99,nml=nml, end=30)
1180
+! Shorten some more
1182
+open(99,status='scratch')
1183
+write(99,'(a)') '&nml i(3 ) ='
1185
+read(99,nml=nml, end=40)
1187
+! Shorten some more
1189
+open(99,status='scratch')
1190
+write(99,'(a)') '&nml i(3 )'
1192
+read(99,nml=nml, end=50)
1194
+! Shorten some more
1196
+open(99,status='scratch')
1197
+write(99,'(a)') '&nml i(3 '
1199
+read(99,nml=nml, end=60)
1203
Index: gcc/testsuite/gfortran.dg/typebound_override_4.f90
1204
===================================================================
1205
--- a/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90 (.../tags/gcc_4_7_3_release)
1206
+++ b/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90 (.../branches/gcc-4_7-branch)
1208
+! { dg-do compile }
1210
+! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
1212
+! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
1218
+ procedure, pass(map) :: clone => base_clone
1221
+ subroutine base_clone(map,mapout)
1222
+ class(base_type) :: map
1223
+ class(base_type) :: mapout
1230
+ type, extends(base_type) :: r_type
1232
+ procedure, pass(map) :: clone => r_clone ! { dg-error "Type/rank mismatch in argument" }
1235
+ subroutine r_clone(map,mapout)
1236
+ class(r_type) :: map
1237
+ class(r_type) :: mapout
1241
+! { dg-final { cleanup-modules "base_mod r_mod" } }
1242
Index: gcc/testsuite/gfortran.dg/namelist_78.f90
1243
===================================================================
1244
--- a/src/gcc/testsuite/gfortran.dg/namelist_78.f90 (.../tags/gcc_4_7_3_release)
1245
+++ b/src/gcc/testsuite/gfortran.dg/namelist_78.f90 (.../branches/gcc-4_7-branch)
1249
+! PR libfortran/51825
1250
+! Test case regarding namelist problems with derived types
1267
+ namelist /nmlst/ der
1269
+ open (10, status='scratch')
1270
+ write (10, '(a)') "&NMLST"
1271
+ write (10, '(a)') " DER%D(1)%K%J = 1,"
1272
+ write (10, '(a)') " DER%D(2)%K%J = 2,"
1273
+ write (10, '(a)') "/"
1275
+ read(10, nml=nmlst)
1278
+ if (der%d(1)%k%j /= 1) call abort
1279
+ if (der%d(2)%k%j /= 2) call abort
1280
+end program namelist
1281
Index: gcc/testsuite/gcc.c-torture/execute/pr57568.c
1282
===================================================================
1283
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c (.../tags/gcc_4_7_3_release)
1284
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c (.../branches/gcc-4_7-branch)
1286
+/* PR target/57568 */
1288
+extern void abort (void);
1289
+int a[6][9] = { }, b = 1, *c = &a[3][5];
1294
+ if (b && (*c = *c + *c))
1298
Index: gcc/testsuite/gcc.c-torture/execute/pr56866.c
1299
===================================================================
1300
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr56866.c (.../tags/gcc_4_7_3_release)
1301
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr56866.c (.../branches/gcc-4_7-branch)
1303
+/* PR target/56866 */
1308
+#if __CHAR_BIT__ == 8 && __SIZEOF_LONG_LONG__ == 8 && __SIZEOF_INT__ == 4 && __SIZEOF_SHORT__ == 2
1309
+ unsigned long long wq[256], rq[256];
1310
+ unsigned int wi[256], ri[256];
1311
+ unsigned short ws[256], rs[256];
1312
+ unsigned char wc[256], rc[256];
1315
+ __builtin_memset (wq, 0, sizeof wq);
1316
+ __builtin_memset (wi, 0, sizeof wi);
1317
+ __builtin_memset (ws, 0, sizeof ws);
1318
+ __builtin_memset (wc, 0, sizeof wc);
1319
+ wq[0] = 0x0123456789abcdefULL;
1320
+ wi[0] = 0x01234567;
1324
+ asm volatile ("" : : "g" (wq), "g" (wi), "g" (ws), "g" (wc) : "memory");
1326
+ for (t = 0; t < 256; ++t)
1327
+ rq[t] = (wq[t] >> 8) | (wq[t] << (sizeof (wq[0]) * __CHAR_BIT__ - 8));
1328
+ for (t = 0; t < 256; ++t)
1329
+ ri[t] = (wi[t] >> 8) | (wi[t] << (sizeof (wi[0]) * __CHAR_BIT__ - 8));
1330
+ for (t = 0; t < 256; ++t)
1331
+ rs[t] = (ws[t] >> 9) | (ws[t] << (sizeof (ws[0]) * __CHAR_BIT__ - 9));
1332
+ for (t = 0; t < 256; ++t)
1333
+ rc[t] = (wc[t] >> 5) | (wc[t] << (sizeof (wc[0]) * __CHAR_BIT__ - 5));
1335
+ asm volatile ("" : : "g" (rq), "g" (ri), "g" (rs), "g" (rc) : "memory");
1337
+ if (rq[0] != 0xef0123456789abcdULL || rq[1])
1338
+ __builtin_abort ();
1339
+ if (ri[0] != 0x67012345 || ri[1])
1340
+ __builtin_abort ();
1341
+ if (rs[0] != 0xb3a2 || rs[1])
1342
+ __builtin_abort ();
1343
+ if (rc[0] != 0x9b || rc[1])
1344
+ __builtin_abort ();
1348
Index: gcc/testsuite/gnat.dg/specs/last_bit.ads
1349
===================================================================
1350
--- a/src/gcc/testsuite/gnat.dg/specs/last_bit.ads (.../tags/gcc_4_7_3_release)
1351
+++ b/src/gcc/testsuite/gnat.dg/specs/last_bit.ads (.../branches/gcc-4_7-branch)
1353
+-- { dg-do compile }
1355
+package Last_Bit is
1357
+ Max_Components : constant := 100;
1358
+ type Count_Type is new Natural range 0 .. Max_Components;
1359
+ subtype Index_Type is Count_Type range 1 .. Count_Type'Last;
1361
+ type List_Type is array (Index_Type range <>) of Integer;
1363
+ type Record_Type (Count : Count_Type := 0) is record
1364
+ List : List_Type (1 .. Count);
1367
+ Null_Record : Record_Type (Count => 0);
1369
+ List_Last_Bit : Integer := Null_Record.List'Last_Bit;
311
1372
Index: gcc/testsuite/gcc.dg/pr56890-2.c
312
1373
===================================================================
313
1374
--- a/src/gcc/testsuite/gcc.dg/pr56890-2.c (.../tags/gcc_4_7_3_release)
552
2044
2013-04-11 Release Manager
554
2046
* GCC 4.7.3 released.
2047
Index: gcc/fortran/trans-stmt.c
2048
===================================================================
2049
--- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_4_7_3_release)
2050
+++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-4_7-branch)
2051
@@ -1743,7 +1743,7 @@
2052
gfc_conv_expr_val (&cond, code->expr1);
2053
gfc_add_block_to_block (&block, &cond.pre);
2054
cond.expr = fold_build1_loc (code->expr1->where.lb->location,
2055
- TRUTH_NOT_EXPR, boolean_type_node, cond.expr);
2056
+ TRUTH_NOT_EXPR, TREE_TYPE (cond.expr), cond.expr);
2058
/* Build "IF (! cond) GOTO exit_label". */
2059
tmp = build1_v (GOTO_EXPR, exit_label);
2060
Index: gcc/fortran/expr.c
2061
===================================================================
2062
--- a/src/gcc/fortran/expr.c (.../tags/gcc_4_7_3_release)
2063
+++ b/src/gcc/fortran/expr.c (.../branches/gcc-4_7-branch)
2064
@@ -3493,8 +3493,12 @@
2066
else if (rvalue->expr_type == EXPR_FUNCTION)
2068
- s2 = rvalue->symtree->n.sym->result;
2069
- name = rvalue->symtree->n.sym->result->name;
2070
+ if (rvalue->value.function.esym)
2071
+ s2 = rvalue->value.function.esym->result;
2073
+ s2 = rvalue->symtree->n.sym->result;
2079
Index: gcc/fortran/resolve.c
2080
===================================================================
2081
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_7_3_release)
2082
+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_7-branch)
2083
@@ -3155,6 +3155,7 @@
2084
for (arg = expr->value.function.actual; arg; arg = arg->next)
2086
if ((GENERIC_ID == GFC_ISYM_UBOUND || GENERIC_ID == GFC_ISYM_SIZE)
2087
+ && arg == expr->value.function.actual
2088
&& arg->next != NULL && arg->next->expr)
2090
if (arg->next->expr->expr_type != EXPR_CONSTANT)
2091
Index: gcc/fortran/target-memory.c
2092
===================================================================
2093
--- a/src/gcc/fortran/target-memory.c (.../tags/gcc_4_7_3_release)
2094
+++ b/src/gcc/fortran/target-memory.c (.../branches/gcc-4_7-branch)
2096
/* --------------------------------------------------------------- */
2097
/* Calculate the size of an expression. */
2100
-size_array (gfc_expr *e)
2103
- gfc_constructor *c = gfc_constructor_first (e->value.constructor);
2104
- size_t elt_size = gfc_target_expr_size (c->expr);
2106
- gfc_array_size (e, &array_size);
2107
- return (size_t)mpz_get_ui (array_size) * elt_size;
2111
size_integer (int kind)
2117
+/* Return the size of a single element of the given expression.
2118
+ Identical to gfc_target_expr_size for scalars. */
2121
-gfc_target_expr_size (gfc_expr *e)
2122
+gfc_element_size (gfc_expr *e)
2126
- gcc_assert (e != NULL);
2128
- if (e->expr_type == EXPR_ARRAY)
2129
- return size_array (e);
2134
@@ -130,12 +118,36 @@
2135
return int_size_in_bytes (type);
2138
- gfc_internal_error ("Invalid expression in gfc_target_expr_size.");
2139
+ gfc_internal_error ("Invalid expression in gfc_element_size.");
2145
+/* Return the size of an expression in its target representation. */
2148
+gfc_target_expr_size (gfc_expr *e)
2153
+ gcc_assert (e != NULL);
2157
+ if (gfc_array_size (e, &tmp))
2158
+ asz = mpz_get_ui (tmp);
2165
+ return asz * gfc_element_size (e);
2169
/* The encode_* functions export a value into a buffer, and
2170
return the number of bytes of the buffer that have been
2172
Index: gcc/fortran/target-memory.h
2173
===================================================================
2174
--- a/src/gcc/fortran/target-memory.h (.../tags/gcc_4_7_3_release)
2175
+++ b/src/gcc/fortran/target-memory.h (.../branches/gcc-4_7-branch)
2177
/* Convert a BOZ to REAL or COMPLEX. */
2178
bool gfc_convert_boz (gfc_expr *, gfc_typespec *);
2180
-/* Return the size of an expression in its target representation. */
2181
+size_t gfc_element_size (gfc_expr *);
2182
size_t gfc_target_expr_size (gfc_expr *);
2184
/* Write a constant expression in binary form to a target buffer. */
2185
Index: gcc/fortran/check.c
2186
===================================================================
2187
--- a/src/gcc/fortran/check.c (.../tags/gcc_4_7_3_release)
2188
+++ b/src/gcc/fortran/check.c (.../branches/gcc-4_7-branch)
2189
@@ -3988,8 +3988,6 @@
2190
size_t *result_length_p)
2192
size_t result_elt_size;
2194
- gfc_expr *mold_element;
2196
if (source->expr_type == EXPR_FUNCTION)
2198
@@ -3998,20 +3996,12 @@
2201
/* Calculate the size of the source. */
2202
- if (source->expr_type == EXPR_ARRAY
2203
- && gfc_array_size (source, &tmp) == FAILURE)
2206
*source_size = gfc_target_expr_size (source);
2207
if (*source_size == 0)
2210
- mold_element = mold->expr_type == EXPR_ARRAY
2211
- ? gfc_constructor_first (mold->value.constructor)->expr
2214
/* Determine the size of the element. */
2215
- result_elt_size = gfc_target_expr_size (mold_element);
2216
+ result_elt_size = gfc_element_size (mold);
2217
if (result_elt_size == 0)
2220
Index: gcc/fortran/simplify.c
2221
===================================================================
2222
--- a/src/gcc/fortran/simplify.c (.../tags/gcc_4_7_3_release)
2223
+++ b/src/gcc/fortran/simplify.c (.../branches/gcc-4_7-branch)
2226
gfc_expr gfc_bad_expr;
2228
+static gfc_expr *simplify_size (gfc_expr *, gfc_expr *, int);
2231
/* Note that 'simplification' is not just transforming expressions.
2232
For functions that are not simplified at compile time, range
2233
checking is done if possible.
2234
@@ -3240,7 +3242,7 @@
2235
gfc_expr* dim = result;
2236
mpz_set_si (dim->value.integer, d);
2238
- result = gfc_simplify_size (array, dim, kind);
2239
+ result = simplify_size (array, dim, k);
2240
gfc_free_expr (dim);
2243
@@ -5493,15 +5495,12 @@
2244
e = gfc_get_constant_expr (BT_INTEGER, k, &source->where);
2248
- mpz_set (e->value.integer, shape[n]);
2249
- mpz_clear (shape[n]);
2251
+ mpz_set (e->value.integer, shape[n]);
2254
mpz_set_ui (e->value.integer, n + 1);
2256
- f = gfc_simplify_size (source, e, NULL);
2257
+ f = simplify_size (source, e, k);
2261
@@ -5512,24 +5511,31 @@
2265
+ if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
2267
+ gfc_free_expr (result);
2269
+ gfc_clear_shape (shape, source->rank);
2270
+ return &gfc_bad_expr;
2273
gfc_constructor_append_expr (&result->value.constructor, e, NULL);
2277
+ gfc_clear_shape (shape, source->rank);
2284
-gfc_simplify_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2286
+simplify_size (gfc_expr *array, gfc_expr *dim, int k)
2289
gfc_expr *return_value;
2291
- int k = get_kind (BT_INTEGER, kind, "SIZE", gfc_default_integer_kind);
2294
- return &gfc_bad_expr;
2296
/* For unary operations, the size of the result is given by the size
2297
of the operand. For binary ones, it's the size of the first operand
2298
unless it is scalar, then it is the size of the second. */
2299
@@ -5558,7 +5564,7 @@
2300
replacement = array->value.op.op1;
2303
- simplified = gfc_simplify_size (array->value.op.op1, dim, kind);
2304
+ simplified = simplify_size (array->value.op.op1, dim, k);
2308
@@ -5568,18 +5574,20 @@
2311
/* Try to reduce it directly if possible. */
2312
- simplified = gfc_simplify_size (replacement, dim, kind);
2313
+ simplified = simplify_size (replacement, dim, k);
2315
/* Otherwise, we build a new SIZE call. This is hopefully at least
2316
simpler than the original one. */
2318
- simplified = gfc_build_intrinsic_call (gfc_current_ns,
2319
- GFC_ISYM_SIZE, "size",
2321
- gfc_copy_expr (replacement),
2322
- gfc_copy_expr (dim),
2323
- gfc_copy_expr (kind));
2326
+ gfc_expr *kind = gfc_get_int_expr (gfc_default_integer_kind, NULL, k);
2327
+ simplified = gfc_build_intrinsic_call (gfc_current_ns,
2328
+ GFC_ISYM_SIZE, "size",
2330
+ gfc_copy_expr (replacement),
2331
+ gfc_copy_expr (dim),
2337
@@ -5598,13 +5606,32 @@
2341
- return_value = gfc_get_int_expr (k, &array->where, mpz_get_si (size));
2342
+ return_value = gfc_get_constant_expr (BT_INTEGER, k, &array->where);
2343
+ mpz_set (return_value->value.integer, size);
2346
return return_value;
2351
+gfc_simplify_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
2354
+ int k = get_kind (BT_INTEGER, kind, "SIZE", gfc_default_integer_kind);
2357
+ return &gfc_bad_expr;
2359
+ result = simplify_size (array, dim, k);
2360
+ if (result == NULL || result == &gfc_bad_expr)
2363
+ return range_check (result, "SIZE");
2368
gfc_simplify_sign (gfc_expr *x, gfc_expr *y)
2371
Index: gcc/coverage.c
2372
===================================================================
2373
--- a/src/gcc/coverage.c (.../tags/gcc_4_7_3_release)
2374
+++ b/src/gcc/coverage.c (.../branches/gcc-4_7-branch)
2375
@@ -1099,6 +1099,9 @@
2376
memcpy (da_file_name + prefix_len, filename, len);
2377
strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
2379
+ if (flag_branch_probabilities)
2380
+ read_counts_file ();
2382
/* Name of bbg file. */
2383
if (flag_test_coverage && !flag_compare_debug)
2385
@@ -1118,9 +1121,6 @@
2386
gcov_write_unsigned (local_tick);
2390
- if (flag_branch_probabilities)
2391
- read_counts_file ();
2394
/* Performs file-level cleanup. Close graph file, generate coverage
555
2395
Index: gcc/cfgexpand.c
556
2396
===================================================================
557
2397
--- a/src/gcc/cfgexpand.c (.../tags/gcc_4_7_3_release)
706
2597
sparc_mode_class[i] = 1 << (int) SF_MODE;
707
2598
else if (GET_MODE_SIZE (i) == 8)
708
2599
sparc_mode_class[i] = 1 << (int) DF_MODE;
2600
Index: gcc/config/i386/i386.md
2601
===================================================================
2602
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_7_3_release)
2603
+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_7-branch)
2605
UNSPEC_CALL_NEEDS_VZEROUPPER
2610
;; For SSE/MMX support:
2612
@@ -1855,18 +1856,16 @@
2613
[(set_attr "type" "*,*,sselog1,ssemov,ssemov")
2614
(set_attr "prefix" "*,*,maybe_vex,maybe_vex,maybe_vex")
2616
- (cond [(eq_attr "alternative" "2,3")
2618
- (match_test "optimize_function_for_size_p (cfun)")
2619
- (const_string "V4SF")
2620
- (const_string "TI"))
2621
- (eq_attr "alternative" "4")
2623
- (ior (match_test "TARGET_SSE_TYPELESS_STORES")
2624
- (match_test "optimize_function_for_size_p (cfun)"))
2625
- (const_string "V4SF")
2626
- (const_string "TI"))]
2627
- (const_string "DI")))])
2628
+ (cond [(eq_attr "alternative" "0,1")
2629
+ (const_string "DI")
2630
+ (ior (not (match_test "TARGET_SSE2"))
2631
+ (match_test "optimize_function_for_size_p (cfun)"))
2632
+ (const_string "V4SF")
2633
+ (and (eq_attr "alternative" "4")
2634
+ (match_test "TARGET_SSE_TYPELESS_STORES"))
2635
+ (const_string "V4SF")
2637
+ (const_string "TI")))])
2640
[(set (match_operand:TI 0 "nonimmediate_operand" "")
2641
@@ -3444,9 +3443,9 @@
2644
(define_insn "*zero_extendsidi2_rex64"
2645
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,?*Ym,?*y,?*Yi,*x")
2646
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,?*Ym,?!*y,?*Yi,*x")
2648
- (match_operand:SI 1 "nonimmediate_operand" "rm,0,r ,m ,r ,m")))]
2649
+ (match_operand:SI 1 "nonimmediate_operand" "rm,0,r ,m ,r ,m")))]
2652
mov{l}\t{%1, %k0|%k0, %1}
2653
@@ -3469,9 +3468,9 @@
2655
;; %%% Kill me once multi-word ops are sane.
2656
(define_insn "zero_extendsidi2_1"
2657
- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?o,?*Ym,?*y,?*Yi,*x")
2658
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=r,?r,?o,?*Ym,?!*y,?*Yi,*x")
2660
- (match_operand:SI 1 "nonimmediate_operand" "0,rm,r ,r ,m ,r ,m")))
2661
+ (match_operand:SI 1 "nonimmediate_operand" "0,rm,r ,r ,m ,r ,m")))
2662
(clobber (reg:CC FLAGS_REG))]
2665
@@ -15912,7 +15911,8 @@
2666
[(parallel [(set (match_operand 1 "memory_operand" "")
2667
(match_operand 2 "register_operand" ""))
2668
(set (match_operand 0 "register_operand" "")
2669
- (match_operand 3 "" ""))])]
2670
+ (match_operand 3 "" ""))
2671
+ (unspec [(const_int 0)] UNSPEC_STOS)])]
2673
"ix86_current_function_needs_cld = 1;")
2675
@@ -15921,7 +15921,8 @@
2676
(match_operand:DI 2 "register_operand" "a"))
2677
(set (match_operand:DI 0 "register_operand" "=D")
2678
(plus:DI (match_dup 1)
2681
+ (unspec [(const_int 0)] UNSPEC_STOS)]
2683
&& !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
2685
@@ -15934,7 +15935,8 @@
2686
(match_operand:SI 2 "register_operand" "a"))
2687
(set (match_operand:P 0 "register_operand" "=D")
2688
(plus:P (match_dup 1)
2691
+ (unspec [(const_int 0)] UNSPEC_STOS)]
2692
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
2694
[(set_attr "type" "str")
2695
@@ -15946,7 +15948,8 @@
2696
(match_operand:HI 2 "register_operand" "a"))
2697
(set (match_operand:P 0 "register_operand" "=D")
2698
(plus:P (match_dup 1)
2701
+ (unspec [(const_int 0)] UNSPEC_STOS)]
2702
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
2704
[(set_attr "type" "str")
2705
@@ -15958,7 +15961,8 @@
2706
(match_operand:QI 2 "register_operand" "a"))
2707
(set (match_operand:P 0 "register_operand" "=D")
2708
(plus:P (match_dup 1)
2711
+ (unspec [(const_int 0)] UNSPEC_STOS)]
2712
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
2714
[(set_attr "type" "str")
2715
@@ -17190,6 +17194,7 @@
2716
"(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
2717
&& peep2_reg_dead_p (4, operands[0])
2718
&& !reg_overlap_mentioned_p (operands[0], operands[1])
2719
+ && !reg_overlap_mentioned_p (operands[0], operands[2])
2720
&& (<MODE>mode != QImode
2721
|| immediate_operand (operands[2], QImode)
2722
|| q_regs_operand (operands[2], QImode))
2723
@@ -17254,6 +17259,7 @@
2724
|| immediate_operand (operands[2], SImode)
2725
|| q_regs_operand (operands[2], SImode))
2726
&& !reg_overlap_mentioned_p (operands[0], operands[1])
2727
+ && !reg_overlap_mentioned_p (operands[0], operands[2])
2728
&& ix86_match_ccmode (peep2_next_insn (3),
2729
(GET_CODE (operands[3]) == PLUS
2730
|| GET_CODE (operands[3]) == MINUS)
2731
Index: gcc/config/i386/sse.md
2732
===================================================================
2733
--- a/src/gcc/config/i386/sse.md (.../tags/gcc_4_7_3_release)
2734
+++ b/src/gcc/config/i386/sse.md (.../branches/gcc-4_7-branch)
2735
@@ -11167,7 +11167,8 @@
2736
(match_operand:SI 2 "const_0_to_<sserotatemax>_operand" "n")))]
2739
- operands[3] = GEN_INT ((<ssescalarnum> * 8) - INTVAL (operands[2]));
2741
+ = GEN_INT (GET_MODE_BITSIZE (<ssescalarmode>mode) - INTVAL (operands[2]));
2742
return \"vprot<ssemodesuffix>\t{%3, %1, %0|%0, %1, %3}\";
2744
[(set_attr "type" "sseishft")
2745
Index: gcc/config/i386/driver-i386.c
2746
===================================================================
2747
--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_7_3_release)
2748
+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_7-branch)
2749
@@ -350,7 +350,10 @@
2750
enum vendor_signatures
2752
SIG_INTEL = 0x756e6547 /* Genu */,
2753
- SIG_AMD = 0x68747541 /* Auth */
2754
+ SIG_AMD = 0x68747541 /* Auth */,
2755
+ SIG_CENTAUR = 0x746e6543 /* Cent */,
2756
+ SIG_CYRIX = 0x69727943 /* Cyri */,
2757
+ SIG_NSC = 0x646f6547 /* Geod */
2760
enum processor_signatures
2761
@@ -510,7 +513,10 @@
2765
- if (vendor == SIG_AMD)
2766
+ if (vendor == SIG_AMD
2767
+ || vendor == SIG_CENTAUR
2768
+ || vendor == SIG_CYRIX
2769
+ || vendor == SIG_NSC)
2770
cache = detect_caches_amd (ext_level);
2771
else if (vendor == SIG_INTEL)
2773
@@ -549,6 +555,37 @@
2775
processor = PROCESSOR_PENTIUM;
2777
+ else if (vendor == SIG_CENTAUR)
2785
+ /* Use the default detection procedure. */
2786
+ processor = PROCESSOR_GENERIC32;
2787
+ else if (model == 9)
2789
+ else if (model >= 6)
2792
+ processor = PROCESSOR_GENERIC32;
2798
+ cpu = "winchip2-c6";
2800
+ processor = PROCESSOR_GENERIC32;
2803
+ /* We have no idea. */
2804
+ processor = PROCESSOR_GENERIC32;
2811
Index: gcc/config/i386/i386.c
2812
===================================================================
2813
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_7_3_release)
2814
+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_7-branch)
2815
@@ -2979,7 +2979,7 @@
2816
| PTA_SSSE3 | PTA_CX16},
2817
{"corei7", PROCESSOR_COREI7_64, CPU_COREI7,
2818
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2819
- | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16},
2820
+ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16 | PTA_POPCNT},
2821
{"corei7-avx", PROCESSOR_COREI7_64, CPU_COREI7,
2822
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
2823
| PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX
2824
@@ -20026,7 +20026,7 @@
2825
vec[i * 2 + 1] = const1_rtx;
2827
vt = gen_rtx_CONST_VECTOR (maskmode, gen_rtvec_v (w, vec));
2828
- vt = force_const_mem (maskmode, vt);
2829
+ vt = validize_mem (force_const_mem (maskmode, vt));
2830
t1 = expand_simple_binop (maskmode, PLUS, t1, vt, t1, 1,
2833
@@ -20223,7 +20223,7 @@
2834
for (i = 0; i < 16; ++i)
2835
vec[i] = GEN_INT (i/e * e);
2836
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
2837
- vt = force_const_mem (V16QImode, vt);
2838
+ vt = validize_mem (force_const_mem (V16QImode, vt));
2840
emit_insn (gen_xop_pperm (mask, mask, mask, vt));
2842
@@ -20234,7 +20234,7 @@
2843
for (i = 0; i < 16; ++i)
2844
vec[i] = GEN_INT (i % e);
2845
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
2846
- vt = force_const_mem (V16QImode, vt);
2847
+ vt = validize_mem (force_const_mem (V16QImode, vt));
2848
emit_insn (gen_addv16qi3 (mask, mask, vt));
2851
Index: gcc/config/sh/sh.md
2852
===================================================================
2853
--- a/src/gcc/config/sh/sh.md (.../tags/gcc_4_7_3_release)
2854
+++ b/src/gcc/config/sh/sh.md (.../branches/gcc-4_7-branch)
2857
(define_insn "tstsi_t_zero_extract_eq"
2858
[(set (reg:SI T_REG)
2859
- (eq:SI (zero_extract:SI (match_operand 0 "logical_operand" "z")
2860
+ (eq:SI (zero_extract:SI (match_operand:SI 0 "logical_operand" "z")
2861
(match_operand:SI 1 "const_int_operand")
2862
(match_operand:SI 2 "const_int_operand"))
2864
Index: gcc/config/rs6000/rs6000.c
2865
===================================================================
2866
--- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_7_3_release)
2867
+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_7-branch)
2868
@@ -2398,8 +2398,16 @@
2869
reg_size = UNITS_PER_WORD;
2871
for (m = 0; m < NUM_MACHINE_MODES; ++m)
2872
- rs6000_class_max_nregs[m][c]
2873
- = (GET_MODE_SIZE (m) + reg_size - 1) / reg_size;
2875
+ int reg_size2 = reg_size;
2877
+ /* TFmode/TDmode always takes 2 registers, even in VSX. */
2878
+ if (m == TDmode || m == TFmode)
2879
+ reg_size2 = UNITS_PER_FP_WORD;
2881
+ rs6000_class_max_nregs[m][c]
2882
+ = (GET_MODE_SIZE (m) + reg_size2 - 1) / reg_size2;
2886
if (TARGET_E500_DOUBLE)
2887
Index: gcc/config/rs6000/rs6000.h
2888
===================================================================
2889
--- a/src/gcc/config/rs6000/rs6000.h (.../tags/gcc_4_7_3_release)
2890
+++ b/src/gcc/config/rs6000/rs6000.h (.../branches/gcc-4_7-branch)
2891
@@ -1033,12 +1033,17 @@
2892
#define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs[(MODE)][(REGNO)]
2894
/* When setting up caller-save slots (MODE == VOIDmode) ensure we allocate
2895
- enough space to account for vectors in FP regs. */
2896
+ enough space to account for vectors in FP regs. However, TFmode/TDmode
2897
+ should not use VSX instructions to do a caller save. */
2898
#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
2900
&& ((MODE) == VOIDmode || ALTIVEC_OR_VSX_VECTOR_MODE (MODE)) \
2901
- && FP_REGNO_P (REGNO) \
2903
+ && FP_REGNO_P (REGNO) \
2905
+ : ((MODE) == TFmode && FP_REGNO_P (REGNO)) \
2907
+ : ((MODE) == TDmode && FP_REGNO_P (REGNO)) \
2909
: choose_hard_reg_mode ((REGNO), (NREGS), false))
2911
#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \
2912
@@ -1046,7 +1051,8 @@
2913
&& (GET_MODE_SIZE (MODE) > 4) \
2914
&& INT_REGNO_P (REGNO)) ? 1 : 0) \
2915
|| (TARGET_VSX && FP_REGNO_P (REGNO) \
2916
- && GET_MODE_SIZE (MODE) > 8))
2917
+ && GET_MODE_SIZE (MODE) > 8 && ((MODE) != TDmode) \
2918
+ && ((MODE) != TFmode)))
2920
#define VSX_VECTOR_MODE(MODE) \
2921
((MODE) == V4SFmode \
709
2922
Index: gcc/config/darwin.h
710
2923
===================================================================
711
2924
--- a/src/gcc/config/darwin.h (.../tags/gcc_4_7_3_release)
739
2952
/* When generating stabs debugging, use N_BINCL entries. */
741
2954
#define DBX_USE_BINCL
2955
Index: gcc/config/arm/thumb2.md
2956
===================================================================
2957
--- a/src/gcc/config/arm/thumb2.md (.../tags/gcc_4_7_3_release)
2958
+++ b/src/gcc/config/arm/thumb2.md (.../branches/gcc-4_7-branch)
2961
[(set_attr "type" "*,*,*,*,load1,load1,store1,store1")
2962
(set_attr "predicable" "yes")
2963
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*")
2964
+ (set_attr "pool_range" "*,*,*,*,1018,4094,*,*")
2965
(set_attr "neg_pool_range" "*,*,*,*,0,0,*,*")]
2969
ldr%(h%)\\t%0, %1\\t%@ movhi"
2970
[(set_attr "type" "*,*,store1,load1")
2971
(set_attr "predicable" "yes")
2972
- (set_attr "pool_range" "*,*,*,4096")
2973
+ (set_attr "pool_range" "*,*,*,4094")
2974
(set_attr "neg_pool_range" "*,*,*,250")]
2979
[(set_attr "type" "alu_shift,load_byte")
2980
(set_attr "predicable" "yes")
2981
- (set_attr "pool_range" "*,4096")
2982
+ (set_attr "pool_range" "*,4094")
2983
(set_attr "neg_pool_range" "*,250")]
2988
[(set_attr "type" "alu_shift,load_byte")
2989
(set_attr "predicable" "yes")
2990
- (set_attr "pool_range" "*,4096")
2991
+ (set_attr "pool_range" "*,4094")
2992
(set_attr "neg_pool_range" "*,250")]
2996
ldr%(b%)\\t%0, %1\\t%@ zero_extendqisi2"
2997
[(set_attr "type" "alu_shift,load_byte")
2998
(set_attr "predicable" "yes")
2999
- (set_attr "pool_range" "*,4096")
3000
+ (set_attr "pool_range" "*,4094")
3001
(set_attr "neg_pool_range" "*,250")]
3004
Index: gcc/config/arm/vfp.md
3005
===================================================================
3006
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_7_3_release)
3007
+++ b/src/gcc/config/arm/vfp.md (.../branches/gcc-4_7-branch)
3009
[(set_attr "predicable" "yes")
3010
(set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores")
3011
(set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*")
3012
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,*,1020,*")
3013
+ (set_attr "pool_range" "*,*,*,*,1018,4094,*,*,*,*,*,1018,*")
3014
(set_attr "neg_pool_range" "*,*,*,*, 0, 0,*,*,*,*,*,1008,*")]
3021
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
3022
+ (set_attr "arm_pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
3023
+ (set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
3024
(set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
3025
(set_attr "arch" "t2,any,any,any,a,t2,any,any,any,any,any,any")]
3030
(set_attr "predicable" "yes")
3031
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
3032
+ (set_attr "arm_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
3033
+ (set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
3034
(set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
3035
(set (attr "ce_count")
3036
(symbol_ref "get_attr_length (insn) / 4"))
3039
"r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*")
3040
(set_attr "insn" "*,*,*,*,*,*,*,*,mov")
3041
- (set_attr "pool_range" "*,*,*,1020,*,4092,*,*,*")
3042
+ (set_attr "pool_range" "*,*,*,1018,*,4090,*,*,*")
3043
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
3050
- (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
3051
+ (set_attr "pool_range" "*,*,*,1018,*,4094,*,*,*")
3052
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
3055
Index: gcc/config/arm/neon.md
3056
===================================================================
3057
--- a/src/gcc/config/arm/neon.md (.../tags/gcc_4_7_3_release)
3058
+++ b/src/gcc/config/arm/neon.md (.../branches/gcc-4_7-branch)
3060
(set_attr "type" "*,f_stored,*,f_loadd,*,*,alu,load2,store2")
3061
(set_attr "insn" "*,*,*,*,*,*,mov,*,*")
3062
(set_attr "length" "4,4,4,4,4,4,8,8,8")
3063
- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
3064
+ (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
3065
+ (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
3066
(set_attr "neg_pool_range" "*,*,*,1004,*,*,*,1004,*")])
3068
(define_insn "*neon_mov<mode>"
3070
(set_attr "type" "*,*,*,*,*,*,alu,load4,store4")
3071
(set_attr "insn" "*,*,*,*,*,*,mov,*,*")
3072
(set_attr "length" "4,8,4,8,8,8,16,8,16")
3073
- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
3074
+ (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
3075
+ (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
3076
(set_attr "neg_pool_range" "*,*,*,996,*,*,*,996,*")])
3078
(define_expand "movti"
3079
Index: gcc/config/arm/arm.md
3080
===================================================================
3081
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_7_3_release)
3082
+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_7-branch)
3084
; POOL_RANGE is how far away from a constant pool entry that this insn
3085
; can be placed. If the distance is zero, then this insn will never
3086
; reference the pool.
3087
+; Note that for Thumb constant pools the PC value is rounded down to the
3088
+; nearest multiple of four. Therefore, THUMB2_POOL_RANGE (and POOL_RANGE for
3089
+; Thumb insns) should be set to <max_range> - 2.
3090
; NEG_POOL_RANGE is nonzero for insns that can reference a constant pool entry
3091
; before its address. It is set to <max_range> - (8 + <data_size>).
3092
(define_attr "arm_pool_range" "" (const_int 0))
3093
@@ -4833,7 +4836,7 @@
3094
(const_int 2) (const_int 4))
3096
(set_attr "type" "alu_shift,load_byte")
3097
- (set_attr "pool_range" "*,1020")]
3098
+ (set_attr "pool_range" "*,1018")]
3101
;; This pattern will only be used when ldsh is not available
3102
@@ -5239,7 +5242,7 @@
3103
(set_attr "type" "*,*,*,load2,store2")
3104
(set_attr "arm_pool_range" "*,*,*,1020,*")
3105
(set_attr "arm_neg_pool_range" "*,*,*,1004,*")
3106
- (set_attr "thumb2_pool_range" "*,*,*,4096,*")
3107
+ (set_attr "thumb2_pool_range" "*,*,*,4094,*")
3108
(set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
3111
@@ -5379,7 +5382,7 @@
3112
[(set_attr "length" "4,4,6,2,2,6,4,4")
3113
(set_attr "type" "*,*,*,load2,store2,load2,store2,*")
3114
(set_attr "insn" "*,mov,*,*,*,*,*,mov")
3115
- (set_attr "pool_range" "*,*,*,*,*,1020,*,*")]
3116
+ (set_attr "pool_range" "*,*,*,*,*,1018,*,*")]
3119
(define_expand "movsi"
3120
@@ -5539,7 +5542,7 @@
3122
[(set_attr "length" "2,2,4,4,2,2,2,2,2")
3123
(set_attr "type" "*,*,*,*,load1,store1,load1,store1,*")
3124
- (set_attr "pool_range" "*,*,*,*,*,*,1020,*,*")
3125
+ (set_attr "pool_range" "*,*,*,*,*,*,1018,*,*")
3126
(set_attr "conds" "set,clob,*,*,nocond,nocond,nocond,nocond,nocond")])
3129
@@ -5632,7 +5635,7 @@
3130
(match_dup 2)] UNSPEC_PIC_BASE))]
3131
"operands[3] = TARGET_THUMB ? GEN_INT (4) : GEN_INT (8);"
3132
[(set_attr "type" "load1,load1,load1")
3133
- (set_attr "pool_range" "4096,4096,1024")
3134
+ (set_attr "pool_range" "4096,4094,1022")
3135
(set_attr "neg_pool_range" "4084,0,0")
3136
(set_attr "arch" "a,t2,t1")
3137
(set_attr "length" "8,6,4")]
3138
@@ -5648,7 +5651,10 @@
3139
"TARGET_32BIT && flag_pic"
3141
[(set_attr "type" "load1")
3142
- (set_attr "pool_range" "4096")
3143
+ (set (attr "pool_range")
3144
+ (if_then_else (eq_attr "is_thumb" "no")
3146
+ (const_int 4094)))
3147
(set (attr "neg_pool_range")
3148
(if_then_else (eq_attr "is_thumb" "no")
3150
@@ -5661,7 +5667,7 @@
3151
"TARGET_THUMB1 && flag_pic"
3153
[(set_attr "type" "load1")
3154
- (set (attr "pool_range") (const_int 1024))]
3155
+ (set (attr "pool_range") (const_int 1018))]
3158
(define_insn "pic_add_dot_plus_four"
3159
@@ -6456,7 +6462,7 @@
3160
[(set_attr "length" "2")
3161
(set_attr "type" "*,load1,store1,*,*")
3162
(set_attr "insn" "mov,*,*,mov,mov")
3163
- (set_attr "pool_range" "*,1020,*,*,*")
3164
+ (set_attr "pool_range" "*,1018,*,*,*")
3165
(set_attr "conds" "clob,nocond,nocond,nocond,nocond")])
3167
(define_expand "movsf"
3168
@@ -6511,7 +6517,8 @@
3169
[(set_attr "predicable" "yes")
3170
(set_attr "type" "*,load1,store1")
3171
(set_attr "insn" "mov,*,*")
3172
- (set_attr "pool_range" "*,4096,*")
3173
+ (set_attr "arm_pool_range" "*,4096,*")
3174
+ (set_attr "thumb2_pool_range" "*,4094,*")
3175
(set_attr "arm_neg_pool_range" "*,4084,*")
3176
(set_attr "thumb2_neg_pool_range" "*,0,*")]
3178
@@ -6533,7 +6540,7 @@
3180
[(set_attr "length" "2")
3181
(set_attr "type" "*,load1,store1,load1,store1,*,*")
3182
- (set_attr "pool_range" "*,*,*,1020,*,*,*")
3183
+ (set_attr "pool_range" "*,*,*,1018,*,*,*")
3184
(set_attr "insn" "*,*,*,*,*,mov,mov")
3185
(set_attr "conds" "clob,nocond,nocond,nocond,nocond,nocond,nocond")]
3187
@@ -6622,7 +6629,8 @@
3189
[(set_attr "length" "8,12,16,8,8")
3190
(set_attr "type" "*,*,*,load2,store2")
3191
- (set_attr "pool_range" "*,*,*,1020,*")
3192
+ (set_attr "arm_pool_range" "*,*,*,1020,*")
3193
+ (set_attr "thumb2_pool_range" "*,*,*,1018,*")
3194
(set_attr "arm_neg_pool_range" "*,*,*,1004,*")
3195
(set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
3197
@@ -6665,7 +6673,7 @@
3198
[(set_attr "length" "4,2,2,6,4,4")
3199
(set_attr "type" "*,load2,store2,load2,store2,*")
3200
(set_attr "insn" "*,*,*,*,*,mov")
3201
- (set_attr "pool_range" "*,*,*,1020,*,*")]
3202
+ (set_attr "pool_range" "*,*,*,1018,*,*")]
3205
(define_expand "movxf"
3206
Index: gcc/config/arm/t-rtems-eabi
3207
===================================================================
3208
--- a/src/gcc/config/arm/t-rtems-eabi (.../tags/gcc_4_7_3_release)
3209
+++ b/src/gcc/config/arm/t-rtems-eabi (.../branches/gcc-4_7-branch)
3211
# Custom RTEMS EABI multilibs
3213
-MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7/march=armv7-m
3214
-MULTILIB_DIRNAMES = thumb armv6-m armv7 armv7-m
3215
-MULTILIB_EXCEPTIONS = march=armv6-m march=armv7 march=armv7-m
3217
-MULTILIB_EXCLUSIONS =
3218
-MULTILIB_OSDIRNAMES =
3219
+MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7-a/march=armv7-r/march=armv7-m mfpu=neon mfloat-abi=hard
3220
+MULTILIB_DIRNAMES = thumb armv6-m armv7-a armv7-r armv7-m neon hard
3222
+# Enumeration of multilibs
3224
+MULTILIB_EXCEPTIONS =
3225
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon/mfloat-abi=hard
3226
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon
3227
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfloat-abi=hard
3228
+# MULTILIB_EXCEPTIONS += mthumb/march=armv6-m
3229
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard
3230
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon
3231
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfloat-abi=hard
3232
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a
3233
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon/mfloat-abi=hard
3234
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon
3235
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfloat-abi=hard
3236
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r
3237
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon/mfloat-abi=hard
3238
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon
3239
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfloat-abi=hard
3240
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-m
3241
+MULTILIB_EXCEPTIONS += mthumb/mfpu=neon/mfloat-abi=hard
3242
+MULTILIB_EXCEPTIONS += mthumb/mfpu=neon
3243
+MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=hard
3244
+# MULTILIB_EXCEPTIONS += mthumb
3245
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon/mfloat-abi=hard
3246
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon
3247
+MULTILIB_EXCEPTIONS += march=armv6-m/mfloat-abi=hard
3248
+MULTILIB_EXCEPTIONS += march=armv6-m
3249
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon/mfloat-abi=hard
3250
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon
3251
+MULTILIB_EXCEPTIONS += march=armv7-a/mfloat-abi=hard
3252
+MULTILIB_EXCEPTIONS += march=armv7-a
3253
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon/mfloat-abi=hard
3254
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon
3255
+MULTILIB_EXCEPTIONS += march=armv7-r/mfloat-abi=hard
3256
+MULTILIB_EXCEPTIONS += march=armv7-r
3257
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon/mfloat-abi=hard
3258
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon
3259
+MULTILIB_EXCEPTIONS += march=armv7-m/mfloat-abi=hard
3260
+MULTILIB_EXCEPTIONS += march=armv7-m
3261
+MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
3262
+MULTILIB_EXCEPTIONS += mfpu=neon
3263
+MULTILIB_EXCEPTIONS += mfloat-abi=hard
742
3264
Index: gcc/config/pa/pa.c
743
3265
===================================================================
744
3266
--- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_7_3_release)
755
3277
crtl->uses_pic_offset_table = 1;
3279
Index: gcc/config/v850/t-rtems
3280
===================================================================
3281
--- a/src/gcc/config/v850/t-rtems (.../tags/gcc_4_7_3_release)
3282
+++ b/src/gcc/config/v850/t-rtems (.../branches/gcc-4_7-branch)
3284
# Custom multilibs for RTEMS
3286
+MULTILIB_OPTIONS = mv850/mv850e/mv850e2/mv850e2v3
3287
+MULTILIB_DIRNAMES = v850 v850e v850e2 v850e2v3
3288
+MULTILIB_MATCHES = mv850e=mv850e1
3290
MULTILIB_MATCHES += mv850e=mv850es
3291
Index: libgfortran/ChangeLog
3292
===================================================================
3293
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_7_3_release)
3294
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_7-branch)
3296
+2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
3298
+ Backport from mainline:
3299
+ 2013-03-20 Tilo Schwarz <tilo@tilo-schwarz.de>
3301
+ PR libfortran/51825
3302
+ * io/list_read.c (nml_read_obj): Don't end the component loop on a
3303
+ nested derived type, but continue with the next loop iteration.
3304
+ (nml_get_obj_data): Don't move the first_nl pointer further in the
3305
+ list if a qualifier was found.
3307
+2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
3309
+ Backport from mainline:
3311
+ PR libfortran/56786
3312
+ * io/list_read.c (nml_parse_qualifier): Remove spurious next_char call
3313
+ when checking for EOF. Use error return mechanism when EOF detected.
3314
+ Do not return FAILURE unless parse_err_msg and parse_err_msg_size have
3315
+ been set. Use hit_eof.
3316
+ (nml_get_obj_data): Likewise use the correct error mechanism.
3317
+ * io/transfer.c (hit_eof): Do not set AFTER_ENDFILE if in namelist
3320
+2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
3322
+ Backport from mainline:
3323
+ 2013-03-25 Tilo Schwarz <tilo@tilo-schwarz.de>
3325
+ PR libfortran/52512
3326
+ * io/list_read.c (nml_parse_qualifier): To check for a derived type
3327
+ don't use the namelist head element type but the current element type.
3328
+ (nml_get_obj_data): Add current namelist element type to
3329
+ nml_parse_qualifier call.
3331
2013-04-11 Release Manager
3333
* GCC 4.7.3 released.
3334
Index: libgfortran/io/list_read.c
3335
===================================================================
3336
--- a/src/libgfortran/io/list_read.c (.../tags/gcc_4_7_3_release)
3337
+++ b/src/libgfortran/io/list_read.c (.../branches/gcc-4_7-branch)
3338
@@ -2028,8 +2028,8 @@
3341
nml_parse_qualifier (st_parameter_dt *dtp, descriptor_dimension *ad,
3342
- array_loop_spec *ls, int rank, char *parse_err_msg,
3343
- size_t parse_err_msg_size,
3344
+ array_loop_spec *ls, int rank, bt nml_elem_type,
3345
+ char *parse_err_msg, size_t parse_err_msg_size,
3349
@@ -2053,7 +2053,7 @@
3350
/* The next character in the stream should be the '('. */
3352
if ((c = next_char (dtp)) == EOF)
3356
/* Process the qualifier, by dimension and triplet. */
3358
@@ -2067,7 +2067,7 @@
3360
/* Process a potential sign. */
3361
if ((c = next_char (dtp)) == EOF)
3367
@@ -2085,11 +2085,12 @@
3368
/* Process characters up to the next ':' , ',' or ')'. */
3371
- if ((c = next_char (dtp)) == EOF)
3374
+ c = next_char (dtp);
3381
is_array_section = 1;
3383
@@ -2112,10 +2113,8 @@
3387
- case ' ': case '\t':
3388
+ case ' ': case '\t': case '\r': case '\n':
3390
- if ((c = next_char (dtp) == EOF))
3395
@@ -2204,7 +2203,7 @@
3396
do not allow excess data to be processed. */
3397
if (is_array_section == 1
3398
|| !(compile_options.allow_std & GFC_STD_GNU)
3399
- || dtp->u.p.ionml->type == BT_DERIVED)
3400
+ || nml_elem_type == BT_DERIVED)
3401
ls[dim].end = ls[dim].start;
3403
dtp->u.p.expanded_read = 1;
3404
@@ -2257,6 +2256,15 @@
3408
+ /* The EOF error message is issued by hit_eof. Return true so that the
3409
+ caller does not use parse_err_msg and parse_err_msg_size to generate
3410
+ an unrelated error message. */
3414
+ dtp->u.p.input_complete = 1;
3420
@@ -2553,17 +2561,17 @@
3421
since a single object can have multiple reads. */
3422
dtp->u.p.expanded_read = 0;
3424
- /* Now loop over the components. Update the component pointer
3425
- with the return value from nml_write_obj. This loop jumps
3426
- past nested derived types by testing if the potential
3427
- component name contains '%'. */
3428
+ /* Now loop over the components. */
3430
for (cmp = nl->next;
3432
- !strncmp (cmp->var_name, obj_name, obj_name_len) &&
3433
- !strchr (cmp->var_name + obj_name_len, '%');
3434
+ !strncmp (cmp->var_name, obj_name, obj_name_len);
3437
+ /* Jump over nested derived type by testing if the potential
3438
+ component name contains '%'. */
3439
+ if (strchr (cmp->var_name + obj_name_len, '%'))
3442
if (nml_read_obj (dtp, cmp, (index_type)(pdata - nl->mem_pos),
3443
pprev_nl, nml_err_msg, nml_err_msg_size,
3444
@@ -2726,12 +2734,12 @@
3447
if ((c = next_char (dtp)) == EOF)
3453
if ((c = next_char (dtp)) == EOF)
3458
snprintf (nml_err_msg, nml_err_msg_size,
3459
@@ -2781,8 +2789,9 @@
3460
if (!is_separator (c))
3461
push_char (dtp, tolower(c));
3462
if ((c = next_char (dtp)) == EOF)
3464
- } while (!( c=='=' || c==' ' || c=='\t' || c =='(' || c =='%' ));
3467
+ while (!( c=='=' || c==' ' || c=='\t' || c =='(' || c =='%' ));
3469
unget_char (dtp, c);
3471
@@ -2842,7 +2851,7 @@
3474
if (nml_parse_qualifier (dtp, nl->dim, nl->ls, nl->var_rank,
3475
- nml_err_msg, nml_err_msg_size,
3476
+ nl->type, nml_err_msg, nml_err_msg_size,
3477
&parsed_rank) == FAILURE)
3479
char *nml_err_msg_end = strchr (nml_err_msg, '\0');
3480
@@ -2857,7 +2866,7 @@
3483
if ((c = next_char (dtp)) == EOF)
3486
unget_char (dtp, c);
3488
else if (nl->var_rank > 0)
3489
@@ -2876,14 +2885,15 @@
3493
- if (*pprev_nl == NULL || !component_flag)
3494
+ /* Don't move first_nl further in the list if a qualifier was found. */
3495
+ if ((*pprev_nl == NULL && !qualifier_flag) || !component_flag)
3501
if ((c = next_char (dtp)) == EOF)
3507
@@ -2898,8 +2908,8 @@
3508
descriptor_dimension chd[1] = { {1, clow, nl->string_length} };
3509
array_loop_spec ind[1] = { {1, clow, nl->string_length, 1} };
3511
- if (nml_parse_qualifier (dtp, chd, ind, -1, nml_err_msg,
3512
- nml_err_msg_size, &parsed_rank)
3513
+ if (nml_parse_qualifier (dtp, chd, ind, -1, nl->type,
3514
+ nml_err_msg, nml_err_msg_size, &parsed_rank)
3517
char *nml_err_msg_end = strchr (nml_err_msg, '\0');
3518
@@ -2921,7 +2931,7 @@
3521
if ((c = next_char (dtp)) == EOF)
3524
unget_char (dtp, c);
3527
@@ -2961,7 +2971,7 @@
3530
if ((c = next_char (dtp)) == EOF)
3536
@@ -2996,6 +3006,17 @@
3540
+ /* The EOF error message is issued by hit_eof. Return true so that the
3541
+ caller does not use nml_err_msg and nml_err_msg_size to generate
3542
+ an unrelated error message. */
3545
+ dtp->u.p.input_complete = 1;
3546
+ unget_char (dtp, c);
3554
Index: libgfortran/io/transfer.c
3555
===================================================================
3556
--- a/src/libgfortran/io/transfer.c (.../tags/gcc_4_7_3_release)
3557
+++ b/src/libgfortran/io/transfer.c (.../branches/gcc-4_7-branch)
3558
@@ -3748,7 +3748,7 @@
3561
generate_error (&dtp->common, LIBERROR_END, NULL);
3562
- if (!is_internal_unit (dtp))
3563
+ if (!is_internal_unit (dtp) && !dtp->u.p.namelist_mode)
3565
dtp->u.p.current_unit->endfile = AFTER_ENDFILE;
3566
dtp->u.p.current_unit->current_record = 0;