From 6b781854a6bfcec591d57ad90b7e37502ba9bdc5 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 5 Feb 2011 09:43:14 +0100 Subject: [PATCH] 4.6.0-0.6 --- .gitignore | 1 + gcc.spec | 50 +++-- gcc46-Woverlength-string-asm.patch | 180 ++++++++++++++++++ gcc46-pr31490.patch | 289 ----------------------------- gcc46-pr45136-revert.patch | 207 --------------------- gcc46-pr46890.patch | 110 ----------- gcc46-pr47106-revert.patch | 31 ---- gcc46-pr47610.patch | 23 +++ sources | 2 +- 9 files changed, 240 insertions(+), 653 deletions(-) create mode 100644 gcc46-Woverlength-string-asm.patch delete mode 100644 gcc46-pr31490.patch delete mode 100644 gcc46-pr45136-revert.patch delete mode 100644 gcc46-pr46890.patch delete mode 100644 gcc46-pr47106-revert.patch create mode 100644 gcc46-pr47610.patch diff --git a/.gitignore b/.gitignore index 4d8f160..95935dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /fastjar-0.97.tar.gz /gcc-4.6.0-20110128.tar.bz2 +/gcc-4.6.0-20110205.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 683faf0..17b8def 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20110128 -%global SVNREV 169352 +%global DATE 20110205 +%global SVNREV 169849 %global gcc_version 4.6.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.5 +%global gcc_release 0.6 %global _unpackaged_files_terminate_build 0 %global multilib_64_archs sparc64 ppc64 s390x x86_64 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha @@ -164,12 +164,10 @@ Patch14: gcc46-pr38757.patch Patch15: gcc46-libstdc++-docs.patch Patch17: gcc46-no-add-needed.patch Patch18: gcc46-unwind-debughook-sdt.patch -Patch19: gcc46-pr47106-revert.patch -Patch20: gcc46-pr46890.patch -Patch21: gcc46-ppl-0.10.patch -Patch22: gcc46-pr31490.patch -Patch23: gcc46-Woverlength-string.patch -Patch24: gcc46-pr45136-revert.patch +Patch19: gcc46-ppl-0.10.patch +Patch20: gcc46-Woverlength-string.patch +Patch21: gcc46-Woverlength-string-asm.patch +Patch22: gcc46-pr47610.patch Patch1000: fastjar-0.97-segfault.patch Patch1001: fastjar-0.97-len1.patch @@ -600,12 +598,10 @@ not stable, so plugins must be rebuilt any time GCC is updated. %endif %patch17 -p0 -b .no-add-needed~ %patch18 -p0 -b .unwind-debughook-sdt~ -%patch19 -p0 -b .pr47106-revert~ -%patch20 -p0 -b .pr46890~ -%patch21 -p0 -b .ppl-0.10~ -%patch22 -p0 -b .pr31490~ -%patch23 -p0 -b .Woverlength-string~ -%patch24 -p0 -b .pr45136-revert~ +%patch19 -p0 -b .ppl-0.10~ +%patch20 -p0 -b .Woverlength-string~ +%patch21 -p0 -b .Woverlength-string-asm~ +%patch22 -p0 -b .pr47610~ # This testcase doesn't compile. rm libjava/testsuite/libjava.lang/PR35020* @@ -2341,6 +2337,30 @@ fi %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin %changelog +* Sat Feb 5 2011 Jakub Jelinek 4.6.0-0.6 +- update from trunk + - PRs bootstrap/47044, bootstrap/47147, c++/29571, c++/46890, c++/47311, + c++/47398, c++/47416, c++/47589, debug/43092, debug/47498, + debug/47501, driver/47547, fortran/35810, fortran/45170, + fortran/47042, fortran/47082, fortran/47350, fortran/47455, + fortran/47463, fortran/47507, fortran/47519, fortran/47523, + fortran/47531, fortran/47565, fortran/47572, gcc/46692, + inline-asm/23200, java/21206, libfortran/47571, libgcj/44341, + libgfortran/47434, libquadmath/47293, libstdc++/46914, + libstdc++/47560, lto/47274, middle-end/47543, + rtl-optimization/43494, rtl-optimization/44031, + rtl-optimization/47525, target/42894, target/45325, + target/47272, target/47312, target/47564, target/47580, + tree-optimization/40979, tree-optimization/43695, + tree-optimization/45122, tree-optimization/46194, + tree-optimization/47538, tree-optimization/47541, + tree-optimization/47555, tree-optimization/47559, + tree-optimization/47561, tree-optimization/47566, + tree-optimization/47576 +- suppress -Woverlength-string warnings inside of __asm__ +- fix section flags conflict handling for relro sections (#674890, + PR middle-end/47610) + * Fri Jan 28 2011 Jakub Jelinek 4.6.0-0.5 - update from trunk - PRs bootstrap/47467, c++/43601, c++/47476, c/21659, c/43082, c/47473, diff --git a/gcc46-Woverlength-string-asm.patch b/gcc46-Woverlength-string-asm.patch new file mode 100644 index 0000000..47aae37 --- /dev/null +++ b/gcc46-Woverlength-string-asm.patch @@ -0,0 +1,180 @@ +2011-02-02 Tom Tromey + + * c-parser.c (c_parser_asm_string_literal): Clear + warn_overlength_strings. + + * gcc.dg/Woverlength-strings-pedantic-c90-asm.c: New file. + * gcc.dg/Woverlength-strings-pedantic-c89-asm.c: New file. + * gcc.dg/Woverlength-strings-pedantic-c99-asm.c: New file. + +--- gcc/c-parser.c ++++ gcc/c-parser.c +@@ -3264,6 +3264,8 @@ static tree + c_parser_asm_string_literal (c_parser *parser) + { + tree str; ++ int save_flag = warn_overlength_strings; ++ warn_overlength_strings = 0; + if (c_parser_next_token_is (parser, CPP_STRING)) + { + str = c_parser_peek_token (parser)->value; +@@ -3281,6 +3283,7 @@ c_parser_asm_string_literal (c_parser *parser) + c_parser_error (parser, "expected string literal"); + str = NULL_TREE; + } ++ warn_overlength_strings = save_flag; + return str; + } + +--- gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-asm.c ++++ gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c89-asm.c +@@ -0,0 +1,47 @@ ++/* -Woverlength-strings complains about string constants which are too long ++ for the C standard's "minimum maximum" limits. It is off by default, ++ but implied by -pedantic. */ ++ ++/* { dg-options "-std=c89 -pedantic" } */ ++ ++#define TEN " " ++#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN ++#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN ++ ++/* C89's minimum-maximum is 509. */ ++__asm__ (HUN HUN HUN HUN HUN TEN); ++ ++/* C99's minimum-maximum is 4095. */ ++__asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456"); ++ ++void ++f (void) ++{ ++ /* C89's minimum-maximum is 509. */ ++ __asm__ (HUN HUN HUN HUN HUN TEN); ++ __asm__ (HUN HUN HUN HUN HUN TEN : : ); ++ __asm__ goto (HUN HUN HUN HUN HUN TEN : : : : label); ++ ++ /* C99's minimum-maximum is 4095. */ ++ __asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456"); ++ __asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456" : : ); ++ __asm__ goto ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456" : : : : label); ++ ++ label: ; ++} +--- gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-asm.c ++++ gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c90-asm.c +@@ -0,0 +1,48 @@ ++/* -Woverlength-strings complains about string constants which are too long ++ for the C standard's "minimum maximum" limits. It is off by default, ++ but implied by -pedantic. */ ++ ++/* { dg-options "-std=c90 -pedantic" } */ ++ ++#define TEN " " ++#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN ++#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN ++ ++/* C89's minimum-maximum is 509. */ ++__asm__ (HUN HUN HUN HUN HUN TEN); ++ ++/* C99's minimum-maximum is 4095. */ ++__asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456"); ++ ++void ++f (void) ++{ ++ /* C89's minimum-maximum is 509. */ ++ __asm__ (HUN HUN HUN HUN HUN TEN); ++ __asm__ (HUN HUN HUN HUN HUN TEN : :); ++ __asm__ goto (HUN HUN HUN HUN HUN TEN : : : : label); ++ ++ /* C99's minimum-maximum is 4095. */ ++ __asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456"); ++ __asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456" : :); ++ __asm__ goto ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456" : : : : label); ++ ++ label: ; ++} ++ +--- gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-asm.c ++++ gcc/testsuite/gcc.dg/Woverlength-strings-pedantic-c99-asm.c +@@ -0,0 +1,48 @@ ++/* -Woverlength-strings complains about string constants which are too long ++ for the C standard's "minimum maximum" limits. It is off by default, ++ but implied by -pedantic. */ ++ ++/* { dg-options "-std=c99 -pedantic" } */ ++ ++#define TEN " " ++#define HUN TEN TEN TEN TEN TEN TEN TEN TEN TEN TEN ++#define THO HUN HUN HUN HUN HUN HUN HUN HUN HUN HUN ++ ++/* C89's minimum-maximum is 509. */ ++__asm__ (HUN HUN HUN HUN HUN TEN); ++ ++/* C99's minimum-maximum is 4095. */ ++__asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456"); ++ ++void ++f (void) ++{ ++ /* C89's minimum-maximum is 509. */ ++ __asm__ (HUN HUN HUN HUN HUN TEN); ++ __asm__ (HUN HUN HUN HUN HUN TEN : :); ++ __asm__ goto (HUN HUN HUN HUN HUN TEN : : : : label); ++ ++ /* C99's minimum-maximum is 4095. */ ++ __asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456"); ++ __asm__ ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456" : :); ++ __asm__ goto ( ++ THO THO THO THO /* 4000 */ ++ TEN TEN TEN TEN TEN /* 4050 */ ++ TEN TEN TEN TEN /* 4090 */ ++ "123456" : : : : label); ++ ++ label: ; ++} ++ diff --git a/gcc46-pr31490.patch b/gcc46-pr31490.patch deleted file mode 100644 index 80b7aae..0000000 --- a/gcc46-pr31490.patch +++ /dev/null @@ -1,289 +0,0 @@ -2011-01-27 Jakub Jelinek - - PR middle-end/31490 - * output.h (SECTION_RELRO): Define. - (SECTION_MACH_DEP): Adjust. - (get_variable_section): New prototype. - * config/darwin.h (SECTION_NO_ANCHOR): Adjust. - * varpool.c (varpool_finalize_named_section_flags): New function. - (varpool_assemble_pending_decls): Call it. - * cgraph.h (varpool_finalize_named_section_flags): New prototype. - * cgraphunit.c (cgraph_output_in_order): Call - varpool_finalize_named_section_flags. - * varasm.c (get_section): Allow section flags conflicts between - relro and read-only sections if the section hasn't been declared yet. - Set SECTION_OVERRIDE after diagnosing section type conflict. - (get_variable_section): No longer static. - (default_section_type_flags): Use SECTION_WRITE | SECTION_RELRO for - readonly sections that need relocations. - (decl_readonly_section_1): New function. - (decl_readonly_section): Use it. - - Revert: - 2010-11-17 Dinar Temirbulatov - Steve Ellcey - - PR middle-end/31490 - * varasm.c (categorize_decl_for_section): Ignore reloc_rw_mask - if section attribute used. - - * gcc.dg/pr31490-2.c: New test. - * gcc.dg/pr31490-3.c: New test. - * gcc.dg/pr31490-4.c: New test. - ---- gcc/output.h.jj 2011-01-27 17:33:28.200496345 +0100 -+++ gcc/output.h 2011-01-27 17:40:33.355649071 +0100 -@@ -441,7 +441,8 @@ extern void no_asm_to_stream (FILE *); - #define SECTION_DECLARED 0x100000 /* section has been used */ - #define SECTION_STYLE_MASK 0x600000 /* bits used for SECTION_STYLE */ - #define SECTION_COMMON 0x800000 /* contains common data */ --#define SECTION_MACH_DEP 0x1000000 /* subsequent bits reserved for target */ -+#define SECTION_RELRO 0x1000000 /* data is readonly after relocation processing */ -+#define SECTION_MACH_DEP 0x2000000 /* subsequent bits reserved for target */ - - /* This SECTION_STYLE is used for unnamed sections that we can switch - to using a special assembler directive. */ -@@ -585,6 +586,7 @@ extern section *get_unnamed_section (uns - const void *); - extern section *get_section (const char *, unsigned int, tree); - extern section *get_named_section (tree, const char *, int); -+extern section *get_variable_section (tree, bool); - extern void place_block_symbol (rtx); - extern rtx get_section_anchor (struct object_block *, HOST_WIDE_INT, - enum tls_model); ---- gcc/varpool.c.jj 2011-01-27 17:33:28.229830104 +0100 -+++ gcc/varpool.c 2011-01-27 19:48:24.567639053 +0100 -@@ -565,11 +565,29 @@ varpool_remove_unreferenced_decls (void) - varpool_analyze_pending_decls (); - } - -+/* For variables in named sections make sure get_variable_section -+ is called before we switch to those sections. Then section -+ conflicts between read-only and read-only requiring relocations -+ sections can be resolved. */ -+void -+varpool_finalize_named_section_flags (struct varpool_node *node) -+{ -+ if (!TREE_ASM_WRITTEN (node->decl) -+ && !node->alias -+ && !node->in_other_partition -+ && !DECL_EXTERNAL (node->decl) -+ && TREE_CODE (node->decl) == VAR_DECL -+ && !DECL_HAS_VALUE_EXPR_P (node->decl) -+ && DECL_SECTION_NAME (node->decl)) -+ get_variable_section (node->decl, false); -+} -+ - /* Output all variables enqueued to be assembled. */ - bool - varpool_assemble_pending_decls (void) - { - bool changed = false; -+ struct varpool_node *node; - - if (seen_error ()) - return false; -@@ -580,6 +598,9 @@ varpool_assemble_pending_decls (void) - elsewhere. */ - varpool_analyze_pending_decls (); - -+ for (node = varpool_nodes_queue; node; node = node->next_needed) -+ varpool_finalize_named_section_flags (node); -+ - while (varpool_nodes_queue) - { - struct varpool_node *node = varpool_nodes_queue; ---- gcc/config/darwin.h.jj 2011-01-27 17:33:28.217391021 +0100 -+++ gcc/config/darwin.h 2011-01-27 17:40:33.356655497 +0100 -@@ -654,7 +654,7 @@ int darwin_label_is_anonymous_local_objc - /* Private flag applied to disable section-anchors in a particular section. - This needs to be kept in sync with the flags used by varasm.c (defined in - output.h). */ --#define SECTION_NO_ANCHOR 0x2000000 -+#define SECTION_NO_ANCHOR 0x4000000 - - /* Declare the section variables. */ - #ifndef USED_FOR_TARGET ---- gcc/cgraph.h.jj 2011-01-27 17:33:28.011433405 +0100 -+++ gcc/cgraph.h 2011-01-27 17:33:28.011433405 +0100 -@@ -720,6 +720,7 @@ bool cgraph_node_can_be_local_p (struct - - struct varpool_node * varpool_get_node (const_tree decl); - void varpool_remove_node (struct varpool_node *node); -+void varpool_finalize_named_section_flags (struct varpool_node *node); - bool varpool_assemble_pending_decls (void); - bool varpool_assemble_decl (struct varpool_node *node); - bool varpool_analyze_pending_decls (void); ---- gcc/varasm.c.jj 2011-01-27 17:40:25.196565130 +0100 -+++ gcc/varasm.c 2011-01-27 17:40:33.361429176 +0100 -@@ -119,6 +119,7 @@ static void output_addressed_constants ( - static unsigned HOST_WIDE_INT array_size_for_constructor (tree); - static unsigned min_align (unsigned, unsigned); - static void globalize_decl (tree); -+static bool decl_readonly_section_1 (enum section_category); - #ifdef BSS_SECTION_ASM_OP - #ifdef ASM_OUTPUT_BSS - static void asm_output_bss (FILE *, tree, const char *, -@@ -294,11 +295,31 @@ get_section (const char *name, unsigned - if ((sect->common.flags & ~SECTION_DECLARED) != flags - && ((sect->common.flags | flags) & SECTION_OVERRIDE) == 0) - { -+ /* It is fine if one of the section flags is -+ SECTION_WRITE | SECTION_RELRO and the other has none of these -+ flags (i.e. read-only) in named sections and either the -+ section hasn't been declared yet or has been declared as writable. -+ In that case just make sure the resulting flags are -+ SECTION_WRITE | SECTION_RELRO, ie. writable only because of -+ relocations. */ -+ if (((sect->common.flags ^ flags) & (SECTION_WRITE | SECTION_RELRO)) -+ == (SECTION_WRITE | SECTION_RELRO) -+ && (sect->common.flags -+ & ~(SECTION_DECLARED | SECTION_WRITE | SECTION_RELRO)) -+ == (flags & ~(SECTION_WRITE | SECTION_RELRO)) -+ && ((sect->common.flags & SECTION_DECLARED) == 0 -+ || (sect->common.flags & SECTION_WRITE))) -+ { -+ sect->common.flags |= (SECTION_WRITE | SECTION_RELRO); -+ return sect; -+ } - /* Sanity check user variables for flag changes. */ - if (decl == 0) - decl = sect->named.decl; - gcc_assert (decl); - error ("%+D causes a section type conflict", decl); -+ /* Make sure we don't error about one section multiple times. */ -+ sect->common.flags |= SECTION_OVERRIDE; - } - } - return sect; -@@ -985,7 +1006,7 @@ align_variable (tree decl, bool dont_out - should be placed. PREFER_NOSWITCH_P is true if a noswitch - section should be used wherever possible. */ - --static section * -+section * - get_variable_section (tree decl, bool prefer_noswitch_p) - { - addr_space_t as = ADDR_SPACE_GENERIC; -@@ -6026,8 +6047,18 @@ default_section_type_flags (tree decl, c - - if (decl && TREE_CODE (decl) == FUNCTION_DECL) - flags = SECTION_CODE; -- else if (decl && decl_readonly_section (decl, reloc)) -- flags = 0; -+ else if (decl) -+ { -+ enum section_category category -+ = categorize_decl_for_section (decl, reloc); -+ if (decl_readonly_section_1 (category)) -+ flags = 0; -+ else if (category == SECCAT_DATA_REL_RO -+ || category == SECCAT_DATA_REL_RO_LOCAL) -+ flags = SECTION_WRITE | SECTION_RELRO; -+ else -+ flags = SECTION_WRITE; -+ } - else - flags = SECTION_WRITE; - -@@ -6250,17 +6281,13 @@ categorize_decl_for_section (const_tree - /* Here the reloc_rw_mask is not testing whether the section should - be read-only or not, but whether the dynamic link will have to - do something. If so, we wish to segregate the data in order to -- minimize cache misses inside the dynamic linker. If the data -- has a section attribute, ignore reloc_rw_mask() so that all data -- in a given named section is catagorized in the same way. */ -- if (reloc & targetm.asm_out.reloc_rw_mask () -- && !lookup_attribute ("section", DECL_ATTRIBUTES (decl))) -+ minimize cache misses inside the dynamic linker. */ -+ if (reloc & targetm.asm_out.reloc_rw_mask ()) - ret = reloc == 1 ? SECCAT_DATA_REL_LOCAL : SECCAT_DATA_REL; - else - ret = SECCAT_DATA; - } -- else if (reloc & targetm.asm_out.reloc_rw_mask () -- && !lookup_attribute ("section", DECL_ATTRIBUTES (decl))) -+ else if (reloc & targetm.asm_out.reloc_rw_mask ()) - ret = reloc == 1 ? SECCAT_DATA_REL_RO_LOCAL : SECCAT_DATA_REL_RO; - else if (reloc || flag_merge_constants < 2) - /* C and C++ don't allow different variables to share the same -@@ -6311,10 +6338,10 @@ categorize_decl_for_section (const_tree - return ret; - } - --bool --decl_readonly_section (const_tree decl, int reloc) -+static bool -+decl_readonly_section_1 (enum section_category category) - { -- switch (categorize_decl_for_section (decl, reloc)) -+ switch (category) - { - case SECCAT_RODATA: - case SECCAT_RODATA_MERGE_STR: -@@ -6322,13 +6349,17 @@ decl_readonly_section (const_tree decl, - case SECCAT_RODATA_MERGE_CONST: - case SECCAT_SRODATA: - return true; -- break; - default: - return false; -- break; - } - } - -+bool -+decl_readonly_section (const_tree decl, int reloc) -+{ -+ return decl_readonly_section_1 (categorize_decl_for_section (decl, reloc)); -+} -+ - /* Select a section based on the above categorization. */ - - section * ---- gcc/cgraphunit.c.jj 2011-01-27 17:33:29.416940770 +0100 -+++ gcc/cgraphunit.c 2011-01-27 19:48:24.567639053 +0100 -@@ -1708,6 +1708,10 @@ cgraph_output_in_order (void) - varpool_empty_needed_queue (); - - for (i = 0; i < max; ++i) -+ if (nodes[i].kind == ORDER_VAR) -+ varpool_finalize_named_section_flags (nodes[i].u.v); -+ -+ for (i = 0; i < max; ++i) - { - switch (nodes[i].kind) - { ---- gcc/testsuite/gcc.dg/pr31490-2.c.jj 2011-01-27 17:40:33.365546146 +0100 -+++ gcc/testsuite/gcc.dg/pr31490-2.c 2011-01-27 17:40:33.365546146 +0100 -@@ -0,0 +1,7 @@ -+/* PR middle-end/31490 */ -+/* { dg-do compile } */ -+/* { dg-options "-fpic" { target fpic } } */ -+/* { dg-require-named-sections "" } */ -+ -+const char *const x __attribute__((section("foo"))) = ""; -+const char *const g __attribute__((section("foo"))) = (const char *) 0; ---- gcc/testsuite/gcc.dg/pr31490-3.c.jj 2011-01-27 17:40:33.365546146 +0100 -+++ gcc/testsuite/gcc.dg/pr31490-3.c 2011-01-27 17:40:33.365546146 +0100 -@@ -0,0 +1,7 @@ -+/* PR middle-end/31490 */ -+/* { dg-do compile } */ -+/* { dg-options "-fpic" { target fpic } } */ -+/* { dg-require-named-sections "" } */ -+ -+const char *const x __attribute__((section("foo"))) = (const char *) 0; -+const char *const g __attribute__((section("foo"))) = "bar"; ---- gcc/testsuite/gcc.dg/pr31490-4.c.jj 2011-01-27 17:40:33.366545270 +0100 -+++ gcc/testsuite/gcc.dg/pr31490-4.c 2011-01-27 17:40:33.366545270 +0100 -@@ -0,0 +1,10 @@ -+/* PR middle-end/31490 */ -+/* { dg-do compile } */ -+/* { dg-options "-O2" } */ -+/* { dg-options "-O2 -fpic" { target fpic } } */ -+/* { dg-require-named-sections "" } */ -+ -+const char *const x __attribute__((section("foo"))) = ""; -+const char *const g __attribute__((section("foo"))) = (const char *) 0; -+const char *const y __attribute__((section("bar"))) = (const char *) 0; -+const char *const h __attribute__((section("bar"))) = "bar"; diff --git a/gcc46-pr45136-revert.patch b/gcc46-pr45136-revert.patch deleted file mode 100644 index 423ddea..0000000 --- a/gcc46-pr45136-revert.patch +++ /dev/null @@ -1,207 +0,0 @@ -Temporarily revert: -2011-01-25 Alexandre Oliva - - PR debug/45136 - PR debug/45130 - * haifa-sched.c (get_ebb_head_tail): Move notes across boundary - debug insns. - (no_real_insns_p, schedule_block, set_priorities): Drop special - treatment of boundary debug insns. - * sched-deps.c (sd_init_insn, sd_finish_insn): Don't mark debug - insns. - * sched-ebb.c (schedule_ebbs): Don't skip debug insns. - * sched-int.h (DEBUG_INSN_SCHED_P): Remove. - (BOUNDARY_DEBUG_INSN_P): Likewise. - (SCHEDULE_DEBUG_INSN_P): Likewise. - * sched-rgn.c (init_ready_list): Drop special treatment of - boundary debug insns. - * final.c (rest_of_clean-state): Clear notes' BB. - ---- gcc/sched-ebb.c (revision 169260) -+++ gcc/sched-ebb.c (revision 169259) -@@ -598,9 +598,9 @@ schedule_ebbs (void) - a note or two. */ - while (head != tail) - { -- if (NOTE_P (head)) -+ if (NOTE_P (head) || BOUNDARY_DEBUG_INSN_P (head)) - head = NEXT_INSN (head); -- else if (NOTE_P (tail)) -+ else if (NOTE_P (tail) || BOUNDARY_DEBUG_INSN_P (tail)) - tail = PREV_INSN (tail); - else if (LABEL_P (head)) - head = NEXT_INSN (head); ---- gcc/final.c (revision 169260) -+++ gcc/final.c (revision 169259) -@@ -4402,11 +4402,7 @@ rest_of_clean_state (void) - if (LABEL_P (insn)) - INSN_UID (insn) = CODE_LABEL_NUMBER (insn); - else -- { -- if (NOTE_P (insn)) -- set_block_for_insn (insn, NULL); -- INSN_UID (insn) = 0; -- } -+ INSN_UID (insn) = 0; - } - } - ---- gcc/haifa-sched.c (revision 169260) -+++ gcc/haifa-sched.c (revision 169259) -@@ -1900,30 +1900,8 @@ get_ebb_head_tail (basic_block beg, basi - beg_head = NEXT_INSN (beg_head); - - while (beg_head != beg_tail) -- if (NOTE_P (beg_head)) -+ if (NOTE_P (beg_head) || BOUNDARY_DEBUG_INSN_P (beg_head)) - beg_head = NEXT_INSN (beg_head); -- else if (DEBUG_INSN_P (beg_head)) -- { -- rtx note, next; -- -- for (note = NEXT_INSN (beg_head); -- note != beg_tail; -- note = next) -- { -- next = NEXT_INSN (note); -- if (NOTE_P (note)) -- { -- if (sched_verbose >= 9) -- fprintf (sched_dump, "reorder %i\n", INSN_UID (note)); -- -- reorder_insns_nobb (note, note, PREV_INSN (beg_head)); -- } -- else if (!DEBUG_INSN_P (note)) -- break; -- } -- -- break; -- } - else - break; - -@@ -1935,33 +1913,8 @@ get_ebb_head_tail (basic_block beg, basi - end_head = NEXT_INSN (end_head); - - while (end_head != end_tail) -- if (NOTE_P (end_tail)) -+ if (NOTE_P (end_tail) || BOUNDARY_DEBUG_INSN_P (end_tail)) - end_tail = PREV_INSN (end_tail); -- else if (DEBUG_INSN_P (end_tail)) -- { -- rtx note, prev; -- -- for (note = PREV_INSN (end_tail); -- note != end_head; -- note = prev) -- { -- prev = PREV_INSN (note); -- if (NOTE_P (note)) -- { -- if (sched_verbose >= 9) -- fprintf (sched_dump, "reorder %i\n", INSN_UID (note)); -- -- reorder_insns_nobb (note, note, end_tail); -- -- if (end_tail == BB_END (end)) -- df_insn_change_bb (note, NULL); -- } -- else if (!DEBUG_INSN_P (note)) -- break; -- } -- -- break; -- } - else - break; - -@@ -1975,7 +1928,8 @@ no_real_insns_p (const_rtx head, const_r - { - while (head != NEXT_INSN (tail)) - { -- if (!NOTE_P (head) && !LABEL_P (head)) -+ if (!NOTE_P (head) && !LABEL_P (head) -+ && !BOUNDARY_DEBUG_INSN_P (head)) - return 0; - head = NEXT_INSN (head); - } -@@ -2858,7 +2812,7 @@ schedule_block (basic_block *target_bb) - last_scheduled_insn = prev_head; - - gcc_assert ((NOTE_P (last_scheduled_insn) -- || DEBUG_INSN_P (last_scheduled_insn)) -+ || BOUNDARY_DEBUG_INSN_P (last_scheduled_insn)) - && BLOCK_FOR_INSN (last_scheduled_insn) == *target_bb); - - /* Initialize INSN_QUEUE. Q_SIZE is the total number of insns in the -@@ -3365,7 +3319,7 @@ set_priorities (rtx head, rtx tail) - current_sched_info->sched_max_insns_priority; - rtx prev_head; - -- if (head == tail && ! INSN_P (head)) -+ if (head == tail && (! INSN_P (head) || BOUNDARY_DEBUG_INSN_P (head))) - gcc_unreachable (); - - n_insn = 0; ---- gcc/sched-deps.c (revision 169260) -+++ gcc/sched-deps.c (revision 169259) -@@ -715,6 +715,9 @@ sd_init_insn (rtx insn) - INSN_FORW_DEPS (insn) = create_deps_list (); - INSN_RESOLVED_FORW_DEPS (insn) = create_deps_list (); - -+ if (DEBUG_INSN_P (insn)) -+ DEBUG_INSN_SCHED_P (insn) = TRUE; -+ - /* ??? It would be nice to allocate dependency caches here. */ - } - -@@ -724,6 +727,12 @@ sd_finish_insn (rtx insn) - { - /* ??? It would be nice to deallocate dependency caches here. */ - -+ if (DEBUG_INSN_P (insn)) -+ { -+ gcc_assert (DEBUG_INSN_SCHED_P (insn)); -+ DEBUG_INSN_SCHED_P (insn) = FALSE; -+ } -+ - free_deps_list (INSN_HARD_BACK_DEPS (insn)); - INSN_HARD_BACK_DEPS (insn) = NULL; - ---- gcc/sched-int.h (revision 169260) -+++ gcc/sched-int.h (revision 169259) -@@ -887,6 +887,23 @@ extern VEC(haifa_deps_insn_data_def, hea - #define IS_SPECULATION_BRANCHY_CHECK_P(INSN) \ - (RECOVERY_BLOCK (INSN) != NULL && RECOVERY_BLOCK (INSN) != EXIT_BLOCK_PTR) - -+/* The unchanging bit tracks whether a debug insn is to be handled -+ like an insn (i.e., schedule it) or like a note (e.g., it is next -+ to a basic block boundary. */ -+#define DEBUG_INSN_SCHED_P(insn) \ -+ (RTL_FLAG_CHECK1("DEBUG_INSN_SCHED_P", (insn), DEBUG_INSN)->unchanging) -+ -+/* True if INSN is a debug insn that is next to a basic block -+ boundary, i.e., it is to be handled by the scheduler like a -+ note. */ -+#define BOUNDARY_DEBUG_INSN_P(insn) \ -+ (DEBUG_INSN_P (insn) && !DEBUG_INSN_SCHED_P (insn)) -+/* True if INSN is a debug insn that is not next to a basic block -+ boundary, i.e., it is to be handled by the scheduler like an -+ insn. */ -+#define SCHEDULE_DEBUG_INSN_P(insn) \ -+ (DEBUG_INSN_P (insn) && DEBUG_INSN_SCHED_P (insn)) -+ - /* Dep status (aka ds_t) of the link encapsulates information, that is needed - for speculative scheduling. Namely, it is 4 integers in the range - [0, MAX_DEP_WEAK] and 3 bits. ---- gcc/sched-rgn.c (revision 169260) -+++ gcc/sched-rgn.c (revision 169259) -@@ -2138,7 +2138,7 @@ init_ready_list (void) - src_head = head; - - for (insn = src_head; insn != src_next_tail; insn = NEXT_INSN (insn)) -- if (INSN_P (insn)) -+ if (INSN_P (insn) && !BOUNDARY_DEBUG_INSN_P (insn)) - try_ready (insn); - } - } diff --git a/gcc46-pr46890.patch b/gcc46-pr46890.patch deleted file mode 100644 index 7afb3f6..0000000 --- a/gcc46-pr46890.patch +++ /dev/null @@ -1,110 +0,0 @@ -2010-12-17 Nathan Froyd - - PR c++/46890 - * parser.c (cp_parser_class_specifier): Add RID_TYPEDEF to - lookahead logic and fix setting of want_semicolon. - - * g++.dg/pr46890.C: New test. - * g++.dg/parse/semicolon.C: Add new cases. - ---- gcc/cp/parser.c -+++ gcc/cp/parser.c -@@ -16959,17 +16959,16 @@ cp_parser_class_specifier (cp_parser* parser) - static const var = ...; */ - case CPP_KEYWORD: - if (keyword_is_storage_class_specifier (token->keyword) -- || keyword_is_type_qualifier (token->keyword)) -+ || keyword_is_type_qualifier (token->keyword) -+ || token->keyword == RID_TYPEDEF) - { - cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2); - -- if (lookahead->type == CPP_KEYWORD -- && !keyword_begins_type_specifier (lookahead->keyword)) -- want_semicolon = false; -- else if (lookahead->type == CPP_NAME) -- /* Handling user-defined types here would be nice, but -- very tricky. */ -- want_semicolon = false; -+ /* Handling user-defined types here would be nice, but very -+ tricky. */ -+ want_semicolon -+ = (lookahead->type == CPP_KEYWORD -+ && keyword_begins_type_specifier (lookahead->keyword)); - } - break; - default: ---- gcc/testsuite/g++.dg/parse/semicolon3.C -+++ gcc/testsuite/g++.dg/parse/semicolon3.C -@@ -62,6 +62,48 @@ autotest (void) - return ok10.a; - } - -+struct OK11 -+{ -+ int a; -+} // no complaints -+ const *ok11_var; -+ -+struct OK12 -+{ -+ int a; -+} // no complaints -+ const &ok12_var = *(new OK12()); -+ -+struct OK13 -+{ -+ int a; -+} // no complaints -+ static *ok13_var; -+ -+class OK14 -+{ -+ struct OK14sub -+ { -+ int a; -+ } // no complaints -+ static &ok14_var; -+}; -+ -+class OK15 -+{ -+ int a; -+} typedef tOK15; -+ -+class OK16 -+{ -+ int a; -+} typedef *pOK16; -+ -+class OK17 -+{ -+ int a; -+} typedef &rOK16; -+ - struct E1 - { - int a; -@@ -196,6 +238,13 @@ class E17 - mutable int i; - } // { dg-error "after class definition" } - -+class E18 -+{ -+ int a; -+} // { dg-error "after class definition" } -+ -+typedef int E18int; -+ - /* This was the original test from the PR. */ - - class C0 ---- gcc/testsuite/g++.dg/pr46890.C -+++ gcc/testsuite/g++.dg/pr46890.C -@@ -0,0 +1,6 @@ -+// PR c++/46890 -+// { dg-do compile } -+ -+struct MdatResource { -+const char *mdatAlloc; -+} const *_resource; diff --git a/gcc46-pr47106-revert.patch b/gcc46-pr47106-revert.patch deleted file mode 100644 index 9940f65..0000000 --- a/gcc46-pr47106-revert.patch +++ /dev/null @@ -1,31 +0,0 @@ -Temporarily revert: - 2011-01-21 Alexandre Oliva - - PR debug/47106 - * cfgexpand.c (account_used_vars_for_block): Only account vars - that are annotated as used. - (estimated_stack_frame_size): Don't set TREE_USED. - ---- gcc/cfgexpand.c (revision 169093) -+++ gcc/cfgexpand.c (revision 169092) -@@ -1325,7 +1325,7 @@ account_used_vars_for_block (tree block, - - /* Expand all variables at this level. */ - for (t = BLOCK_VARS (block); t ; t = DECL_CHAIN (t)) -- if (var_ann (t) && var_ann (t)->used) -+ if (TREE_USED (t)) - size += expand_one_var (t, toplevel, false); - - /* Expand all variables at containing levels. */ -@@ -1389,10 +1389,9 @@ estimated_stack_frame_size (tree decl) - - FOR_EACH_LOCAL_DECL (cfun, ix, var) - { -- /* TREE_USED marks local variables that do not appear in lexical -- blocks. We don't want to expand those that do twice. */ - if (TREE_USED (var)) - size += expand_one_var (var, true, false); -+ TREE_USED (var) = 1; - } - size += account_used_vars_for_block (outer_block, true); - diff --git a/gcc46-pr47610.patch b/gcc46-pr47610.patch new file mode 100644 index 0000000..777ce7b --- /dev/null +++ b/gcc46-pr47610.patch @@ -0,0 +1,23 @@ +2011-02-05 Jakub Jelinek + + PR middle-end/47610 + * varasm.c (default_section_type_flags): If decl is NULL, + and name is .data.rel.ro or .data.rel.ro.local, set SECTION_RELRO + bit. + +--- gcc/varasm.c.jj 2011-02-03 20:09:38.000000000 +0100 ++++ gcc/varasm.c 2011-02-05 00:01:59.911796344 +0100 +@@ -6060,7 +6060,12 @@ default_section_type_flags (tree decl, c + flags = SECTION_WRITE; + } + else +- flags = SECTION_WRITE; ++ { ++ flags = SECTION_WRITE; ++ if (strcmp (name, ".data.rel.ro") == 0 ++ || strcmp (name, ".data.rel.ro.local") == 0) ++ flags |= SECTION_RELRO; ++ } + + if (decl && DECL_ONE_ONLY (decl)) + flags |= SECTION_LINKONCE; diff --git a/sources b/sources index 92ef864..224f569 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 2659f09c2e43ef8b7d4406321753f1b2 fastjar-0.97.tar.gz -6b870b2c1d67a5e2822ffc4fc48f15a1 gcc-4.6.0-20110128.tar.bz2 +262b320051245fab671a5ec8429381cf gcc-4.6.0-20110205.tar.bz2