summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authordoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-05-15 14:50:15 +0000
committerdoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-05-15 14:50:15 +0000
commit22bedbfeb41290d6f8a39122bc039b2b3c161ae4 (patch)
tree61f51a9f53ea171217d245b2c7dae045a1c3a5e2 /debian
parentbe6225b8d2054a24d7ebf27e4fff022dee1da42c (diff)
downloadgcc-49-22bedbfeb41290d6f8a39122bc039b2b3c161ae4.tar.gz
* Update to SVN 20140514 (r210437) from the gcc-4_9-branch.
git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.9@7375 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog6
-rw-r--r--debian/patches/svn-updates.diff705
2 files changed, 646 insertions, 65 deletions
diff --git a/debian/changelog b/debian/changelog
index c36e1df..cd34d3f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+gcc-4.9 (4.9.0-4) UNRELEASED; urgency=medium
+
+ * Update to SVN 20140514 (r210437) from the gcc-4_9-branch.
+
+ -- Matthias Klose <doko@debian.org> Wed, 14 May 2014 22:31:47 +0200
+
gcc-4.9 (4.9.0-3) unstable; urgency=medium
* Update to SVN 20140512 (r210323) from the gcc-4_9-branch.
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 925905d..2667b4a 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 4.9 branch upto 20140508 (r210323).
+# DP: updates from the 4.9 branch upto 20140514 (r210437).
last_updated()
{
cat > ${dir}LAST_UPDATED <<EOF
-Mon May 12 11:40:03 CEST 2014
-Mon May 12 09:40:03 UTC 2014 (revision 210323)
+Wed May 14 22:27:23 CEST 2014
+Wed May 14 20:27:23 UTC 2014 (revision 210437)
EOF
}
@@ -1966,7 +1966,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_9-branch)
@@ -1 +1 @@
-20140422
-+20140512
++20140514
Index: gcc/tree-tailcall.c
===================================================================
--- a/src/gcc/tree-tailcall.c (.../tags/gcc_4_9_0_release)
@@ -2274,7 +2274,78 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_4_9_0_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,546 @@
+@@ -1,3 +1,617 @@
++2014-05-14 Matthias Klose <doko@ubuntu.com>
++
++ Revert:
++ 2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
++ Matthias Klose <doko@ubuntu.com>
++
++ PR driver/61106
++ * optc-gen.awk: Fix option handling for -Wunused-parameter.
++
++2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
++
++ * doc/sourcebuild.texi: (dfp_hw): Document.
++ (p8vector_hw): Likewise.
++ (powerpc_eabi_ok): Likewise.
++ (powerpc_elfv2): Likewise.
++ (powerpc_htm_ok): Likewise.
++ (ppc_recip_hw): Likewise.
++ (vsx_hw): Likewise.
++
++2014-05-13 Jeff Law <law@redhat.com>
++
++ Backports fromm mainline:
++
++ 2014-05-08 Jeff Law <law@redhat.com>
++
++ PR tree-optimization/61009
++ * tree-ssa-threadedge.c (thread_through_normal_block): Return a
++ tri-state rather than a boolean. When a block is too big to
++ thread through, inform caller via negative return value.
++ (thread_across_edge): If a block was too big for normal threading,
++ then it's too big for a joiner too, so remove temporary equivalences
++ and return immediately.
++
++ 2014-04-28 Jeff Law <law@redhat.com>
++
++ PR tree-optimization/60902
++ * tree-ssa-threadedge.c
++ (record_temporary_equivalences_from_stmts_at_dest): Only iterate
++ over real defs when invalidating outputs from statements that do not
++ produce useful outputs for threading.
++
++ 2014-04-23 Jeff Law <law@redhat.com>
++
++ PR tree-optimization/60902
++ * tree-ssa-threadedge.c
++ (record_temporary_equivalences_from_stmts_at_dest): Make sure to
++ invalidate outputs from statements that do not produce useful
++ outputs for threading.
++
++2014-05-13 Richard Biener <rguenther@suse.de>
++
++ PR ipa/60973
++ * tree-inline.c (remap_gimple_stmt): Clear tail call flag,
++ it needs revisiting whether the call still may be tail-called.
++
++2014-05-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/61060
++ * config/i386/i386.c (ix86_expand_set_or_movmem): If count_exp
++ is const0_rtx, return immediately. Don't test count == 0 when
++ it is always true.
++
++2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ Backport from mainline
++ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ PR target/60991
++ * config/avr/avr.c (avr_out_store_psi): Use correct constant
++ to restore Y.
++
+2014-05-09 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
@@ -2821,7 +2892,7 @@ Index: gcc/ChangeLog
2014-04-22 Release Manager
* GCC 4.9.0 released.
-@@ -59,8 +607,7 @@
+@@ -59,8 +678,7 @@
2014-04-11 Tobias Burnus <burnus@net-b.de>
PR other/59055
@@ -2831,7 +2902,7 @@ Index: gcc/ChangeLog
* doc/gcc.texi (Service): Update description in the @menu
* doc/invoke.texi (Option Summary): Remove misplaced and
duplicated @menu.
-@@ -86,15 +633,14 @@
+@@ -86,15 +704,14 @@
2014-04-11 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/60663
@@ -2850,7 +2921,7 @@ Index: gcc/ChangeLog
2014-04-10 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
-@@ -212,9 +758,10 @@
+@@ -212,9 +829,10 @@
2014-04-05 Pitchumani Sivanupandi <Pitchumani.S@atmel.com>
@@ -2864,7 +2935,7 @@ Index: gcc/ChangeLog
* config/avr/avr-c.c (avr_cpu_cpp_builtins): use dev_attribute to check
errata_skip. Add __AVR_ISA_RMW__ builtin macro if RMW ISA available.
* config/avr/avr-devices.c (avr_mcu_types): Update AVR_MCU macro for
-@@ -282,21 +829,21 @@
+@@ -282,21 +900,21 @@
2014-04-04 Martin Jambor <mjambor@suse.cz>
PR ipa/60640
@@ -2897,7 +2968,7 @@ Index: gcc/ChangeLog
moved setting of a lot of flags to set_new_clone_decl_and_node_flags.
2014-04-04 Jeff Law <law@redhat.com>
-@@ -334,8 +881,8 @@
+@@ -334,8 +952,8 @@
PR tree-optimization/60505
* tree-vectorizer.h (struct _stmt_vec_info): Add th field as the
@@ -2908,7 +2979,7 @@ Index: gcc/ChangeLog
* tree-vect-loop.c (new_loop_vec_info):
Initialize LOOP_VINFO_COST_MODEL_THRESHOLD.
* tree-vect-loop.c (vect_analyze_loop_operations):
-@@ -347,8 +894,7 @@
+@@ -347,8 +965,7 @@
2014-04-03 Richard Biener <rguenther@suse.de>
@@ -2918,7 +2989,7 @@ Index: gcc/ChangeLog
(streamer_tree_cache_create): Adjust.
* tree-streamer.c (streamer_tree_cache_add_to_node_array): Adjust
to allow optional nodes array.
-@@ -359,8 +905,7 @@
+@@ -359,8 +976,7 @@
* lto-streamer-out.c (create_output_block): Avoid maintaining
the node array in the writer cache.
(DFS_write_tree): Remove assertion.
@@ -2928,7 +2999,7 @@ Index: gcc/ChangeLog
* lto-streamer-in.c (lto_data_in_create): Adjust for
streamer_tree_cache_create prototype change.
-@@ -381,24 +926,6 @@
+@@ -381,24 +997,6 @@
(Weffc++): Remove Scott's numbering, merge lists and reference
Wnon-virtual-dtor.
@@ -2953,7 +3024,7 @@ Index: gcc/ChangeLog
2014-04-03 Nick Clifton <nickc@redhat.com>
* config/rl78/rl78-expand.md (movqi): Handle (SUBREG (SYMBOL_REF))
-@@ -414,8 +941,8 @@
+@@ -414,8 +1012,8 @@
2014-04-02 Jan Hubicka <hubicka@ucw.cz>
PR ipa/60659
@@ -2964,7 +3035,7 @@ Index: gcc/ChangeLog
(possible_polymorphic_call_targets): For inconsistent contexts
return empty complete list.
-@@ -519,8 +1046,7 @@
+@@ -519,8 +1117,7 @@
2014-04-01 Richard Biener <rguenther@suse.de>
@@ -3647,7 +3718,7 @@ Index: gcc/testsuite/gcc.target/powerpc/pack03.c
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target dfprt } */
++/* { dg-require-effective-target dfp_hw } */
+/* { dg-options "-O2 -mhard-dfp" } */
+
+#include <stddef.h>
@@ -3928,6 +3999,32 @@ Index: gcc/testsuite/gcc.target/avr/torture/pr61055.c
+ exit (0);
+ return 0;
+}
+Index: gcc/testsuite/gcc.target/avr/pr60991.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/avr/pr60991.c (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/gcc.target/avr/pr60991.c (.../branches/gcc-4_9-branch)
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-options "-O1" } */
++
++/* This testcase (simplified from the original bug report) exposes
++ PR60991. The code generated for writing the __int24 value corrupts
++ the frame pointer if the offset is <= 63 + MAX_LD_OFFSET */
++
++#include <stdlib.h>
++
++int main(void)
++{
++ volatile char junk[62];
++ junk[0] = 5;
++ volatile __int24 staticConfig = 0;
++
++ if (junk[0] != 5)
++ abort();
++
++ exit(0);
++ return 0;
++}
Index: gcc/testsuite/gcc.target/i386/vec-may_alias.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/vec-may_alias.c (.../tags/gcc_4_9_0_release)
@@ -3989,6 +4086,43 @@ Index: gcc/testsuite/gcc.target/i386/pr60909-1.c
+ int i = __builtin_ia32_rdrand32_step (u);
+ bar (i);
+}
+Index: gcc/testsuite/gcc.target/i386/pr60902.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr60902.c (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr60902.c (.../branches/gcc-4_9-branch)
+@@ -0,0 +1,32 @@
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++extern void abort ();
++extern void exit (int);
++
++int x;
++
++foo()
++{
++ static int count;
++ count++;
++ if (count > 1)
++ abort ();
++}
++
++static inline int
++frob ()
++{
++ int a;
++ __asm__ ("mov %1, %0\n\t" : "=r" (a) : "m" (x));
++ x++;
++ return a;
++}
++
++int
++main ()
++{
++ int i;
++ for (i = 0; i < 10 && frob () == 0; i++)
++ foo();
++ exit (0);
++}
Index: gcc/testsuite/gcc.target/i386/pr60909-2.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr60909-2.c (.../tags/gcc_4_9_0_release)
@@ -4005,6 +4139,59 @@ Index: gcc/testsuite/gcc.target/i386/pr60909-2.c
+ int i = __builtin_ia32_rdseed_si_step (u);
+ bar (i);
+}
+Index: gcc/testsuite/lib/target-supports.exp
+===================================================================
+--- a/src/gcc/testsuite/lib/target-supports.exp (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/lib/target-supports.exp (.../branches/gcc-4_9-branch)
+@@ -1956,6 +1956,32 @@
+ }]
+ }
+
++# Return 1 if the target supports executing DFP hardware instructions,
++# 0 otherwise. Cache the result.
++
++proc check_dfp_hw_available { } {
++ return [check_cached_effective_target dfp_hw_available {
++ # For now, disable on Darwin
++ if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
++ expr 0
++ } else {
++ check_runtime_nocache dfp_hw_available {
++ volatile _Decimal64 r;
++ volatile _Decimal64 a = 4.0DD;
++ volatile _Decimal64 b = 2.0DD;
++ int main()
++ {
++ asm volatile ("dadd %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ asm volatile ("dsub %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ asm volatile ("dmul %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ asm volatile ("ddiv %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ return 0;
++ }
++ } "-mcpu=power6 -mhard-float"
++ }
++ }]
++}
++
+ # Return 1 if the target supports compiling and assembling UCN, 0 otherwise.
+
+ proc check_effective_target_ucn_nocache { } {
+@@ -4919,6 +4945,7 @@
+ "vsx_hw" { set selected [check_vsx_hw_available] }
+ "p8vector_hw" { set selected [check_p8vector_hw_available] }
+ "ppc_recip_hw" { set selected [check_ppc_recip_hw_available] }
++ "dfp_hw" { set selected [check_dfp_hw_available] }
+ "named_sections" { set selected [check_named_sections_available] }
+ "gc_sections" { set selected [check_gc_sections_available] }
+ "cxa_atexit" { set selected [check_cxa_atexit_available] }
+@@ -4941,6 +4968,7 @@
+ "vsx_hw" { return 1 }
+ "p8vector_hw" { return 1 }
+ "ppc_recip_hw" { return 1 }
++ "dfp_hw" { return 1 }
+ "named_sections" { return 1 }
+ "gc_sections" { return 1 }
+ "cxa_atexit" { return 1 }
Index: gcc/testsuite/gfortran.dg/graphite/pr59817.f
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/graphite/pr59817.f (.../tags/gcc_4_9_0_release)
@@ -4300,15 +4487,6 @@ Index: gcc/testsuite/gcc.dg/vmx/merge-vsx.c
+ check (vec_all_eq (vfh, vfrh), "vfh");
+ check (vec_all_eq (vfl, vfrl), "vfl");
}
-Index: gcc/testsuite/gcc.dg/unused-8a.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/unused-8a.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/unused-8a.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,4 @@
-+/* { dg-do compile } */
-+/* { dg-options "-Wall -Wextra -Wno-unused" } */
-+
-+void foo(int x) { }
Index: gcc/testsuite/gcc.dg/graphite/pr55022.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/graphite/pr55022.c (.../tags/gcc_4_9_0_release)
@@ -4434,6 +4612,30 @@ Index: gcc/testsuite/gcc.dg/lto/pr60911_0.c
+ __builtin_abort ();
+ return 0;
+}
+Index: gcc/testsuite/gcc.dg/pr61060.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr61060.c (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/gcc.dg/pr61060.c (.../branches/gcc-4_9-branch)
+@@ -0,0 +1,19 @@
++/* PR target/61060 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -ftree-ter" } */
++
++typedef __SIZE_TYPE__ size_t;
++
++extern inline __attribute__ ((gnu_inline, always_inline, artificial))
++void *memset (void *dest, int ch, size_t len)
++{
++ return __builtin_memset (dest, ch, len);
++}
++
++char buf[10];
++
++void
++foo (void)
++{
++ memset (buf, sizeof (buf), 0);
++}
Index: gcc/testsuite/gcc.dg/torture/pr60891.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/torture/pr60891.c (.../tags/gcc_4_9_0_release)
@@ -4801,7 +5003,47 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_9_0_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,257 @@
+@@ -1,3 +1,297 @@
++2014-05-14 Matthias Klose <doko@ubuntu.com>
++
++ PR driver/61106
++ * gcc-dg/unused-8a.c: Remove.
++
++2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
++
++ * lib/target-support.exp (check_dfp_hw_available): New function.
++ (is-effective-target): Check $arg for dfp_hw.
++ (is-effective-target-keyword): Likewise.
++ * gcc.target/powerpc/pack03.c: (dg-require-effective-target):
++ Change target to dfp_hw.
++
++2014-05-13 Jeff Law <law@redhat.com>
++
++ Backports from mainline
++
++ 2014-05-08 Jeff Law <law@redhat.com>
++
++ PR tree-optimization/61009
++ * g++.dg/tree-ssa/pr61009.C: New test.
++
++ 2014-04-23 Jeff Law <law@redhat.com>
++
++ PR tree-optimization/60902
++ * gcc.target/i386/pr60902.c: New test.
++
++2014-05-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/61060
++ * gcc.dg/pr61060.c: New test.
++
++2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ Backport from mainline
++ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ PR target/60991
++ * gcc.target/avr/pr60991.c: New testcase.
++
+2014-05-10 Jerry DeLisle <jvdelisle@gcc.gnu>
+
+ Backport from trunk.
@@ -5059,7 +5301,7 @@ Index: gcc/testsuite/ChangeLog
2014-04-22 Release Manager
* GCC 4.9.0 released.
-@@ -51,7 +305,7 @@
+@@ -51,7 +345,7 @@
2014-04-12 Jerry DeLisle <jvdelisle@gcc.gnu>
PR libfortran/60810
@@ -5068,7 +5310,7 @@ Index: gcc/testsuite/ChangeLog
2014-04-11 Steve Ellcey <sellcey@mips.com>
Jakub Jelinek <jakub@redhat.com>
-@@ -135,8 +389,7 @@
+@@ -135,8 +429,7 @@
2014-04-08 Jason Merrill <jason@redhat.com>
@@ -5078,7 +5320,7 @@ Index: gcc/testsuite/ChangeLog
2014-04-08 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-@@ -256,10 +509,10 @@
+@@ -256,10 +549,10 @@
2014-04-04 Martin Jambor <mjambor@suse.cz>
PR ipa/60640
@@ -5093,7 +5335,7 @@ Index: gcc/testsuite/ChangeLog
2014-04-04 Jeff Law <law@redhat.com>
-@@ -371,7 +624,7 @@
+@@ -371,7 +664,7 @@
2014-04-01 Fabien Chêne <fabien@gcc.gnu.org>
@@ -5102,7 +5344,7 @@ Index: gcc/testsuite/ChangeLog
* g++.dg/init/ctor4-1.C: New.
* g++.dg/cpp0x/defaulted2.C: Adjust.
-@@ -459,8 +712,8 @@
+@@ -459,8 +752,8 @@
2014-03-27 Jeff Law <law@redhat.com>
@@ -5113,7 +5355,7 @@ Index: gcc/testsuite/ChangeLog
2014-03-28 Adam Butcher <adam@jessamine.co.uk>
-@@ -493,14 +746,13 @@
+@@ -493,14 +786,13 @@
2014-03-28 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
@@ -5131,7 +5373,7 @@ Index: gcc/testsuite/ChangeLog
of second source operand.
* gcc.target/i386/avx512f-vshuff64x2-2.c: Ditto.
* gcc.target/i386/avx512f-vshufi32x4-2.c: Ditto.
-@@ -635,8 +887,8 @@
+@@ -635,8 +927,8 @@
2014-03-24 Marek Polacek <polacek@redhat.com>
@@ -5142,7 +5384,7 @@ Index: gcc/testsuite/ChangeLog
* c-c++-common/ubsan/overflow-1.c: Check for unwanted output.
* c-c++-common/ubsan/overflow-add-1.c: Likewise.
* c-c++-common/ubsan/overflow-mul-1.c: Likewise.
-@@ -721,8 +973,7 @@
+@@ -721,8 +1013,7 @@
2014-03-21 Tobias Burnus <burnus@net-b.de>
PR fortran/60599
@@ -5152,7 +5394,7 @@ Index: gcc/testsuite/ChangeLog
2014-03-20 Jakub Jelinek <jakub@redhat.com>
-@@ -1540,8 +1791,7 @@
+@@ -1540,8 +1831,7 @@
2014-02-19 Paul Pluzhnikov <ppluzhnikov@google.com>
@@ -5162,7 +5404,7 @@ Index: gcc/testsuite/ChangeLog
2014-02-19 Jakub Jelinek <jakub@redhat.com>
-@@ -1850,8 +2100,7 @@
+@@ -1850,8 +2140,7 @@
2014-02-10 Jakub Jelinek <jakub@redhat.com>
@@ -5172,7 +5414,7 @@ Index: gcc/testsuite/ChangeLog
2014-02-09 Paul Thomas <pault@gcc.gnu.org>
-@@ -3098,8 +3347,8 @@
+@@ -3098,8 +3387,8 @@
* gfortran.dg/vect/fast-math-mgrid-resid.f: Change
-fdump-tree-optimized to -fdump-tree-pcom-details in dg-options and
cleanup-tree-dump from optimized to pcom. Remove scan-tree-dump-times
@@ -5268,6 +5510,78 @@ Index: gcc/testsuite/g++.dg/opt/pr60912.C
+ (new Bar ())->Foo ();
+ return 0;
+}
+Index: gcc/testsuite/g++.dg/init/copy7.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/init/copy7.C (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/g++.dg/init/copy7.C (.../branches/gcc-4_9-branch)
+@@ -0,0 +1,9 @@
++// CWG 5
++
++struct C { };
++C c;
++struct A {
++ A(const A&);
++ A(const C&);
++};
++const volatile A a = c; // Okay
+Index: gcc/testsuite/g++.dg/tree-ssa/pr61009.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/tree-ssa/pr61009.C (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/g++.dg/tree-ssa/pr61009.C (.../branches/gcc-4_9-branch)
+@@ -0,0 +1,53 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fno-tree-vrp -std=c++11 -fno-strict-aliasing -fdump-tree-dom1" } */
++
++#include <stdio.h>
++struct Field {
++ virtual int Compare(void*, void*);
++};
++extern int NKF, NR;
++extern int idxs[];
++extern Field* the_field;
++extern int *incs;
++extern char** fptrs;
++inline int doCmp(int this_row_offset, int field_idx) {
++ void *p = fptrs[field_idx] + this_row_offset * incs[field_idx];
++ return the_field->Compare(p,0);
++}
++bool Test(void) {
++
++ int row_offset = 0;
++
++ for (; row_offset < NR; ++row_offset) {
++
++ bool is_different = false;
++ for (int j = 0; j < NKF ; ++j) {
++ int field_idx = idxs[j];
++ int cmp = doCmp(row_offset, field_idx);
++ fprintf (stderr, "cmp=%d\n",cmp);
++
++ if (cmp == 0) {
++ continue;
++ }
++ if (cmp > 0) {
++ is_different = true;
++ break;
++ } else {
++ fprintf (stderr, "Incorrect\n");
++ return false;
++ }
++ }
++ if (!is_different) {
++
++ return false;
++ }
++ }
++
++ return true;
++}
++
++// The block ending with cmp == 0 should not be threaded. ie,
++// there should be a single == 0 comparison in the dump file.
++
++// { dg-final { scan-tree-dump-times "== 0" 1 "dom1" } }
++// { dg-final { cleanup-tree-dump "dom1" } }
Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C (.../tags/gcc_4_9_0_release)
@@ -5311,6 +5625,41 @@ Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C
+{
+ run_with_locks ([] { }, 0, 0);
+}
+Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C (.../branches/gcc-4_9-branch)
+@@ -0,0 +1,30 @@
++// PR c++/61151
++// { dg-do compile { target c++11 } }
++
++struct B
++{
++ void foo () {}
++};
++
++template <class>
++struct A
++{
++ template <class> void bar ();
++ B a;
++};
++
++template <class T>
++template <class U>
++void
++A<T>::bar ()
++{
++ auto f = [this] () { auto g = [=] () { a.foo (); }; g (); };
++ f ();
++}
++
++int
++main ()
++{
++ A<int> a;
++ a.bar <int> ();
++}
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C (.../tags/gcc_4_9_0_release)
@@ -5763,7 +6112,17 @@ Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_9_0_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,44 @@
+@@ -1,3 +1,54 @@
++2014-05-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/61151
++ * lambda.c (is_this): Allow capture proxies too.
++
++ DR 5
++ PR c++/60019
++ * call.c (build_user_type_conversion_1): The copy-init temporary
++ is cv-unqualified.
++
+2014-05-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/61083
@@ -6111,25 +6470,53 @@ Index: gcc/cp/parser.c
OMP_PARALLEL_COMBINED (stmt) = 1;
return stmt;
}
+Index: gcc/cp/call.c
+===================================================================
+--- a/src/gcc/cp/call.c (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/cp/call.c (.../branches/gcc-4_9-branch)
+@@ -3677,11 +3677,20 @@
+ return cand;
+ }
+
++ tree convtype;
++ if (!DECL_CONSTRUCTOR_P (cand->fn))
++ convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
++ else if (cand->second_conv->kind == ck_rvalue)
++ /* DR 5: [in the first step of copy-initialization]...if the function
++ is a constructor, the call initializes a temporary of the
++ cv-unqualified version of the destination type. */
++ convtype = cv_unqualified (totype);
++ else
++ convtype = totype;
+ /* Build the user conversion sequence. */
+ conv = build_conv
+ (ck_user,
+- (DECL_CONSTRUCTOR_P (cand->fn)
+- ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
++ convtype,
+ build_identity_conv (TREE_TYPE (expr), expr));
+ conv->cand = cand;
+ if (cand->viable == -1)
Index: gcc/cp/lambda.c
===================================================================
--- a/src/gcc/cp/lambda.c (.../tags/gcc_4_9_0_release)
+++ b/src/gcc/cp/lambda.c (.../branches/gcc-4_9-branch)
-@@ -201,6 +201,13 @@
+@@ -201,6 +201,14 @@
return lambda;
}
+static inline bool
+is_this (tree t)
+{
-+ return (TREE_CODE (t) == PARM_DECL
++ return ((TREE_CODE (t) == PARM_DECL
++ || TREE_CODE (t) == VAR_DECL)
+ && DECL_NAME (t) == this_identifier);
+}
+
/* Returns the type to use for the FIELD_DECL corresponding to the
capture of EXPR.
The caller should add REFERENCE_TYPE for capture by reference. */
-@@ -216,8 +223,9 @@
+@@ -216,8 +224,9 @@
}
else
type = non_reference (unlowered_expr_type (expr));
@@ -6452,26 +6839,6 @@ Index: gcc/opts.c
if (comma == NULL)
break;
-Index: gcc/optc-gen.awk
-===================================================================
---- a/src/gcc/optc-gen.awk (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/optc-gen.awk (.../branches/gcc-4_9-branch)
-@@ -406,11 +406,13 @@
- if (opt_var_name != "") {
- condition = "!opts_set->x_" opt_var_name
- if (thisenableif[j] != "") {
-- condition = condition " && (" thisenableif[j] ")"
-+ value = "(" thisenableif[j] ")"
-+ } else {
-+ value = "value"
- }
- print " if (" condition ")"
- print " handle_generated_option (opts, opts_set,"
-- print " " opt_enum(thisenable[j]) ", NULL, value,"
-+ print " " opt_enum(thisenable[j]) ", NULL, " value ","
- print " lang_mask, kind, loc, handlers, dc);"
- } else {
- print "#error " thisenable[j] " does not have a Var() flag"
Index: gcc/common/config/msp430/msp430-common.c
===================================================================
--- a/src/gcc/common/config/msp430/msp430-common.c (.../tags/gcc_4_9_0_release)
@@ -7415,7 +7782,19 @@ Index: gcc/tree-inline.c
===================================================================
--- a/src/gcc/tree-inline.c (.../tags/gcc_4_9_0_release)
+++ b/src/gcc/tree-inline.c (.../branches/gcc-4_9-branch)
-@@ -3119,7 +3119,8 @@
+@@ -1485,6 +1485,11 @@
+ /* Create a new deep copy of the statement. */
+ copy = gimple_copy (stmt);
+
++ /* Clear flags that need revisiting. */
++ if (is_gimple_call (copy)
++ && gimple_call_tail_p (copy))
++ gimple_call_set_tail (copy, false);
++
+ /* Remap the region numbers for __builtin_eh_{pointer,filter},
+ RESX and EH_DISPATCH. */
+ if (id->eh_map)
+@@ -3119,7 +3124,8 @@
{
var = return_slot;
gcc_assert (TREE_CODE (var) != SSA_NAME);
@@ -7889,7 +8268,32 @@ Index: gcc/config/i386/i386.c
#define PTA_BROADWELL \
(PTA_HASWELL | PTA_ADX | PTA_PRFCHW | PTA_RDSEED)
#define PTA_BONNELL \
-@@ -24390,7 +24390,8 @@
+@@ -24151,8 +24151,13 @@
+ align = MEM_ALIGN (dst) / BITS_PER_UNIT;
+
+ if (CONST_INT_P (count_exp))
+- min_size = max_size = probable_max_size = count = expected_size
+- = INTVAL (count_exp);
++ {
++ min_size = max_size = probable_max_size = count = expected_size
++ = INTVAL (count_exp);
++ /* When COUNT is 0, there is nothing to do. */
++ if (!count)
++ return true;
++ }
+ else
+ {
+ if (min_size_exp)
+@@ -24161,7 +24166,7 @@
+ max_size = INTVAL (max_size_exp);
+ if (probable_max_size_exp)
+ probable_max_size = INTVAL (probable_max_size_exp);
+- if (CONST_INT_P (expected_size_exp) && count == 0)
++ if (CONST_INT_P (expected_size_exp))
+ expected_size = INTVAL (expected_size_exp);
+ }
+
+@@ -24390,7 +24395,8 @@
if (jump_around_label == NULL_RTX)
jump_around_label = gen_label_rtx ();
emit_cmp_and_jump_insns (count_exp, GEN_INT (dynamic_check - 1),
@@ -7899,7 +8303,7 @@ Index: gcc/config/i386/i386.c
predict_jump (REG_BR_PROB_BASE * 90 / 100);
if (issetmem)
set_storage_via_libcall (dst, count_exp, val_exp, false);
-@@ -35406,7 +35407,8 @@
+@@ -35406,7 +35412,8 @@
else
op2 = gen_rtx_SUBREG (SImode, op0, 0);
@@ -7909,7 +8313,7 @@ Index: gcc/config/i386/i386.c
target = gen_reg_rtx (SImode);
pat = gen_rtx_GEU (VOIDmode, gen_rtx_REG (CCCmode, FLAGS_REG),
-@@ -35448,7 +35450,8 @@
+@@ -35448,7 +35455,8 @@
const0_rtx);
emit_insn (gen_rtx_SET (VOIDmode, op2, pat));
@@ -8015,6 +8419,15 @@ Index: gcc/config/avr/avr.c
case CC_SET_CZN:
/* Insn sets the Z,N,C flags of CC to recog_operand[0].
The V flag may or may not be known but that's ok because
+@@ -3987,7 +3993,7 @@
+ "std Y+61,%A1" CR_TAB
+ "std Y+62,%B1" CR_TAB
+ "std Y+63,%C1" CR_TAB
+- "sbiw r28,%o0-60", op, plen, -5);
++ "sbiw r28,%o0-61", op, plen, -5);
+
+ return avr_asm_len ("subi r28,lo8(-%o0)" CR_TAB
+ "sbci r29,hi8(-%o0)" CR_TAB
@@ -6284,7 +6290,7 @@
if (REG_P (xop[2]))
@@ -9757,6 +10170,168 @@ Index: gcc/tree-vect-slp.c
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+Index: gcc/tree-ssa-threadedge.c
+===================================================================
+--- a/src/gcc/tree-ssa-threadedge.c (.../tags/gcc_4_9_0_release)
++++ b/src/gcc/tree-ssa-threadedge.c (.../branches/gcc-4_9-branch)
+@@ -387,8 +387,35 @@
+ && (gimple_code (stmt) != GIMPLE_CALL
+ || gimple_call_lhs (stmt) == NULL_TREE
+ || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME))
+- continue;
++ {
++ /* STMT might still have DEFS and we need to invalidate any known
++ equivalences for them.
+
++ Consider if STMT is a GIMPLE_ASM with one or more outputs that
++ feeds a conditional inside a loop. We might derive an equivalence
++ due to the conditional. */
++ tree op;
++ ssa_op_iter iter;
++
++ if (backedge_seen)
++ FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
++ {
++ /* This call only invalidates equivalences created by
++ PHI nodes. This is by design to keep the cost of
++ of invalidation reasonable. */
++ invalidate_equivalences (op, stack, src_map, dst_map);
++
++ /* However, conditionals can imply values for real
++ operands as well. And those won't be recorded in the
++ maps. In fact, those equivalences may be recorded totally
++ outside the threading code. We can just create a new
++ temporary NULL equivalence here. */
++ record_temporary_equivalence (op, NULL_TREE, stack);
++ }
++
++ continue;
++ }
++
+ /* The result of __builtin_object_size depends on all the arguments
+ of a phi node. Temporarily using only one edge produces invalid
+ results. For example
+@@ -939,9 +966,14 @@
+ SIMPLIFY is a pass-specific function used to simplify statements.
+
+ Our caller is responsible for restoring the state of the expression
+- and const_and_copies stacks. */
++ and const_and_copies stacks.
+
+-static bool
++ Positive return value is success. Zero return value is failure, but
++ the block can still be duplicated as a joiner in a jump thread path,
++ negative indicates the block should not be duplicated and thus is not
++ suitable for a joiner in a jump threading path. */
++
++static int
+ thread_through_normal_block (edge e,
+ gimple dummy_cond,
+ bool handle_dominating_asserts,
+@@ -963,7 +995,7 @@
+ /* PHIs create temporary equivalences. */
+ if (!record_temporary_equivalences_from_phis (e, stack, *backedge_seen_p,
+ src_map, dst_map))
+- return false;
++ return 0;
+
+ /* Now walk each statement recording any context sensitive
+ temporary equivalences we can detect. */
+@@ -971,8 +1003,16 @@
+ = record_temporary_equivalences_from_stmts_at_dest (e, stack, simplify,
+ *backedge_seen_p,
+ src_map, dst_map);
++
++ /* If we didn't look at all the statements, the most likely reason is
++ there were too many and thus duplicating this block is not profitable.
++
++ Also note if we do not look at all the statements, then we may not
++ have invalidated equivalences that are no longer valid if we threaded
++ around a loop. Thus we must signal to our caller that this block
++ is not suitable for use as a joiner in a threading path. */
+ if (!stmt)
+- return false;
++ return -1;
+
+ /* If we stopped at a COND_EXPR or SWITCH_EXPR, see if we know which arm
+ will be taken. */
+@@ -996,7 +1036,7 @@
+ if (dest == NULL
+ || dest == e->dest
+ || bitmap_bit_p (visited, dest->index))
+- return false;
++ return 0;
+
+ /* Only push the EDGE_START_JUMP_THREAD marker if this is
+ first edge on the path. */
+@@ -1030,10 +1070,10 @@
+ visited,
+ path,
+ backedge_seen_p);
+- return true;
++ return 1;
+ }
+ }
+- return false;
++ return 0;
+ }
+
+ /* We are exiting E->src, see if E->dest ends with a conditional
+@@ -1085,9 +1125,12 @@
+ if (backedge_seen)
+ simplify = dummy_simplify;
+
+- if (thread_through_normal_block (e, dummy_cond, handle_dominating_asserts,
+- stack, simplify, path, visited,
+- &backedge_seen, src_map, dst_map))
++ int threaded = thread_through_normal_block (e, dummy_cond,
++ handle_dominating_asserts,
++ stack, simplify, path,
++ visited, &backedge_seen,
++ src_map, dst_map);
++ if (threaded > 0)
+ {
+ propagate_threaded_block_debug_into (path->last ()->e->dest,
+ e->dest);
+@@ -1100,10 +1143,27 @@
+ }
+ else
+ {
+- /* There should be no edges on the path, so no need to walk through
+- the vector entries. */
++ /* Negative and zero return values indicate no threading was possible,
++ thus there should be no edges on the thread path and no need to walk
++ through the vector entries. */
+ gcc_assert (path->length () == 0);
+ path->release ();
++
++ /* A negative status indicates the target block was deemed too big to
++ duplicate. Just quit now rather than trying to use the block as
++ a joiner in a jump threading path.
++
++ This prevents unnecessary code growth, but more importantly if we
++ do not look at all the statements in the block, then we may have
++ missed some invalidations if we had traversed a backedge! */
++ if (threaded < 0)
++ {
++ BITMAP_FREE (visited);
++ BITMAP_FREE (src_map);
++ BITMAP_FREE (dst_map);
++ remove_temporary_equivalences (stack);
++ return;
++ }
+ }
+
+ /* We were unable to determine what out edge from E->dest is taken. However,
+@@ -1185,7 +1245,7 @@
+ handle_dominating_asserts,
+ stack, simplify, path, visited,
+ &backedge_seen,
+- src_map, dst_map);
++ src_map, dst_map) > 0;
+
+ /* If we were able to thread through a successor of E->dest, then
+ record the jump threading opportunity. */
Index: libgo/configure
===================================================================
--- a/src/libgo/configure (.../tags/gcc_4_9_0_release)