4.6.0-0.6
This commit is contained in:
parent
055fab3c16
commit
6b781854a6
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/fastjar-0.97.tar.gz
|
/fastjar-0.97.tar.gz
|
||||||
/gcc-4.6.0-20110128.tar.bz2
|
/gcc-4.6.0-20110128.tar.bz2
|
||||||
|
/gcc-4.6.0-20110205.tar.bz2
|
||||||
|
50
gcc.spec
50
gcc.spec
@ -1,9 +1,9 @@
|
|||||||
%global DATE 20110128
|
%global DATE 20110205
|
||||||
%global SVNREV 169352
|
%global SVNREV 169849
|
||||||
%global gcc_version 4.6.0
|
%global gcc_version 4.6.0
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %{release}, append them after %{gcc_release} on Release: line.
|
# %{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 _unpackaged_files_terminate_build 0
|
||||||
%global multilib_64_archs sparc64 ppc64 s390x x86_64
|
%global multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||||
%ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha
|
%ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha
|
||||||
@ -164,12 +164,10 @@ Patch14: gcc46-pr38757.patch
|
|||||||
Patch15: gcc46-libstdc++-docs.patch
|
Patch15: gcc46-libstdc++-docs.patch
|
||||||
Patch17: gcc46-no-add-needed.patch
|
Patch17: gcc46-no-add-needed.patch
|
||||||
Patch18: gcc46-unwind-debughook-sdt.patch
|
Patch18: gcc46-unwind-debughook-sdt.patch
|
||||||
Patch19: gcc46-pr47106-revert.patch
|
Patch19: gcc46-ppl-0.10.patch
|
||||||
Patch20: gcc46-pr46890.patch
|
Patch20: gcc46-Woverlength-string.patch
|
||||||
Patch21: gcc46-ppl-0.10.patch
|
Patch21: gcc46-Woverlength-string-asm.patch
|
||||||
Patch22: gcc46-pr31490.patch
|
Patch22: gcc46-pr47610.patch
|
||||||
Patch23: gcc46-Woverlength-string.patch
|
|
||||||
Patch24: gcc46-pr45136-revert.patch
|
|
||||||
|
|
||||||
Patch1000: fastjar-0.97-segfault.patch
|
Patch1000: fastjar-0.97-segfault.patch
|
||||||
Patch1001: fastjar-0.97-len1.patch
|
Patch1001: fastjar-0.97-len1.patch
|
||||||
@ -600,12 +598,10 @@ not stable, so plugins must be rebuilt any time GCC is updated.
|
|||||||
%endif
|
%endif
|
||||||
%patch17 -p0 -b .no-add-needed~
|
%patch17 -p0 -b .no-add-needed~
|
||||||
%patch18 -p0 -b .unwind-debughook-sdt~
|
%patch18 -p0 -b .unwind-debughook-sdt~
|
||||||
%patch19 -p0 -b .pr47106-revert~
|
%patch19 -p0 -b .ppl-0.10~
|
||||||
%patch20 -p0 -b .pr46890~
|
%patch20 -p0 -b .Woverlength-string~
|
||||||
%patch21 -p0 -b .ppl-0.10~
|
%patch21 -p0 -b .Woverlength-string-asm~
|
||||||
%patch22 -p0 -b .pr31490~
|
%patch22 -p0 -b .pr47610~
|
||||||
%patch23 -p0 -b .Woverlength-string~
|
|
||||||
%patch24 -p0 -b .pr45136-revert~
|
|
||||||
|
|
||||||
# This testcase doesn't compile.
|
# This testcase doesn't compile.
|
||||||
rm libjava/testsuite/libjava.lang/PR35020*
|
rm libjava/testsuite/libjava.lang/PR35020*
|
||||||
@ -2341,6 +2337,30 @@ fi
|
|||||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
|
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Feb 5 2011 Jakub Jelinek <jakub@redhat.com> 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 <jakub@redhat.com> 4.6.0-0.5
|
* Fri Jan 28 2011 Jakub Jelinek <jakub@redhat.com> 4.6.0-0.5
|
||||||
- update from trunk
|
- update from trunk
|
||||||
- PRs bootstrap/47467, c++/43601, c++/47476, c/21659, c/43082, c/47473,
|
- PRs bootstrap/47467, c++/43601, c++/47476, c/21659, c/43082, c/47473,
|
||||||
|
180
gcc46-Woverlength-string-asm.patch
Normal file
180
gcc46-Woverlength-string-asm.patch
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
2011-02-02 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* 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: ;
|
||||||
|
+}
|
||||||
|
+
|
@ -1,289 +0,0 @@
|
|||||||
2011-01-27 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
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 <dtemirbulatov@gmail.com>
|
|
||||||
Steve Ellcey <sje@cup.hp.com>
|
|
||||||
|
|
||||||
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";
|
|
@ -1,207 +0,0 @@
|
|||||||
Temporarily revert:
|
|
||||||
2011-01-25 Alexandre Oliva <aoliva@redhat.com>
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,110 +0,0 @@
|
|||||||
2010-12-17 Nathan Froyd <froydnj@codesourcery.com>
|
|
||||||
|
|
||||||
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 <type> 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;
|
|
@ -1,31 +0,0 @@
|
|||||||
Temporarily revert:
|
|
||||||
2011-01-21 Alexandre Oliva <aoliva@redhat.com>
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
23
gcc46-pr47610.patch
Normal file
23
gcc46-pr47610.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
2011-02-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
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;
|
Loading…
Reference in New Issue
Block a user