aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@gcc.gnu.org>2006-10-15 16:20:06 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2006-10-15 16:20:06 +0000
commit61e00a5e0d9676dacd7e407d6b797146f10aae7f (patch)
tree40fc048501d66f0b1d5def16d9ebe2a7ba1b8202
parent70c99f6c02013c9de34ce838732dd370d7ca379e (diff)
downloadgcc-61e00a5e0d9676dacd7e407d6b797146f10aae7f.zip
gcc-61e00a5e0d9676dacd7e407d6b797146f10aae7f.tar.gz
gcc-61e00a5e0d9676dacd7e407d6b797146f10aae7f.tar.bz2
re PR middle-end/29299 (gcc "used" attribute has no effect on local-scope static variables)
PR middle-end/29299 * cgraphunit.c (cgraph_finalize_compilation_unit): Call process_function_and_variable_attributes on all variables, including those discovered during cgraph construction phase. From-SVN: r117746
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cgraphunit.c16
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/pr29299.c10
4 files changed, 34 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8c36c0e..bf63002 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2006-10-15 Jan Hubicka <jh@suse.cz>
+ Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/29299
+ * cgraphunit.c (cgraph_finalize_compilation_unit): Call
+ process_function_and_variable_attributes on all variables, including
+ those discovered during cgraph construction phase.
+
2006-10-15 Bernhard Fischer <aldot@gcc.gnu.org>
* final.c: Update Copyright year. Commentary typo fix. Fix whitespace
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 10c52ea..d7ad793 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1055,6 +1055,7 @@ cgraph_finalize_compilation_unit (void)
/* Keep track of already processed nodes when called multiple times for
intermodule optimization. */
static struct cgraph_node *first_analyzed;
+ struct cgraph_node *first_processed = first_analyzed;
static struct cgraph_varpool_node *first_analyzed_var;
if (errorcount || sorrycount)
@@ -1077,7 +1078,10 @@ cgraph_finalize_compilation_unit (void)
}
timevar_push (TV_CGRAPH);
- process_function_and_variable_attributes (first_analyzed, first_analyzed_var);
+ process_function_and_variable_attributes (first_processed,
+ first_analyzed_var);
+ first_processed = cgraph_nodes;
+ first_analyzed_var = cgraph_varpool_nodes;
cgraph_varpool_analyze_pending_decls ();
if (cgraph_dump_file)
{
@@ -1119,11 +1123,16 @@ cgraph_finalize_compilation_unit (void)
if (!edge->callee->reachable)
cgraph_mark_reachable_node (edge->callee);
+ /* We finalize local static variables during constructing callgraph
+ edges. Process their attributes too. */
+ process_function_and_variable_attributes (first_processed,
+ first_analyzed_var);
+ first_processed = cgraph_nodes;
+ first_analyzed_var = cgraph_varpool_nodes;
cgraph_varpool_analyze_pending_decls ();
}
- /* Collect entry points to the unit. */
-
+/bin/bash: line 1: :Q: command not found
if (cgraph_dump_file)
{
fprintf (cgraph_dump_file, "Unit entry points:");
@@ -1163,7 +1172,6 @@ cgraph_finalize_compilation_unit (void)
dump_cgraph (cgraph_dump_file);
}
first_analyzed = cgraph_nodes;
- first_analyzed_var = cgraph_varpool_nodes;
ggc_collect ();
timevar_pop (TV_CGRAPH);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 81eec21..c2ff6c2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2006-10-15 Richard Guenther <rguenther@suse.de>
+
+ * gcc.dg/pr29299.c: New testcase.
+
2006-10-15 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/24767
diff --git a/gcc/testsuite/gcc.dg/pr29299.c b/gcc/testsuite/gcc.dg/pr29299.c
new file mode 100644
index 0000000..9049060
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr29299.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+static int bof __attribute__((used));
+int foo()
+{
+ static int barbarbarbar __attribute__((used));
+};
+
+/* { dg-final { scan-assembler "barbarbarbar" } } */