aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@linaro.org>2013-06-03 15:36:38 +0200
committerChristophe Lyon <christophe.lyon@linaro.org>2013-06-03 15:36:38 +0200
commitb7f4a06f14d06b8b889e2f6825a1ba5aec1f0412 (patch)
tree185c2253541c56a84ac5d84e7a7581ed54fa0a74
parent0378e0c6a031e5fa8b6fa16b4df73256823b978d (diff)
2013-06-03 Christophe lyon <christophe.lyon@linaro.org>
Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 199594).
-rw-r--r--ChangeLog.linaro4
-rw-r--r--gcc/ChangeLog96
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/trans.c11
-rw-r--r--gcc/config/arm/arm.md32
-rw-r--r--gcc/config/arm/neon.md6
-rw-r--r--gcc/config/arm/t-rtems-eabi51
-rw-r--r--gcc/config/arm/thumb2.md10
-rw-r--r--gcc/config/arm/vfp.md12
-rw-r--r--gcc/config/i386/driver-i386.c41
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/config/i386/i386.md38
-rw-r--r--gcc/config/v850/t-rtems4
-rw-r--r--gcc/coverage.c6
-rw-r--r--gcc/cp/ChangeLog11
-rw-r--r--gcc/cp/semantics.c8
-rw-r--r--gcc/cp/tree.c6
-rw-r--r--gcc/fortran/ChangeLog10
-rw-r--r--gcc/fortran/interface.c3
-rw-r--r--gcc/fortran/intrinsic.texi70
-rw-r--r--gcc/testsuite/ChangeLog15
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C54
-rw-r--r--gcc/testsuite/g++.dg/template/array26.C40
-rw-r--r--gcc/testsuite/gcc.target/i386/pr57264.c18
-rw-r--r--gcc/testsuite/gfortran.dg/typebound_override_4.f9034
-rw-r--r--gcc/testsuite/gnat.dg/specs/last_bit.ads19
-rw-r--r--libgcc/ChangeLog8
-rw-r--r--libgcc/Makefile.in3
-rw-r--r--libstdc++-v3/ChangeLog11
-rw-r--r--libstdc++-v3/include/bits/basic_string.h14
-rw-r--r--libstdc++-v3/src/c++11/future.cc2
-rw-r--r--libstdc++-v3/src/c++11/system_error.cc4
33 files changed, 557 insertions, 93 deletions
diff --git a/ChangeLog.linaro b/ChangeLog.linaro
index 031c23c1245..9c3a619e263 100644
--- a/ChangeLog.linaro
+++ b/ChangeLog.linaro
@@ -1,3 +1,7 @@
+2013-06-03 Christophe lyon <christophe.lyon@linaro.org>
+
+ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 199594).
+
2013-05-14 Yvan Roux <yvan.roux@linaro.org>
gcc/
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 19e3766dd09..d6ed9bbf2bf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,97 @@
+2013-05-22 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/57356
+ * config/i386/i386.md (*movti_internal_rex64): Emit movaps/movups
+ for non-sse2 targets. Simplify mode attribute calculation.
+
+2013-05-17 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/driver-i386.c (host_detect_local_cpu): Determine
+ cache parameters using detect_caches_amd also for CYRIX,
+ NSC and TM2 signatures.
+
+ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
+ Dzianis Kahanovich <mahatma@eu.by>
+
+ PR target/45359
+ PR target/46396
+ * config/i386/driver-i386.c (host_detect_local_cpu): Detect
+ VIA/Centaur processors and determine their cache parameters
+ using detect_caches_amd.
+
+ 2013-05-15 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_option_override_internal): Add
+ PTA_POPCNT to corei7 entry.
+
+2013-05-14 Richard Biener <rguenther@suse.de>
+
+ PR gcov-profile/57269
+ Backport from mainline
+ 2012-06-30 Nathan Sidwell <nathan@acm.org>
+
+ * coverage.c (coverage_init): Read counts file before writing
+ graph header.
+
+2013-05-13 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/57264
+ Backport from mainline
+ 2013-01-22 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/55686
+ * config/i386/i386.md (UNSPEC_STOS): New.
+ (strset_singleop, *strsetdi_rex_1, *strsetsi_1, *strsethi_1,
+ *strsetqi_1): Add UNSPEC_STOS.
+
+2013-05-10 Joey Ye <joey.ye@arm.com>
+
+ Backport from mainline
+ 2012-11-29 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
+
+ PR target/54974
+ * config/arm/arm.md (thumb2_pool_range, pool_range): Add comment on
+ Thumb pool ranges.
+ (thumb1_extendhisi2): Reduce Thumb pool range.
+ (arm_movdi): Likewise.
+ (thumb1_movdi_insn): Likewise.
+ (thumb1_movsi_insn): Likewise.
+ (pic_load_addr_unified): Likewise.
+ (pic_load_addr_32bit): Likewise.
+ (pic_load_addr_thumb1): Likewise.
+ (thumb1_movhf): Likewise.
+ (arm_movsf_soft_insn): Likewise.
+ (thumb1_movsf_soft_insn): Likewise.
+ (movdf_soft_insn): Likewise.
+ (thumb1_movdf_soft_insn): Likewise.
+ * config/arm/neon.md (*neon_mov<mode>): Likewise.
+ (*neon_mov<mode>): Likwise.
+ * config/arm/thumb2.md: (*thumb2_movsi_insn): Likewise.
+ (*thumb2_movhi_insn): Likewise.
+ (*thumb2_extendqisi_v6): Likewise.
+ (*thumb2_zero_extendqisi_v6): Likewise.
+ (*thumb2_zero_extendqisi2_v6): Likewise.
+ * config/arm/vfp.md: (*thumb2_movsi_vfp): Likewise.
+ (*movdi_vfp): Likewise.
+ (*movdi_vfp_cortexa8): Likewise.
+ (*thumb2_movsf_vfp): Likewise.
+ (*thumb2_movdf_vfp): Likewise.
+
+2013-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+ * config/arm/t-rtems-eabi: Remove mthumb/march=armv7 multilib.
+ Add mthumb/march=armv7-a multilib.
+ Add mthumb/march=armv7-r multilib.
+ Add mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard multilib.
+
+2013-05-10 Ralf Corsépius <ralf.corsepius@rtems.org>
+
+ PR target/57237
+ * config/v850/t-rtems: Add more multilibs.
+
2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
Backport from trunk
@@ -20,7 +114,7 @@
2013-04-25 Marek Polacek <polacek@redhat.com>
PR tree-optimization/57066
- * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
+ * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
2013-04-30 Uros Bizjak <ubizjak@gmail.com>
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 752cc68d275..028663d57e6 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20130508
+20130603
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index af231667fe6..3da582dd2d6 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2013-05-26 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Last_Bit>: Add kludge
+ to avoid generating an overflow for -1.
+
2013-04-11 Release Manager
* GCC 4.7.3 released.
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index aabe9b6bd02..e5f8351242a 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -1901,14 +1901,19 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
gnu_result = bitsize_int (bitpos % BITS_PER_UNIT);
gnu_result = size_binop (PLUS_EXPR, gnu_result,
TYPE_SIZE (TREE_TYPE (gnu_prefix)));
- gnu_result = size_binop (MINUS_EXPR, gnu_result,
- bitsize_one_node);
+ /* ??? Avoid a large unsigned result that will overflow when
+ converted to the signed universal_integer. */
+ if (integer_zerop (gnu_result))
+ gnu_result = integer_minus_one_node;
+ else
+ gnu_result
+ = size_binop (MINUS_EXPR, gnu_result, bitsize_one_node);
break;
case Attr_Bit_Position:
gnu_result = gnu_field_bitpos;
break;
- }
+ }
/* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
handling. */
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 85f9609dfd3..9a745e8c1cf 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -278,6 +278,9 @@
; POOL_RANGE is how far away from a constant pool entry that this insn
; can be placed. If the distance is zero, then this insn will never
; reference the pool.
+; Note that for Thumb constant pools the PC value is rounded down to the
+; nearest multiple of four. Therefore, THUMB2_POOL_RANGE (and POOL_RANGE for
+; Thumb insns) should be set to <max_range> - 2.
; NEG_POOL_RANGE is nonzero for insns that can reference a constant pool entry
; before its address. It is set to <max_range> - (8 + <data_size>).
(define_attr "arm_pool_range" "" (const_int 0))
@@ -5058,7 +5061,7 @@
(const_int 2) (const_int 4))
(const_int 4)])
(set_attr "type" "simple_alu_shift,load_byte")
- (set_attr "pool_range" "*,1020")]
+ (set_attr "pool_range" "*,1018")]
)
;; This pattern will only be used when ldsh is not available
@@ -5464,7 +5467,7 @@
(set_attr "type" "*,*,*,load2,store2")
(set_attr "arm_pool_range" "*,*,*,1020,*")
(set_attr "arm_neg_pool_range" "*,*,*,1004,*")
- (set_attr "thumb2_pool_range" "*,*,*,4096,*")
+ (set_attr "thumb2_pool_range" "*,*,*,4094,*")
(set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
)
@@ -5604,7 +5607,7 @@
[(set_attr "length" "4,4,6,2,2,6,4,4")
(set_attr "type" "*,*,*,load2,store2,load2,store2,*")
(set_attr "insn" "*,mov,*,*,*,*,*,mov")
- (set_attr "pool_range" "*,*,*,*,*,1020,*,*")]
+ (set_attr "pool_range" "*,*,*,*,*,1018,*,*")]
)
(define_expand "movsi"
@@ -5764,7 +5767,7 @@
mov\\t%0, %1"
[(set_attr "length" "2,2,4,4,2,2,2,2,2")
(set_attr "type" "*,*,*,*,load1,store1,load1,store1,*")
- (set_attr "pool_range" "*,*,*,*,*,*,1020,*,*")
+ (set_attr "pool_range" "*,*,*,*,*,*,1018,*,*")
(set_attr "conds" "set,clob,*,*,nocond,nocond,nocond,nocond,nocond")])
(define_split
@@ -5857,7 +5860,7 @@
(match_dup 2)] UNSPEC_PIC_BASE))]
"operands[3] = TARGET_THUMB ? GEN_INT (4) : GEN_INT (8);"
[(set_attr "type" "load1,load1,load1")
- (set_attr "pool_range" "4096,4096,1024")
+ (set_attr "pool_range" "4096,4094,1022")
(set_attr "neg_pool_range" "4084,0,0")
(set_attr "arch" "a,t2,t1")
(set_attr "length" "8,6,4")]
@@ -5873,7 +5876,10 @@
"TARGET_32BIT && flag_pic"
"ldr%?\\t%0, %1"
[(set_attr "type" "load1")
- (set_attr "pool_range" "4096")
+ (set (attr "pool_range")
+ (if_then_else (eq_attr "is_thumb" "no")
+ (const_int 4096)
+ (const_int 4094)))
(set (attr "neg_pool_range")
(if_then_else (eq_attr "is_thumb" "no")
(const_int 4084)
@@ -5886,7 +5892,7 @@
"TARGET_THUMB1 && flag_pic"
"ldr\\t%0, %1"
[(set_attr "type" "load1")
- (set (attr "pool_range") (const_int 1024))]
+ (set (attr "pool_range") (const_int 1018))]
)
(define_insn "pic_add_dot_plus_four"
@@ -6691,7 +6697,7 @@
[(set_attr "length" "2")
(set_attr "type" "*,load1,store1,*,*")
(set_attr "insn" "mov,*,*,mov,mov")
- (set_attr "pool_range" "*,1020,*,*,*")
+ (set_attr "pool_range" "*,1018,*,*,*")
(set_attr "conds" "clob,nocond,nocond,nocond,nocond")])
(define_expand "movsf"
@@ -6746,7 +6752,8 @@
[(set_attr "predicable" "yes")
(set_attr "type" "*,load1,store1")
(set_attr "insn" "mov,*,*")
- (set_attr "pool_range" "*,4096,*")
+ (set_attr "arm_pool_range" "*,4096,*")
+ (set_attr "thumb2_pool_range" "*,4094,*")
(set_attr "arm_neg_pool_range" "*,4084,*")
(set_attr "thumb2_neg_pool_range" "*,0,*")]
)
@@ -6768,7 +6775,7 @@
mov\\t%0, %1"
[(set_attr "length" "2")
(set_attr "type" "*,load1,store1,load1,store1,*,*")
- (set_attr "pool_range" "*,*,*,1020,*,*,*")
+ (set_attr "pool_range" "*,*,*,1018,*,*,*")
(set_attr "insn" "*,*,*,*,*,mov,mov")
(set_attr "conds" "clob,nocond,nocond,nocond,nocond,nocond,nocond")]
)
@@ -6857,7 +6864,8 @@
"
[(set_attr "length" "8,12,16,8,8")
(set_attr "type" "*,*,*,load2,store2")
- (set_attr "pool_range" "*,*,*,1020,*")
+ (set_attr "arm_pool_range" "*,*,*,1020,*")
+ (set_attr "thumb2_pool_range" "*,*,*,1018,*")
(set_attr "arm_neg_pool_range" "*,*,*,1004,*")
(set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
)
@@ -6900,7 +6908,7 @@
[(set_attr "length" "4,2,2,6,4,4")
(set_attr "type" "*,load2,store2,load2,store2,*")
(set_attr "insn" "*,*,*,*,*,mov")
- (set_attr "pool_range" "*,*,*,1020,*,*")]
+ (set_attr "pool_range" "*,*,*,1018,*,*")]
)
(define_expand "movxf"
diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md
index 12d5f2dc00a..107fa6caec5 100644
--- a/gcc/config/arm/neon.md
+++ b/gcc/config/arm/neon.md
@@ -197,7 +197,8 @@
(set_attr "type" "*,f_stored,*,f_loadd,*,*,alu_reg,load2,store2")
(set_attr "insn" "*,*,*,*,*,*,mov,*,*")
(set_attr "length" "4,4,4,4,4,4,8,8,8")
- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
+ (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
+ (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,1004,*,*,*,1004,*")])
(define_insn "*neon_mov<mode>"
@@ -242,7 +243,8 @@
(set_attr "type" "*,*,*,*,*,*,alu_reg,load4,store4")
(set_attr "insn" "*,*,*,*,*,*,mov,*,*")
(set_attr "length" "4,8,4,8,8,8,16,8,16")
- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
+ (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
+ (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,996,*,*,*,996,*")])
(define_expand "movti"
diff --git a/gcc/config/arm/t-rtems-eabi b/gcc/config/arm/t-rtems-eabi
index f0e714a9bc5..d81fbf7ec1a 100644
--- a/gcc/config/arm/t-rtems-eabi
+++ b/gcc/config/arm/t-rtems-eabi
@@ -1,8 +1,47 @@
# Custom RTEMS EABI multilibs
-MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7/march=armv7-m
-MULTILIB_DIRNAMES = thumb armv6-m armv7 armv7-m
-MULTILIB_EXCEPTIONS = march=armv6-m march=armv7 march=armv7-m
-MULTILIB_MATCHES =
-MULTILIB_EXCLUSIONS =
-MULTILIB_OSDIRNAMES =
+MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7-a/march=armv7-r/march=armv7-m mfpu=neon mfloat-abi=hard
+MULTILIB_DIRNAMES = thumb armv6-m armv7-a armv7-r armv7-m neon hard
+
+# Enumeration of multilibs
+
+MULTILIB_EXCEPTIONS =
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon
+MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfloat-abi=hard
+# MULTILIB_EXCEPTIONS += mthumb/march=armv6-m
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfloat-abi=hard
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfloat-abi=hard
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon
+MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfloat-abi=hard
+# MULTILIB_EXCEPTIONS += mthumb/march=armv7-m
+MULTILIB_EXCEPTIONS += mthumb/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mthumb/mfpu=neon
+MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=hard
+# MULTILIB_EXCEPTIONS += mthumb
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon
+MULTILIB_EXCEPTIONS += march=armv6-m/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv6-m
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon
+MULTILIB_EXCEPTIONS += march=armv7-a/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv7-a
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon
+MULTILIB_EXCEPTIONS += march=armv7-r/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv7-r
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon
+MULTILIB_EXCEPTIONS += march=armv7-m/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += march=armv7-m
+MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mfpu=neon
+MULTILIB_EXCEPTIONS += mfloat-abi=hard
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md
index 9658ccd1366..06db9fcdd68 100644
--- a/gcc/config/arm/thumb2.md
+++ b/gcc/config/arm/thumb2.md
@@ -184,7 +184,7 @@
str%?\\t%1, %0"
[(set_attr "type" "*,*,simple_alu_imm,*,load1,load1,store1,store1")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*")
+ (set_attr "pool_range" "*,*,*,*,1018,4094,*,*")
(set_attr "neg_pool_range" "*,*,*,*,0,0,*,*")]
)
@@ -219,7 +219,7 @@
ldr%(h%)\\t%0, %1\\t%@ movhi"
[(set_attr "type" "*,*,store1,load1")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,*,*,4096")
+ (set_attr "pool_range" "*,*,*,4094")
(set_attr "neg_pool_range" "*,*,*,250")]
)
@@ -572,7 +572,7 @@
ldr%(sb%)\\t%0, %1"
[(set_attr "type" "simple_alu_shift,load_byte")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,4096")
+ (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")]
)
@@ -585,7 +585,7 @@
ldr%(h%)\\t%0, %1"
[(set_attr "type" "simple_alu_shift,load_byte")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,4096")
+ (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")]
)
@@ -598,7 +598,7 @@
ldr%(b%)\\t%0, %1\\t%@ zero_extendqisi2"
[(set_attr "type" "simple_alu_shift,load_byte")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,4096")
+ (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")]
)
diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index aecb9bf4273..e90b99f1ef2 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -130,7 +130,7 @@
(set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores")
(set_attr "neon_type" "*,*,*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*")
(set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*")
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,*,1020,*")
+ (set_attr "pool_range" "*,*,*,*,1018,4094,*,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*, 0, 0,*,*,*,*,*,1008,*")]
)
@@ -183,7 +183,8 @@
(const_int 8)
(const_int 4))]
(const_int 4)))
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
+ (set_attr "arm_pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
+ (set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
(set_attr "arch" "t2,any,any,any,a,t2,any,any,any,any,any,any")]
)
@@ -230,7 +231,8 @@
* 4")]
(const_int 4)))
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
+ (set_attr "arm_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
+ (set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
(set (attr "ce_count")
(symbol_ref "get_attr_length (insn) / 4"))
@@ -419,7 +421,7 @@
"r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*")
(set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*")
(set_attr "insn" "*,*,*,*,*,*,*,*,mov")
- (set_attr "pool_range" "*,*,*,1020,*,4092,*,*,*")
+ (set_attr "pool_range" "*,*,*,1018,*,4090,*,*,*")
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
)
@@ -513,7 +515,7 @@
(const_int 8)
(const_int 4))]
(const_int 4)))
- (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
+ (set_attr "pool_range" "*,*,*,1018,*,4094,*,*,*")
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
)
diff --git a/gcc/config/i386/driver-i386.c b/gcc/config/i386/driver-i386.c
index 7b5e4d7c145..64bae0de689 100644
--- a/gcc/config/i386/driver-i386.c
+++ b/gcc/config/i386/driver-i386.c
@@ -350,7 +350,10 @@ detect_caches_intel (bool xeon_mp, unsigned max_level,
enum vendor_signatures
{
SIG_INTEL = 0x756e6547 /* Genu */,
- SIG_AMD = 0x68747541 /* Auth */
+ SIG_AMD = 0x68747541 /* Auth */,
+ SIG_CENTAUR = 0x746e6543 /* Cent */,
+ SIG_CYRIX = 0x69727943 /* Cyri */,
+ SIG_NSC = 0x646f6547 /* Geod */
};
enum processor_signatures
@@ -510,7 +513,10 @@ const char *host_detect_local_cpu (int argc, const char **argv)
if (!arch)
{
- if (vendor == SIG_AMD)
+ if (vendor == SIG_AMD
+ || vendor == SIG_CENTAUR
+ || vendor == SIG_CYRIX
+ || vendor == SIG_NSC)
cache = detect_caches_amd (ext_level);
else if (vendor == SIG_INTEL)
{
@@ -549,6 +555,37 @@ const char *host_detect_local_cpu (int argc, const char **argv)
else
processor = PROCESSOR_PENTIUM;
}
+ else if (vendor == SIG_CENTAUR)
+ {
+ if (arch)
+ {
+ switch (family)
+ {
+ case 6:
+ if (model > 9)
+ /* Use the default detection procedure. */
+ processor = PROCESSOR_GENERIC32;
+ else if (model == 9)
+ cpu = "c3-2";
+ else if (model >= 6)
+ cpu = "c3";
+ else
+ processor = PROCESSOR_GENERIC32;
+ break;
+ case 5:
+ if (has_3dnow)
+ cpu = "winchip2";
+ else if (has_mmx)
+ cpu = "winchip2-c6";
+ else
+ processor = PROCESSOR_GENERIC32;
+ break;
+ default:
+ /* We have no idea. */
+ processor = PROCESSOR_GENERIC32;
+ }
+ }
+ }
else
{
switch (family)
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index cd117d40da0..5bcb7e0db92 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -2979,7 +2979,7 @@ ix86_option_override_internal (bool main_args_p)
| PTA_SSSE3 | PTA_CX16},
{"corei7", PROCESSOR_COREI7_64, CPU_COREI7,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
- | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16},
+ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16 | PTA_POPCNT},
{"corei7-avx", PROCESSOR_COREI7_64, CPU_COREI7,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
| PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 627beee98f9..b0e278e917c 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -109,6 +109,7 @@
UNSPEC_CALL_NEEDS_VZEROUPPER
UNSPEC_PAUSE
UNSPEC_LEA_ADDR
+ UNSPEC_STOS
;; For SSE/MMX support:
UNSPEC_FIX_NOTRUNC
@@ -1855,18 +1856,16 @@
[(set_attr "type" "*,*,sselog1,ssemov,ssemov")
(set_attr "prefix" "*,*,maybe_vex,maybe_vex,maybe_vex")
(set (attr "mode")
- (cond [(eq_attr "alternative" "2,3")
- (if_then_else
- (match_test "optimize_function_for_size_p (cfun)")
- (const_string "V4SF")
- (const_string "TI"))
- (eq_attr "alternative" "4")
- (if_then_else
- (ior (match_test "TARGET_SSE_TYPELESS_STORES")
- (match_test "optimize_function_for_size_p (cfun)"))
- (const_string "V4SF")
- (const_string "TI"))]
- (const_string "DI")))])
+ (cond [(eq_attr "alternative" "0,1")
+ (const_string "DI")
+ (ior (not (match_test "TARGET_SSE2"))
+ (match_test "optimize_function_for_size_p (cfun)"))
+ (const_string "V4SF")
+ (and (eq_attr "alternative" "4")
+ (match_test "TARGET_SSE_TYPELESS_STORES"))
+ (const_string "V4SF")
+ ]
+ (const_string "TI")))])
(define_split
[(set (match_operand:TI 0 "nonimmediate_operand" "")
@@ -15912,7 +15911,8 @@
[(parallel [(set (match_operand 1 "memory_operand" "")
(match_operand 2 "register_operand" ""))
(set (match_operand 0 "register_operand" "")
- (match_operand 3 "" ""))])]
+ (match_operand 3 "" ""))
+ (unspec [(const_int 0)] UNSPEC_STOS)])]
""
"ix86_current_function_needs_cld = 1;")
@@ -15921,7 +15921,8 @@
(match_operand:DI 2 "register_operand" "a"))
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
- (const_int 8)))]
+ (const_int 8)))
+ (unspec [(const_int 0)] UNSPEC_STOS)]
"TARGET_64BIT
&& !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosq"
@@ -15934,7 +15935,8 @@
(match_operand:SI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
- (const_int 4)))]
+ (const_int 4)))
+ (unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stos{l|d}"
[(set_attr "type" "str")
@@ -15946,7 +15948,8 @@
(match_operand:HI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
- (const_int 2)))]
+ (const_int 2)))
+ (unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosw"
[(set_attr "type" "str")
@@ -15958,7 +15961,8 @@
(match_operand:QI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
- (const_int 1)))]
+ (const_int 1)))
+ (unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosb"
[(set_attr "type" "str")
diff --git a/gcc/config/v850/t-rtems b/gcc/config/v850/t-rtems
index c3f4ee4f836..c0427e5fd2c 100644
--- a/gcc/config/v850/t-rtems
+++ b/gcc/config/v850/t-rtems
@@ -1,3 +1,7 @@
# Custom multilibs for RTEMS
+MULTILIB_OPTIONS = mv850/mv850e/mv850e2/mv850e2v3
+MULTILIB_DIRNAMES = v850 v850e v850e2 v850e2v3
+MULTILIB_MATCHES = mv850e=mv850e1
+
MULTILIB_MATCHES += mv850e=mv850es
diff --git a/gcc/coverage.c b/gcc/coverage.c
index ce8b175d2f7..c64125ad58b 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -1099,6 +1099,9 @@ coverage_init (const char *filename)
memcpy (da_file_name + prefix_len, filename, len);
strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
+ if (flag_branch_probabilities)
+ read_counts_file ();
+
/* Name of bbg file. */
if (flag_test_coverage && !flag_compare_debug)
{
@@ -1118,9 +1121,6 @@ coverage_init (const char *filename)
gcov_write_unsigned (local_tick);
}
}
-
- if (flag_branch_probabilities)
- read_counts_file ();
}
/* Performs file-level cleanup. Close graph file, generate coverage
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8213ae811ad..4855e1e035d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,14 @@
+2013-05-20 Jason Merrill <jason@redhat.com>
+
+ PR c++/57325
+ * tree.c (build_cplus_array_type): Copy layout info if element
+ type is complete.
+
+2013-05-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/57047
+ * semantics.c (cxx_fold_indirect_ref): Fix thinko.
+
2013-04-21 Eric Botcazou <ebotcazou@adacore.com>
* parser.c (cp_parser_late_return_type_opt): Fix C++ism.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index e189ef90f02..e0c1c1f8de4 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -7412,15 +7412,17 @@ cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
}
}
}
- /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
+ /* *(foo *)fooarrptr => (*fooarrptr)[0] */
else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
&& (same_type_ignoring_top_level_qualifiers_p
(type, TREE_TYPE (TREE_TYPE (subtype)))))
{
tree type_domain;
tree min_val = size_zero_node;
- sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
- if (!sub)
+ tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
+ if (newsub)
+ sub = newsub;
+ else
sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
if (type_domain && TYPE_MIN_VALUE (type_domain))
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index f5a43853b87..4a182e992fc 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -816,10 +816,12 @@ build_cplus_array_type (tree elt_type, tree index_type)
if (TYPE_MAIN_VARIANT (t) != m)
{
- if (COMPLETE_TYPE_P (t) && !COMPLETE_TYPE_P (m))
+ if (COMPLETE_TYPE_P (TREE_TYPE (t)) && !COMPLETE_TYPE_P (m))
{
/* m was built before the element type was complete, so we
- also need to copy the layout info from t. */
+ also need to copy the layout info from t. We might
+ end up doing this multiple times if t is an array of
+ unknown bound. */
tree size = TYPE_SIZE (t);
tree size_unit = TYPE_SIZE_UNIT (t);
unsigned int align = TYPE_ALIGN (t);
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2698389c810..7f6fa7a3e7c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,13 @@
+2013-06-01 Janus Weil <janus@gcc.gnu.org>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/57217
+ * interface.c (check_dummy_characteristics): Symmetrize type check.
+
+2013-05-22 Janne Blomqvist <jb@gcc.gnu.org>
+
+ * intrinsic.texi (RANDOM_SEED): Improve example.
+
2013-05-07 Tobias Burnus <burnus@net-b.de>
Backport from mainline
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index e1f0cb6b2f8..0278995ba52 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -987,7 +987,8 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
bool type_must_agree, char *errmsg, int err_len)
{
/* Check type and rank. */
- if (type_must_agree && !compare_type_rank (s2, s1))
+ if (type_must_agree &&
+ (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
{
if (errmsg != NULL)
snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index ab91122a96b..d0a29cc25ea 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -10134,9 +10134,12 @@ end program
Restarts or queries the state of the pseudorandom number generator used by
@code{RANDOM_NUMBER}.
-If @code{RANDOM_SEED} is called without arguments, it is initialized to
-a default state. The example below shows how to initialize the random
-seed based on the system's time.
+If @code{RANDOM_SEED} is called without arguments, it is initialized
+to a default state. The example below shows how to initialize the
+random seed with a varying seed in order to ensure a different random
+number sequence for each invocation of the program. Note that setting
+any of the seed values to zero should be avoided as it can result in
+poor quality random numbers being generated.
@item @emph{Standard}:
Fortran 95 and later
@@ -10164,20 +10167,53 @@ the @var{SIZE} argument.
@item @emph{Example}:
@smallexample
-SUBROUTINE init_random_seed()
- INTEGER :: i, n, clock
- INTEGER, DIMENSION(:), ALLOCATABLE :: seed
-
- CALL RANDOM_SEED(size = n)
- ALLOCATE(seed(n))
-
- CALL SYSTEM_CLOCK(COUNT=clock)
-
- seed = clock + 37 * (/ (i - 1, i = 1, n) /)
- CALL RANDOM_SEED(PUT = seed)
-
- DEALLOCATE(seed)
-END SUBROUTINE
+subroutine init_random_seed()
+ implicit none
+ integer, allocatable :: seed(:)
+ integer :: i, n, un, istat, dt(8), pid, t(2), s
+ integer(8) :: count, tms
+
+ call random_seed(size = n)
+ allocate(seed(n))
+ ! First try if the OS provides a random number generator
+ open(newunit=un, file="/dev/urandom", access="stream", &
+ form="unformatted", action="read", status="old", iostat=istat)
+ if (istat == 0) then
+ read(un) seed
+ close(un)
+ else
+ ! Fallback to XOR:ing the current time and pid. The PID is
+ ! useful in case one launches multiple instances of the same
+ ! program in parallel.
+ call system_clock(count)
+ if (count /= 0) then
+ t = transfer(count, t)
+ else
+ call date_and_time(values=dt)
+ tms = (dt(1) - 1970) * 365_8 * 24 * 60 * 60 * 1000 &
+ + dt(2) * 31_8 * 24 * 60 * 60 * 1000 &
+ + dt(3) * 24 * 60 * 60 * 60 * 1000 &
+ + dt(5) * 60 * 60 * 1000 &
+ + dt(6) * 60 * 1000 + dt(7) * 1000 &
+ + dt(8)
+ t = transfer(tms, t)
+ end if
+ s = ieor(t(1), t(2))
+ pid = getpid() + 1099279 ! Add a prime
+ s = ieor(s, pid)
+ if (n >= 3) then
+ seed(1) = t(1) + 36269
+ seed(2) = t(2) + 72551
+ seed(3) = pid
+ if (n > 3) then
+ seed(4:) = s + 37 * (/ (i, i = 0, n - 4) /)
+ end if
+ else
+ seed = s + 37 * (/ (i, i = 0, n - 1 ) /)
+ end if
+ end if
+ call random_seed(put=seed)
+end subroutine init_random_seed
@end smallexample
@item @emph{See also}:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index db60bd739a9..d156c635db7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,18 @@
+2013-06-01 Janus Weil <janus@gcc.gnu.org>
+ Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/57217
+ * gfortran.dg/typebound_override_4.f90: New.
+
+2013-05-26 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/specs/last_bit.ads: New test.
+
+2013-05-13 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/57264
+ * gcc.target/i386/pr57264.c: New test.
+
2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
Backport from trunk
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
new file mode 100644
index 00000000000..ee425ea1a15
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
@@ -0,0 +1,54 @@
+// PR c++/57047
+// { dg-require-effective-target c++11 }
+
+template <typename>
+struct A;
+template <typename T>
+struct A <T &>
+{
+ typedef T type;
+};
+template <typename T>
+constexpr T && foo (typename A <T>::type & __t) noexcept
+{
+ return static_cast <T &&>(__t);
+}
+template <class T1, class T2>
+struct B
+{
+ T1 t1;
+ T2 t2;
+ template <class U>
+ constexpr B (U && __x, const T2 & __y) : t1 (foo <U> (__x)), t2 (__y) {}
+};
+static inline constexpr bool
+fn1 (const char c)
+{
+ return ('0' <= c) && (c <= '9');
+}
+static inline constexpr bool
+fn2 (const char c)
+{
+ return (('A' <= c) && (c <= 'Z')) || (('a' <= c) && (c <= 'z'));
+}
+static constexpr bool
+fn3 (const char *const x)
+{
+ return (x[1] == '\0' && x[0] == ']') ? true : (!fn1 (x[0])) ? false : fn3 (&x[1]);
+}
+static constexpr bool
+fn4 (const char *const x)
+{
+ return (x[0] == '\0') ? fn3 (&x[1]) : fn4 (&x[1]);
+}
+static inline constexpr bool
+fn5 (const char *const x)
+{
+ return fn2 (x[0]) ? fn4 (x) : false;
+}
+struct C final
+{
+ constexpr C (const char *const t1) : c (fn5 (t1) ? 199 : 69) {}
+ unsigned c;
+};
+B <C, C> p ("a", "b");
diff --git a/gcc/testsuite/g++.dg/template/array26.C b/gcc/testsuite/g++.dg/template/array26.C
new file mode 100644
index 00000000000..6692071694d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/array26.C
@@ -0,0 +1,40 @@
+// PR c++/57325
+
+class valarray { int _M_data; };
+template < typename > struct SimpleJet { valarray partials; };
+
+template < class C > struct scoped_ptr_impl
+{
+ scoped_ptr_impl (C *):data_ () { }
+ struct Data
+ {
+ C ptr;
+ };
+ Data data_;
+};
+
+template < class, class = int >struct scoped_ptr;
+template < class C, class D > struct scoped_ptr <C[], D >
+{
+ scoped_ptr ():impl_ (0) { }
+ scoped_ptr_impl < C > impl_;
+};
+
+template < typename JetsT > void
+TestJets (JetsT *)
+{
+ typedef typename JetsT::JetType JetT;
+ scoped_ptr < JetT[] > a;
+}
+
+template < typename T > struct SimpleJets
+{
+ typedef SimpleJet < T > JetType;
+ scoped_ptr < SimpleJet < T >[] > vars_;
+};
+
+void fn ()
+{
+ SimpleJets < double >b;
+ TestJets (&b);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr57264.c b/gcc/testsuite/gcc.target/i386/pr57264.c
new file mode 100644
index 00000000000..46fce7f04e5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr57264.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -mcld" } */
+
+void test (int x, int **pp)
+{
+ while (x)
+ {
+ int *ip = *pp;
+ int *op = *pp;
+ while (*ip)
+ {
+ int v = *ip++;
+ *op++ = v + 1;
+ }
+ }
+}
+
+/* { dg-final { scan-assembler-not "stosl" } } */
diff --git a/gcc/testsuite/gfortran.dg/typebound_override_4.f90 b/gcc/testsuite/gfortran.dg/typebound_override_4.f90
new file mode 100644
index 00000000000..2b747a87b6e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/typebound_override_4.f90
@@ -0,0 +1,34 @@
+! { dg-do compile }
+!
+! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
+!
+! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
+
+module base_mod
+ implicit none
+ type base_type
+ contains
+ procedure, pass(map) :: clone => base_clone
+ end type
+contains
+ subroutine base_clone(map,mapout)
+ class(base_type) :: map
+ class(base_type) :: mapout
+ end subroutine
+end module
+
+module r_mod
+ use base_mod
+ implicit none
+ type, extends(base_type) :: r_type
+ contains
+ procedure, pass(map) :: clone => r_clone ! { dg-error "Type/rank mismatch in argument" }
+ end type
+contains
+ subroutine r_clone(map,mapout)
+ class(r_type) :: map
+ class(r_type) :: mapout
+ end subroutine
+end module
+
+! { dg-final { cleanup-modules "base_mod r_mod" } }
diff --git a/gcc/testsuite/gnat.dg/specs/last_bit.ads b/gcc/testsuite/gnat.dg/specs/last_bit.ads
new file mode 100644
index 00000000000..ecfc2540a8a
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/last_bit.ads
@@ -0,0 +1,19 @@
+-- { dg-do compile }
+
+package Last_Bit is
+
+ Max_Components : constant := 100;
+ type Count_Type is new Natural range 0 .. Max_Components;
+ subtype Index_Type is Count_Type range 1 .. Count_Type'Last;
+
+ type List_Type is array (Index_Type range <>) of Integer;
+
+ type Record_Type (Count : Count_Type := 0) is record
+ List : List_Type (1 .. Count);
+ end record;
+
+ Null_Record : Record_Type (Count => 0);
+
+ List_Last_Bit : Integer := Null_Record.List'Last_Bit;
+
+end Last_Bit;
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 1de9c21a9d8..94a2f9cdfc1 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,11 @@
+2013-05-20 Chung-Ju Wu <jasonwucj@gmail.com>
+
+ Backport from mainline:
+ 2012-05-24 Olivier Hainque <hainque@adacore.com>
+
+ * Makefile.in (clean): Remove libgcc_tm.stamp as well.
+ Use a separate command for stamp removals.
+
2013-04-11 Julian Brown <julian@codesourcery.com>
* config/arm/linux-atomic.c (SUBWORD_SYNC_OP, SUBWORD_VAL_CAS)
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index e1cac49b386..c301ff03cae 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -121,7 +121,8 @@ installcheck:
.PHONY: all clean
clean:
- -rm -f config.h libgcc_tm.h stamp-h stmp-ldirs libgcc.map
+ -rm -f config.h libgcc_tm.h libgcc.map
+ -rm -f libgcc_tm.stamp stamp-h stmp-ldirs
-rm -f *$(objext)
-rm -f *.dep
-rm -f *.a
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index ca0360049e5..bde4f5bf50d 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,14 @@
+2013-05-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/basic_string.h (getline): Fix doxygen comments.
+
+2013-05-14 Evgeniy Stepanov <eugenis@google.com>
+
+ * src/c++11/system_error.cc (generic_category_instance): Add
+ initializer.
+ (system_category_instance): Likewise.
+ * src/c++11/future.cc (__fec): Likewise.
+
2013-04-15 Jack Howarth <howarth@bromo.med.uc.edu>
Backport from mainline
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 169daf58613..d4d35e8d822 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -2764,10 +2764,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* Stores characters from @a __is into @a __str until @a __delim is
* found, the end of the stream is encountered, or str.max_size()
- * is reached. If is.width() is non-zero, that is the limit on the
- * number of characters stored into @a __str. Any previous
- * contents of @a __str are erased. If @a __delim was encountered,
- * it is extracted but not stored into @a __str.
+ * is reached. Any previous contents of @a __str are erased. If
+ * @a __delim is encountered, it is extracted but not stored into
+ * @a __str.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
@@ -2782,10 +2781,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* Stores characters from is into @a __str until &apos;\n&apos; is
* found, the end of the stream is encountered, or str.max_size()
- * is reached. If __is.width() is non-zero, that is the limit on
- * the number of characters stored into @a __str. Any previous
- * contents of @a __str are erased. If end of line was
- * encountered, it is extracted but not stored into @a __str.
+ * is reached. Any previous contents of @a __str are erased. If
+ * end of line is encountered, it is extracted but not stored into
+ * @a __str.
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
diff --git a/libstdc++-v3/src/c++11/future.cc b/libstdc++-v3/src/c++11/future.cc
index 05525372618..61ae04d4967 100644
--- a/libstdc++-v3/src/c++11/future.cc
+++ b/libstdc++-v3/src/c++11/future.cc
@@ -60,7 +60,7 @@ namespace
const future_error_category&
__future_category_instance() noexcept
{
- static const future_error_category __fec;
+ static const future_error_category __fec{};
return __fec;
}
}
diff --git a/libstdc++-v3/src/c++11/system_error.cc b/libstdc++-v3/src/c++11/system_error.cc
index 3ee1d9b0b0a..fb0a0241c4d 100644
--- a/libstdc++-v3/src/c++11/system_error.cc
+++ b/libstdc++-v3/src/c++11/system_error.cc
@@ -62,8 +62,8 @@ namespace
}
};
- const generic_error_category generic_category_instance;
- const system_error_category system_category_instance;
+ const generic_error_category generic_category_instance{};
+ const system_error_category system_category_instance{};
}
namespace std _GLIBCXX_VISIBILITY(default)