From 7c033670819a0c6c50a3edd7a8dade0649d847f2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 20 Feb 2013 17:12:51 +0100 Subject: [PATCH] 4.8.0-0.14 --- .gitignore | 1 + gcc.spec | 38 +++-- gcc48-asan-fix.patch | 196 ------------------------- gcc48-pr54117.patch | 198 ------------------------- gcc48-pr56258.patch | 30 ++++ gcc48-pr56265.patch | 132 +++++++++++++++++ gcc48-pr56405.patch | 36 +++++ gcc48-unused-locals.patch | 297 ++++++++++++++++++++++++++++++++++++++ sources | 2 +- 9 files changed, 525 insertions(+), 405 deletions(-) delete mode 100644 gcc48-asan-fix.patch delete mode 100644 gcc48-pr54117.patch create mode 100644 gcc48-pr56258.patch create mode 100644 gcc48-pr56265.patch create mode 100644 gcc48-pr56405.patch create mode 100644 gcc48-unused-locals.patch diff --git a/.gitignore b/.gitignore index 57f0aa9..7f5d205 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ /gcc-4.8.0-20130211.tar.bz2 /gcc-4.8.0-20130213.tar.bz2 /gcc-4.8.0-20130215.tar.bz2 +/gcc-4.8.0-20130220.tar.bz2 diff --git a/gcc.spec b/gcc.spec index bfab4b8..8861297 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20130215 -%global SVNREV 196084 +%global DATE 20130220 +%global SVNREV 196173 %global gcc_version 4.8.0 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 0.13 +%global gcc_release 0.14 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha @@ -102,7 +102,7 @@ BuildRequires: binutils >= 2.20.51.0.2-12 # -static is used several times. BuildRequires: glibc-static BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, sharutils -BuildRequires: texinfo, texinfo-tex +BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man BuildRequires: systemtap-sdt-devel >= 1.3 %if %{build_go} BuildRequires: hostname @@ -194,9 +194,11 @@ Patch10: gcc48-pr38757.patch Patch11: gcc48-libstdc++-docs.patch Patch12: gcc48-no-add-needed.patch Patch13: gcc48-pr55608.patch -Patch14: gcc48-asan-fix.patch -Patch15: gcc48-pr54117.patch -Patch16: gcc48-asan-speedup.patch +Patch14: gcc48-asan-speedup.patch +Patch15: gcc48-pr56258.patch +Patch16: gcc48-pr56405.patch +Patch17: gcc48-unused-locals.patch +Patch18: gcc48-pr56265.patch Patch1000: fastjar-0.97-segfault.patch Patch1001: fastjar-0.97-len1.patch @@ -749,9 +751,11 @@ package or when debugging this package. %endif %patch12 -p0 -b .no-add-needed~ %patch13 -p0 -b .pr55608~ -%patch14 -p0 -b .asan-fix~ -%patch15 -p0 -b .pr54117~ -%patch16 -p0 -b .asan-speedup~ +%patch14 -p0 -b .asan-speedup~ +%patch15 -p0 -b .pr56258~ +%patch16 -p0 -b .pr56405~ +%patch17 -p0 -b .unused-locals~ +%patch18 -p0 -b .pr56265~ %if 0%{?_enable_debug_packages} cat > split-debuginfo.sh <<\EOF @@ -2975,6 +2979,20 @@ fi %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin %changelog +* Wed Feb 20 2013 Jakub Jelinek 4.8.0-0.14 +- updated from trunk + - PRs asan/56330, c++/51242, c++/54276, c++/56373, libquadmath/56379, + middle-end/55889, middle-end/56349, pch/54117, + rtl-optimization/56348, target/52555, target/54685, target/56214, + target/56347, tree-optimization/55334, tree-optimization/56321, + tree-optimization/56350, tree-optimization/56366, + tree-optimization/56381, tree-optimization/56384, + tree-optimization/56396, tree-optimization/56398 +- add BuildRequires: /usr/bin/pod2man to fix man pages generation +- don't ICE on bogus inline asm in kernel (#912857, PR inline-asm/56405) +- fix up info page building with texinfo 5.0 (PR bootstrap/56258) +- devirtualization ICE fix (PR tree-optimization/56265) + * Fri Feb 15 2013 Jakub Jelinek 4.8.0-0.13 - updated from trunk - PRs bootstrap/56327, c++/52026, c++/54922, c++/55003, c++/55220, diff --git a/gcc48-asan-fix.patch b/gcc48-asan-fix.patch deleted file mode 100644 index 3bc7852..0000000 --- a/gcc48-asan-fix.patch +++ /dev/null @@ -1,196 +0,0 @@ -2013-02-15 Jakub Jelinek - - PR sanitizer/56330 - * asan.c (get_mem_refs_of_builtin_call): Fix up indentation. - (instrument_mem_region_access): Create conditional even when - the start has been already instrumented. Don't record - conditional instrumentation in the hash table. Update *iter - after second build_check_stmt call. - (instrument_builtin_call): For consistency test != NULL_TREE - in all start checks. - - * c-c++-common/asan/no-redundant-instrumentation-1.c: Pass - 3 instead of sizeof (tab) - 1 as last argument. - * c-c++-common/asan/pr56330.c: New test. - ---- gcc/asan.c.jj 2013-02-14 14:45:01.428038792 +0100 -+++ gcc/asan.c 2013-02-15 09:37:18.614963383 +0100 -@@ -747,20 +747,17 @@ get_mem_refs_of_builtin_call (const gimp - - got_reference_p = true; - } -- else -- { -- if (dest) -- { -- dst->start = dest; -- dst->access_size = access_size; -- *dst_len = NULL_TREE; -- *dst_is_store = is_store; -- *dest_is_deref = true; -- got_reference_p = true; -- } -- } -+ else if (dest) -+ { -+ dst->start = dest; -+ dst->access_size = access_size; -+ *dst_len = NULL_TREE; -+ *dst_is_store = is_store; -+ *dest_is_deref = true; -+ got_reference_p = true; -+ } - -- return got_reference_p; -+ return got_reference_p; - } - - /* Return true iff a given gimple statement has been instrumented. -@@ -1535,8 +1532,15 @@ instrument_mem_region_access (tree base, - - /* If the beginning of the memory region has already been - instrumented, do not instrument it. */ -- if (has_mem_ref_been_instrumented (base, 1)) -- goto after_first_instrumentation; -+ bool start_instrumented = has_mem_ref_been_instrumented (base, 1); -+ -+ /* If the end of the memory region has already been instrumented, do -+ not instrument it. */ -+ tree end = asan_mem_ref_get_end (base, len); -+ bool end_instrumented = has_mem_ref_been_instrumented (end, 1); -+ -+ if (start_instrumented && end_instrumented) -+ return; - - if (!is_gimple_constant (len)) - { -@@ -1565,34 +1569,36 @@ instrument_mem_region_access (tree base, - gsi = gsi_start_bb (then_bb); - } - -- /* Instrument the beginning of the memory region to be accessed, -- and arrange for the rest of the intrumentation code to be -- inserted in the then block *after* the current gsi. */ -- build_check_stmt (location, base, &gsi, /*before_p=*/true, is_store, 1); -- -- if (then_bb) -- /* We are in the case where the length of the region is not -- constant; so instrumentation code is being generated in the -- 'then block' of the 'if (len != 0) condition. Let's arrange -- for the subsequent instrumentation statements to go in the -- 'then block'. */ -- gsi = gsi_last_bb (then_bb); -- else -- *iter = gsi; -- -- update_mem_ref_hash_table (base, 1); -+ if (!start_instrumented) -+ { -+ /* Instrument the beginning of the memory region to be accessed, -+ and arrange for the rest of the intrumentation code to be -+ inserted in the then block *after* the current gsi. */ -+ build_check_stmt (location, base, &gsi, /*before_p=*/true, is_store, 1); -+ -+ if (then_bb) -+ /* We are in the case where the length of the region is not -+ constant; so instrumentation code is being generated in the -+ 'then block' of the 'if (len != 0) condition. Let's arrange -+ for the subsequent instrumentation statements to go in the -+ 'then block'. */ -+ gsi = gsi_last_bb (then_bb); -+ else -+ { -+ *iter = gsi; -+ /* Don't remember this access as instrumented, if length -+ is unknown. It might be zero and not being actually -+ instrumented, so we can't rely on it being instrumented. */ -+ update_mem_ref_hash_table (base, 1); -+ } -+ } - -- after_first_instrumentation: -+ if (end_instrumented) -+ return; - - /* We want to instrument the access at the end of the memory region, - which is at (base + len - 1). */ - -- /* If the end of the memory region has already been instrumented, do -- not instrument it. */ -- tree end = asan_mem_ref_get_end (base, len); -- if (has_mem_ref_been_instrumented (end, 1)) -- return; -- - /* offset = len - 1; */ - len = unshare_expr (len); - tree offset; -@@ -1640,7 +1646,10 @@ instrument_mem_region_access (tree base, - gimple_set_location (region_end, location); - gimple_seq_add_stmt_without_update (&seq, region_end); - gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT); -- gsi_prev (&gsi); -+ if (!start_instrumented || then_bb == NULL) -+ gsi_prev (&gsi); -+ else -+ gsi = gsi_last_bb (then_bb); - - /* _2 = _1 + offset; */ - region_end = -@@ -1655,7 +1664,10 @@ instrument_mem_region_access (tree base, - build_check_stmt (location, gimple_assign_lhs (region_end), - &gsi, /*before_p=*/false, is_store, 1); - -- update_mem_ref_hash_table (end, 1); -+ if (then_bb == NULL) -+ update_mem_ref_hash_table (end, 1); -+ -+ *iter = gsi_for_stmt (gsi_stmt (*iter)); - } - - /* Instrument the call (to the builtin strlen function) pointed to by -@@ -1783,7 +1795,7 @@ instrument_builtin_call (gimple_stmt_ite - } - else if (src0_len || src1_len || dest_len) - { -- if (src0.start) -+ if (src0.start != NULL_TREE) - instrument_mem_region_access (src0.start, src0_len, - iter, loc, /*is_store=*/false); - if (src1.start != NULL_TREE) ---- gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-1.c.jj 2013-02-13 11:53:41.000000000 +0100 -+++ gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-1.c 2013-02-15 09:51:47.485080706 +0100 -@@ -45,7 +45,7 @@ test1 () - /* There are 2 calls to __builtin___asan_report_store1 and 2 calls - to __builtin___asan_report_load1 to instrument the store to - (subset of) the memory region of tab. */ -- __builtin_memcpy (&tab[1], foo, sizeof (tab) - 1); -+ __builtin_memcpy (&tab[1], foo, 3); - - /* This should not generate a __builtin___asan_report_load1 because - the reference to tab[1] has been already instrumented above. */ ---- gcc/testsuite/c-c++-common/asan/pr56330.c.jj 2013-02-15 09:43:19.293845146 +0100 -+++ gcc/testsuite/c-c++-common/asan/pr56330.c 2013-02-15 09:42:58.000000000 +0100 -@@ -0,0 +1,23 @@ -+/* PR sanitizer/56330 */ -+/* { dg-do compile } */ -+ -+char e[200]; -+ -+struct S -+{ -+ char a[100]; -+ char b[100]; -+} s; -+ -+void -+foo (void) -+{ -+ __builtin_memcmp (s.a, e, 100); -+ __builtin_memcmp (s.a, e, 200); -+} -+ -+void -+bar (int *a, char *b, char *c) -+{ -+ __builtin_memmove (c, b, a[b[0]]); -+} diff --git a/gcc48-pr54117.patch b/gcc48-pr54117.patch deleted file mode 100644 index 5be2b07..0000000 --- a/gcc48-pr54117.patch +++ /dev/null @@ -1,198 +0,0 @@ -2013-02-15 Jakub Jelinek - Steven Bosscher - - PR pch/54117 - * c-opts.c (c_common_post_options): If debug info is enabled - and non-dwarf*, refuse to load PCH files and when writing PCH - file warn. - - * lib/dg-pch.exp (pch-init, pch-finish, - check_effective_target_pch_supported_debug): New procs. - (dg-flags-pch): If $pch_unsupported, make tests UNSUPPORTED. - Likewise if $pch_unsupported_debug and $flags include -g. - Skip FAILs about missing *.gch file if $pch_unsupported_debug - and dg-require-effective-target pch_unsupported_debug. - * g++.dg/pch/pch.exp: Call pch-init and pch-finish. - * objc.dg/pch/pch.exp: Likewise. - * gcc.dg/pch/pch.exp: Likewise. - * gcc.dg/pch/valid-1.c: Add dg-require-effective-target - pch_unsupported_debug. - * gcc.dg/pch/valid-1.hs: Likewise. - * gcc.dg/pch/valid-1b.c: Likewise. - * gcc.dg/pch/valid-1b.hs: Likewise. - ---- gcc/c-family/c-opts.c.jj 2013-02-14 14:45:01.000000000 +0100 -+++ gcc/c-family/c-opts.c 2013-02-15 12:44:48.936535118 +0100 -@@ -945,6 +945,16 @@ c_common_post_options (const char **pfil - because the default address space slot then can't be used - for the output PCH file. */ - if (pch_file) -+ { -+ c_common_no_more_pch (); -+ /* Only -g0 and -gdwarf* are supported with PCH, for other -+ debug formats we warn here and refuse to load any PCH files. */ -+ if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG) -+ warning (OPT_Wdeprecated, -+ "the \"%s\" debug format cannot be used with " -+ "pre-compiled headers", debug_type_names[write_symbols]); -+ } -+ else if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG) - c_common_no_more_pch (); - - /* Yuk. WTF is this? I do know ObjC relies on it somewhere. */ ---- gcc/testsuite/lib/dg-pch.exp.jj 2013-01-11 09:02:39.000000000 +0100 -+++ gcc/testsuite/lib/dg-pch.exp 2013-02-15 15:45:53.747855529 +0100 -@@ -16,8 +16,49 @@ - - load_lib copy-file.exp - -+proc pch-init { args } { -+ global pch_unsupported_debug pch_unsupported -+ -+ if [info exists pch_unsupported_debug] { -+ error "pch-init: pch_unsupported_debug is not empty as expected" -+ } -+ if [info exists pch_unsupported] { -+ error "pch-init: pch_unsupported is not empty as expected" -+ } -+ -+ set result [check_compile pchtest object "int i;" "-g -x c-header"] -+ set pch_unsupported_debug \ -+ [regexp "debug format cannot be used with pre-compiled headers" \ -+ [lindex $result 0]] -+ -+ set pch_unsupported 0 -+ if { $pch_unsupported_debug } { -+ verbose -log "pch is unsupported with the debug info format" -+ -+ set result [check_compile pchtest object "int i;" "-x c-header"] -+ set pch_unsupported \ -+ [regexp "debug format cannot be used with pre-compiled headers" \ -+ [lindex $result 0]] -+ } -+} -+ -+proc pch-finish { args } { -+ global pch_unsupported_debug pch_unsupported -+ unset pch_unsupported_debug -+ unset pch_unsupported -+} -+ -+proc check_effective_target_pch_supported_debug { } { -+ global pch_unsupported_debug -+ if { $pch_unsupported_debug } { -+ return 0 -+ } -+ return 1 -+} -+ - proc dg-flags-pch { subdir test otherflags options suffix } { - global runtests dg-do-what-default -+ global pch_unsupported_debug pch_unsupported - - # If we're only testing specific files and this isn't one of them, skip it. - if ![runtest_file_p $runtests $test] { -@@ -35,6 +76,13 @@ proc dg-flags-pch { subdir test otherfla - foreach flags $options { - verbose "Testing $nshort, $otherflags $flags" 1 - -+ if { $pch_unsupported != 0 \ -+ || ( $pch_unsupported_debug != 0 && [regexp " -g" " $flags"] ) } { -+ verbose -log "$nshort unsupported because debug format conflicts with PCH" -+ unsupported "$nshort $flags" -+ continue -+ } -+ - # For the header files, the default is to precompile. - set dg-do-what-default precompile - catch { file_on_host delete "$bname$suffix" } -@@ -78,7 +126,8 @@ proc dg-flags-pch { subdir test otherfla - fail "$nshort $flags assembly comparison" - } - } -- } else { -+ } elseif { $pch_unsupported_debug == 0 \ -+ || [llength [grep $test "{\[ \t\]\+dg-require-effective-target\[ \t\]\+pch_supported_debug\[ \t\]\+.*\[ \t\]\+}"]] > 0 } { - verbose -log "pch file '$bname$suffix.gch' missing" - fail "$nshort $flags" - if { !$have_errs } { ---- gcc/testsuite/g++.dg/pch/pch.exp.jj 2013-01-11 09:02:44.000000000 +0100 -+++ gcc/testsuite/g++.dg/pch/pch.exp 2013-02-15 14:53:03.517106464 +0100 -@@ -23,6 +23,7 @@ load_lib dg-pch.exp - - # Initialize `dg'. - dg-init -+pch-init - - set old_dg_do_what_default "${dg-do-what-default}" - -@@ -36,4 +37,5 @@ foreach test [lsort [glob -nocomplain $s - set dg-do-what-default "$old_dg_do_what_default" - - # All done. -+pch-finish - dg-finish ---- gcc/testsuite/objc.dg/pch/pch.exp.jj 2013-01-11 09:02:44.000000000 +0100 -+++ gcc/testsuite/objc.dg/pch/pch.exp 2013-02-15 14:53:30.063951051 +0100 -@@ -24,8 +24,8 @@ load_lib torture-options.exp - - # Initialize `dg'. - dg-init -- - torture-init -+pch-init - - set-torture-options $DG_TORTURE_OPTIONS - -@@ -59,5 +59,6 @@ if [istarget "*-*-darwin*" ] { - set dg-do-what-default "$old_dg_do_what_default" - - # All done. -+pch-finish - torture-finish - dg-finish ---- gcc/testsuite/gcc.dg/pch/pch.exp.jj 2013-01-11 09:02:42.000000000 +0100 -+++ gcc/testsuite/gcc.dg/pch/pch.exp 2013-02-15 14:11:27.053896809 +0100 -@@ -26,6 +26,7 @@ load_lib torture-options.exp - dg-init - torture-init - set-torture-options $DG_TORTURE_OPTIONS -+pch-init - - set old_dg_do_what_default "${dg-do-what-default}" - -@@ -59,5 +60,6 @@ file delete $testh - set dg-do-what-default "$old_dg_do_what_default" - - # All done. -+pch-finish - torture-finish - dg-finish ---- gcc/testsuite/gcc.dg/pch/valid-1.c.jj 2009-06-08 11:53:48.000000000 +0200 -+++ gcc/testsuite/gcc.dg/pch/valid-1.c 2013-02-15 15:19:44.124833259 +0100 -@@ -1,3 +1,4 @@ -+/* { dg-require-effective-target pch_supported_debug } */ - /* { dg-options "-I. -Winvalid-pch -g" } */ - - #include "valid-1.h"/* { dg-warning "created with -gnone, but used with -g" } */ ---- gcc/testsuite/gcc.dg/pch/valid-1.hs.jj 2008-09-05 12:54:26.000000000 +0200 -+++ gcc/testsuite/gcc.dg/pch/valid-1.hs 2013-02-15 15:19:50.686794340 +0100 -@@ -1,3 +1,4 @@ -+/* { dg-require-effective-target pch_supported_debug } */ - /* { dg-options "-I. -Winvalid-pch -g0" } */ - - extern int x; ---- gcc/testsuite/gcc.dg/pch/valid-1b.c.jj 2008-09-05 12:54:26.000000000 +0200 -+++ gcc/testsuite/gcc.dg/pch/valid-1b.c 2013-02-15 15:19:55.935763631 +0100 -@@ -1,3 +1,4 @@ -+/* { dg-require-effective-target pch_supported_debug } */ - /* { dg-options "-I. -Winvalid-pch -g0" } */ - - #include "valid-1b.h" ---- gcc/testsuite/gcc.dg/pch/valid-1b.hs.jj 2008-09-05 12:54:26.000000000 +0200 -+++ gcc/testsuite/gcc.dg/pch/valid-1b.hs 2013-02-15 15:20:02.214727794 +0100 -@@ -1,3 +1,4 @@ -+/* { dg-require-effective-target pch_supported_debug } */ - /* { dg-options "-I. -Winvalid-pch -g" } */ - - extern int x; diff --git a/gcc48-pr56258.patch b/gcc48-pr56258.patch new file mode 100644 index 0000000..f8af4c0 --- /dev/null +++ b/gcc48-pr56258.patch @@ -0,0 +1,30 @@ +2013-02-20 Jakub Jelinek + + PR bootstrap/56258 + * doc/invoke.texi (-fdump-rtl-pro_and_epilogue): Use @item + instead of @itemx. + + * gnat-style.texi (@title): Remove @hfill. + +--- gcc/ada/gnat-style.texi.jj 2012-08-10 12:57:33.000000000 +0200 ++++ gcc/ada/gnat-style.texi 2013-02-20 13:06:03.042667300 +0100 +@@ -42,7 +42,7 @@ Texts. A copy of the license is include + @titlepage + @titlefont{GNAT Coding Style:} + @sp 1 +-@title @hfill A Guide for GNAT Developers ++@title A Guide for GNAT Developers + @subtitle GNAT, The GNU Ada Compiler + @versionsubtitle + @author Ada Core Technologies, Inc. +--- gcc/doc/invoke.texi.jj 2013-01-31 22:57:22.000000000 +0100 ++++ gcc/doc/invoke.texi 2013-02-20 13:06:47.516405739 +0100 +@@ -5612,7 +5612,7 @@ Dump after the peephole pass. + @opindex fdump-rtl-postreload + Dump after post-reload optimizations. + +-@itemx -fdump-rtl-pro_and_epilogue ++@item -fdump-rtl-pro_and_epilogue + @opindex fdump-rtl-pro_and_epilogue + Dump after generating the function prologues and epilogues. + diff --git a/gcc48-pr56265.patch b/gcc48-pr56265.patch new file mode 100644 index 0000000..d651da6 --- /dev/null +++ b/gcc48-pr56265.patch @@ -0,0 +1,132 @@ +2013-02-20 Jan Hubicka + + PR tree-optimization/56265 + * ipa-prop.c (ipa_make_edge_direct_to_target): Fixup callgraph when target is + referenced for firs ttime. + + * testsuite/g++.dg/ipa/devirt-11.C: New testcase. + +--- gcc/ipa-prop.c (revision 196176) ++++ gcc/ipa-prop.c (revision 196177) +@@ -2100,10 +2100,65 @@ ipa_make_edge_direct_to_target (struct c + if (TREE_CODE (target) == ADDR_EXPR) + target = TREE_OPERAND (target, 0); + if (TREE_CODE (target) != FUNCTION_DECL) +- return NULL; ++ { ++ target = canonicalize_constructor_val (target, NULL); ++ if (!target || TREE_CODE (target) != FUNCTION_DECL) ++ { ++ if (dump_file) ++ fprintf (dump_file, "ipa-prop: Discovered direct call to non-function" ++ " in (%s/%i).\n", ++ cgraph_node_name (ie->caller), ie->caller->uid); ++ return NULL; ++ } ++ } + callee = cgraph_get_node (target); +- if (!callee) +- return NULL; ++ ++ /* Because may-edges are not explicitely represented and vtable may be external, ++ we may create the first reference to the object in the unit. */ ++ if (!callee || callee->global.inlined_to) ++ { ++ struct cgraph_node *first_clone = callee; ++ ++ /* We are better to ensure we can refer to it. ++ In the case of static functions we are out of luck, since we already ++ removed its body. In the case of public functions we may or may ++ not introduce the reference. */ ++ if (!canonicalize_constructor_val (target, NULL) ++ || !TREE_PUBLIC (target)) ++ { ++ if (dump_file) ++ fprintf (dump_file, "ipa-prop: Discovered call to a known target " ++ "(%s/%i -> %s/%i) but can not refer to it. Giving up.\n", ++ xstrdup (cgraph_node_name (ie->caller)), ie->caller->uid, ++ xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid); ++ return NULL; ++ } ++ ++ /* Create symbol table node. Even if inline clone exists, we can not take ++ it as a target of non-inlined call. */ ++ callee = cgraph_create_node (target); ++ ++ /* OK, we previously inlined the function, then removed the offline copy and ++ now we want it back for external call. This can happen when devirtualizing ++ while inlining function called once that happens after extern inlined and ++ virtuals are already removed. In this case introduce the external node ++ and make it available for call. */ ++ if (first_clone) ++ { ++ first_clone->clone_of = callee; ++ callee->clones = first_clone; ++ symtab_prevail_in_asm_name_hash ((symtab_node)callee); ++ symtab_insert_node_to_hashtable ((symtab_node)callee); ++ if (dump_file) ++ fprintf (dump_file, "ipa-prop: Introduced new external node " ++ "(%s/%i) and turned into root of the clone tree.\n", ++ xstrdup (cgraph_node_name (callee)), callee->uid); ++ } ++ else if (dump_file) ++ fprintf (dump_file, "ipa-prop: Introduced new external node " ++ "(%s/%i).\n", ++ xstrdup (cgraph_node_name (callee)), callee->uid); ++ } + ipa_check_create_node_params (); + + /* We can not make edges to inline clones. It is bug that someone removed +--- gcc/testsuite/g++.dg/ipa/devirt-11.C (revision 0) ++++ gcc/testsuite/g++.dg/ipa/devirt-11.C (revision 196177) +@@ -0,0 +1,50 @@ ++/* { dg-do compile } */ ++/* { dg-options "-O2 -fdump-ipa-inline" } */ ++int baz (); ++struct A ++{ ++ virtual int fn2 () = 0; ++ virtual int *fn3 (); ++ double *fn4 (); ++ int fn5 (int); ++ template ++ void fn1 (A &, T) { fn3 (); fn4 (); fn2 (); } ++}; ++struct B : A ++{ ++ int fn2 () { return 6; } ++ void fn3 (int, double); ++ B (bool = true); ++ B (int, int); ++}; ++template ++void ++foo (B &x, A &y, A &z) ++{ ++ y.fn2 (); ++ z.fn2 (); ++ int i = baz (); ++ int j = (y.fn3 ())[i]; ++ x.fn3 (j, (y.fn4 ())[i] + (z.fn4 ())[z.fn5 (j)]); ++} ++inline B ++operator+ (A &y, A &z) ++{ ++ B x; ++ foo (x, y, z); ++ return x; ++} ++void ++bar () ++{ ++ B a, b, c (4, 0), d; ++ a.fn1 (b, .6); ++ baz (); ++ c + d; ++} ++/* While inlining function called once we should devirtualize a new call to fn2 ++ and two to fn3. While doing so the new symbol for fn2 needs to be ++ introduced. */ ++/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 3 "inline" } } */ ++/* { dg-final { scan-ipa-dump-times "and turned into root of the clone tree" 1 "inline" } } */ ++/* { dg-final { cleanup-ipa-dump "inline" } } */ diff --git a/gcc48-pr56405.patch b/gcc48-pr56405.patch new file mode 100644 index 0000000..d1cddb1 --- /dev/null +++ b/gcc48-pr56405.patch @@ -0,0 +1,36 @@ +2013-02-20 Jakub Jelinek + + PR inline-asm/56405 + * expr.c (expand_expr_real_1) : Don't + use movmisalign or extract_bit_field for EXPAND_MEMORY modifier. + + * gcc.c-torture/compile/pr56405.c: New test. + +--- gcc/expr.c.jj 2013-01-18 18:09:40.000000000 +0100 ++++ gcc/expr.c 2013-02-20 10:29:34.513143634 +0100 +@@ -9551,6 +9551,7 @@ expand_expr_real_1 (tree exp, rtx target + set_mem_addr_space (temp, as); + align = get_object_alignment (exp); + if (modifier != EXPAND_WRITE ++ && modifier != EXPAND_MEMORY + && mode != BLKmode + && align < GET_MODE_ALIGNMENT (mode) + /* If the target does not have special handling for unaligned +@@ -9639,6 +9640,7 @@ expand_expr_real_1 (tree exp, rtx target + if (TREE_THIS_VOLATILE (exp)) + MEM_VOLATILE_P (temp) = 1; + if (modifier != EXPAND_WRITE ++ && modifier != EXPAND_MEMORY + && mode != BLKmode + && align < GET_MODE_ALIGNMENT (mode)) + { +--- gcc/testsuite/gcc.c-torture/compile/pr56405.c.jj 2013-02-20 10:32:17.807250979 +0100 ++++ gcc/testsuite/gcc.c-torture/compile/pr56405.c 2013-02-20 10:32:46.963090873 +0100 +@@ -0,0 +1,7 @@ ++/* PR inline-asm/56405 */ ++ ++void ++foo (void) ++{ ++ asm volatile ("" : "+m" (*(volatile unsigned short *) 0x1001UL)); ++} diff --git a/gcc48-unused-locals.patch b/gcc48-unused-locals.patch new file mode 100644 index 0000000..dff16de --- /dev/null +++ b/gcc48-unused-locals.patch @@ -0,0 +1,297 @@ +2013-02-20 Richard Biener + + * tree-call-cdce.c (tree_call_cdce): Do not remove unused locals. + * tree-ssa-forwprop.c (ssa_forward_propagate_and_combine): Likewise. + * tree-ssa-dce.c (perform_tree_ssa_dce): Likewise. + * tree-ssa-copyrename.c (copy_rename_partition_coalesce): Do + not return anything. + (rename_ssa_copies): Do not remove unused locals. + * tree-ssa-ccp.c (do_ssa_ccp): Likewise. + * tree-ssanames.c (pass_release_ssa_names): Remove unused + locals first. + * passes.c (execute_function_todo): Do not schedule unused locals + removal if cleanup_tree_cfg did something. + * tree-ssa-live.c (remove_unused_locals): Dump statistics + about the number of removed locals. + + * gcc.dg/tree-ssa/forwprop-8.c: Adjust. + +--- gcc/tree-ssa-copyrename.c (revision 196173) ++++ gcc/tree-ssa-copyrename.c (revision 196174) +@@ -113,7 +113,7 @@ static struct + /* Coalesce the partitions in MAP representing VAR1 and VAR2 if it is valid. + Choose a representative for the partition, and send debug info to DEBUG. */ + +-static bool ++static void + copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug) + { + int p1, p2, p3; +@@ -146,7 +146,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : Already coalesced.\n"); +- return false; ++ return; + } + + rep1 = partition_to_var (map, p1); +@@ -154,7 +154,7 @@ copy_rename_partition_coalesce (var_map + root1 = SSA_NAME_VAR (rep1); + root2 = SSA_NAME_VAR (rep2); + if (!root1 && !root2) +- return false; ++ return; + + /* Don't coalesce if one of the variables occurs in an abnormal PHI. */ + abnorm = (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rep1) +@@ -163,7 +163,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : Abnormal PHI barrier. No coalesce.\n"); +- return false; ++ return; + } + + /* Partitions already have the same root, simply merge them. */ +@@ -172,7 +172,7 @@ copy_rename_partition_coalesce (var_map + p1 = partition_union (map->var_partition, p1, p2); + if (debug) + fprintf (debug, " : Same root, coalesced --> P%d.\n", p1); +- return false; ++ return; + } + + /* Never attempt to coalesce 2 different parameters. */ +@@ -181,7 +181,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : 2 different PARM_DECLS. No coalesce.\n"); +- return false; ++ return; + } + + if ((root1 && TREE_CODE (root1) == RESULT_DECL) +@@ -189,7 +189,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : One root a RESULT_DECL. No coalesce.\n"); +- return false; ++ return; + } + + ign1 = !root1 || (TREE_CODE (root1) == VAR_DECL && DECL_IGNORED_P (root1)); +@@ -206,7 +206,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : 2 different USER vars. No coalesce.\n"); +- return false; ++ return; + } + else + ign2 = true; +@@ -220,7 +220,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : 2 default defs. No coalesce.\n"); +- return false; ++ return; + } + else + { +@@ -240,7 +240,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : Choosen variable has no root. No coalesce.\n"); +- return false; ++ return; + } + + /* Don't coalesce if the new chosen root variable would be read-only. +@@ -253,7 +253,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : Readonly variable. No coalesce.\n"); +- return false; ++ return; + } + + /* Don't coalesce if the two variables aren't type compatible . */ +@@ -266,7 +266,7 @@ copy_rename_partition_coalesce (var_map + { + if (debug) + fprintf (debug, " : Incompatible types. No coalesce.\n"); +- return false; ++ return; + } + + /* Merge the two partitions. */ +@@ -288,7 +288,6 @@ copy_rename_partition_coalesce (var_map + TDF_SLIM); + fprintf (debug, "\n"); + } +- return true; + } + + +@@ -308,7 +307,6 @@ rename_ssa_copies (void) + gimple stmt, phi; + unsigned x; + FILE *debug; +- bool updated = false; + + memset (&stats, 0, sizeof (stats)); + +@@ -330,7 +328,7 @@ rename_ssa_copies (void) + tree lhs = gimple_assign_lhs (stmt); + tree rhs = gimple_assign_rhs1 (stmt); + +- updated |= copy_rename_partition_coalesce (map, lhs, rhs, debug); ++ copy_rename_partition_coalesce (map, lhs, rhs, debug); + } + } + } +@@ -358,8 +356,8 @@ rename_ssa_copies (void) + { + tree arg = PHI_ARG_DEF (phi, i); + if (TREE_CODE (arg) == SSA_NAME) +- updated |= copy_rename_partition_coalesce (map, res, arg, +- debug); ++ copy_rename_partition_coalesce (map, res, arg, ++ debug); + } + /* Else if all arguments are in the same partition try to merge + it with the result. */ +@@ -390,9 +388,9 @@ rename_ssa_copies (void) + } + } + if (all_p_same == 1) +- updated |= copy_rename_partition_coalesce (map, res, +- PHI_ARG_DEF (phi, 0), +- debug); ++ copy_rename_partition_coalesce (map, res, ++ PHI_ARG_DEF (phi, 0), ++ debug); + } + } + } +@@ -426,7 +424,7 @@ rename_ssa_copies (void) + statistics_counter_event (cfun, "copies coalesced", + stats.coalesced); + delete_var_map (map); +- return updated ? TODO_remove_unused_locals : 0; ++ return 0; + } + + /* Return true if copy rename is to be performed. */ +--- gcc/tree-ssa-ccp.c (revision 196173) ++++ gcc/tree-ssa-ccp.c (revision 196174) +@@ -2108,7 +2108,7 @@ do_ssa_ccp (void) + ccp_initialize (); + ssa_propagate (ccp_visit_stmt, ccp_visit_phi_node); + if (ccp_finalize ()) +- todo = (TODO_cleanup_cfg | TODO_update_ssa | TODO_remove_unused_locals); ++ todo = (TODO_cleanup_cfg | TODO_update_ssa); + free_dominance_info (CDI_DOMINATORS); + return todo; + } +--- gcc/tree-call-cdce.c (revision 196173) ++++ gcc/tree-call-cdce.c (revision 196174) +@@ -898,11 +898,10 @@ tree_call_cdce (void) + /* As we introduced new control-flow we need to insert PHI-nodes + for the call-clobbers of the remaining call. */ + mark_virtual_operands_for_renaming (cfun); +- return (TODO_update_ssa | TODO_cleanup_cfg | TODO_ggc_collect +- | TODO_remove_unused_locals); ++ return TODO_update_ssa; + } +- else +- return 0; ++ ++ return 0; + } + + static bool +--- gcc/tree-ssa-live.c (revision 196173) ++++ gcc/tree-ssa-live.c (revision 196174) +@@ -889,7 +889,10 @@ remove_unused_locals (void) + dstidx++; + } + if (dstidx != num) +- cfun->local_decls->truncate (dstidx); ++ { ++ statistics_counter_event (cfun, "unused VAR_DECLs removed", num - dstidx); ++ cfun->local_decls->truncate (dstidx); ++ } + + remove_unused_scope_block_p (DECL_INITIAL (current_function_decl)); + clear_unused_block_pointer (); +--- gcc/tree-ssa-forwprop.c (revision 196173) ++++ gcc/tree-ssa-forwprop.c (revision 196174) +@@ -2936,7 +2936,6 @@ ssa_forward_propagate_and_combine (void) + && forward_propagate_addr_expr (lhs, rhs)) + { + release_defs (stmt); +- todoflags |= TODO_remove_unused_locals; + gsi_remove (&gsi, true); + } + else +@@ -2961,7 +2960,6 @@ ssa_forward_propagate_and_combine (void) + off))))) + { + release_defs (stmt); +- todoflags |= TODO_remove_unused_locals; + gsi_remove (&gsi, true); + } + else if (is_gimple_min_invariant (rhs)) +--- gcc/tree-ssa-dce.c (revision 196173) ++++ gcc/tree-ssa-dce.c (revision 196174) +@@ -1607,10 +1607,8 @@ perform_tree_ssa_dce (bool aggressive) + free_edge_list (el); + + if (something_changed) +- return (TODO_update_ssa | TODO_cleanup_cfg | TODO_ggc_collect +- | TODO_remove_unused_locals); +- else +- return 0; ++ return TODO_update_ssa | TODO_cleanup_cfg; ++ return 0; + } + + /* Pass entry points. */ +--- gcc/passes.c (revision 196173) ++++ gcc/passes.c (revision 196174) +@@ -1918,10 +1918,7 @@ execute_function_todo (void *data) + /* Always cleanup the CFG before trying to update SSA. */ + if (flags & TODO_cleanup_cfg) + { +- bool cleanup = cleanup_tree_cfg (); +- +- if (cleanup && (cfun->curr_properties & PROP_ssa)) +- flags |= TODO_remove_unused_locals; ++ cleanup_tree_cfg (); + + /* When cleanup_tree_cfg merges consecutive blocks, it may + perform some simplistic propagation when removing single +--- gcc/tree-ssanames.c (revision 196173) ++++ gcc/tree-ssanames.c (revision 196174) +@@ -455,7 +455,7 @@ struct gimple_opt_pass pass_release_ssa_ + PROP_ssa, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ +- 0, /* todo_flags_start */ +- 0 /* todo_flags_finish */ ++ TODO_remove_unused_locals, /* todo_flags_start */ ++ 0 /* todo_flags_finish */ + } + }; +--- gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c (revision 196173) ++++ gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c (revision 196174) +@@ -11,6 +11,5 @@ int foo(struct X *q) + + + /* We should have propragated &q->a into (*pointer). */ +-/* { dg-final { scan-tree-dump-times "pointer" 0 "forwprop1"} } */ +-/* { dg-final { scan-tree-dump "\\\[0\\\]" "forwprop1" } } */ ++/* { dg-final { scan-tree-dump "q_.\\\(D\\\)\\\]\\\[0\\\];" "forwprop1" } } */ + /* { dg-final { cleanup-tree-dump "forwprop1" } } */ diff --git a/sources b/sources index 032d95c..73225ef 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ be78a47bd82523250eb3e91646db5b3d cloog-0.18.0.tar.gz 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz +d18630509460934dfd7163a884b63ecd gcc-4.8.0-20130220.tar.bz2 bce1586384d8635a76d2f017fb067cd2 isl-0.11.1.tar.bz2 -4fa6cbda8e98ae790212c6b7b00fb939 gcc-4.8.0-20130215.tar.bz2