diff options
author | doko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca> | 2014-05-15 14:50:15 +0000 |
---|---|---|
committer | doko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca> | 2014-05-15 14:50:15 +0000 |
commit | 22bedbfeb41290d6f8a39122bc039b2b3c161ae4 (patch) | |
tree | 61f51a9f53ea171217d245b2c7dae045a1c3a5e2 /debian | |
parent | be6225b8d2054a24d7ebf27e4fff022dee1da42c (diff) | |
download | gcc-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/changelog | 6 | ||||
-rw-r--r-- | debian/patches/svn-updates.diff | 705 |
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) |