aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-09-03 11:58:21 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2010-09-03 09:58:21 +0000
commita482b1f5f45fbd54fce4098d4e03958d1457a310 (patch)
tree1a0056a61f675aa9f60f5f9ea43861c09f244e5f
parent2f757e4a8b6357445614fe51c4ff394fb13be173 (diff)
downloadgcc-a482b1f5f45fbd54fce4098d4e03958d1457a310.zip
gcc-a482b1f5f45fbd54fce4098d4e03958d1457a310.tar.gz
gcc-a482b1f5f45fbd54fce4098d4e03958d1457a310.tar.bz2
passes.c (rest_of_decl_compilation): Do not add local vars into varpol.
* passes.c (rest_of_decl_compilation): Do not add local vars into varpol. * varpool.c (varpool_get_node, varpool_node): Sanity check that only static or extern vars are in varpool. (varpool_finalize_decl): Sanity check that only static vars are finalized. From-SVN: r163804
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/passes.c3
-rw-r--r--gcc/varpool.c8
3 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d313703..5e24826 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-09-03 Jan Hubicka <jh@suse.cz>
+
+ * passes.c (rest_of_decl_compilation): Do not add local vars into varpol.
+ * varpool.c (varpool_get_node, varpool_node): Sanity check that only
+ static or extern vars are in varpool.
+ (varpool_finalize_decl): Sanity check that only static vars are finalized.
+
2010-09-03 Jakub Jelinek <jakub@redhat.com>
PR debug/45500
diff --git a/gcc/passes.c b/gcc/passes.c
index 4823c63..88da9b3 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -219,7 +219,8 @@ rest_of_decl_compilation (tree decl,
/* Let cgraph know about the existence of variables. */
if (in_lto_p && !at_end)
;
- else if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
+ else if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl)
+ && TREE_STATIC (decl))
varpool_node (decl);
}
diff --git a/gcc/varpool.c b/gcc/varpool.c
index dcf3518..817a319 100644
--- a/gcc/varpool.c
+++ b/gcc/varpool.c
@@ -111,7 +111,8 @@ varpool_get_node (tree decl)
{
struct varpool_node key, **slot;
- gcc_assert (DECL_P (decl) && TREE_CODE (decl) != FUNCTION_DECL);
+ gcc_assert (TREE_CODE (decl) == VAR_DECL
+ && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)));
if (!varpool_hash)
return NULL;
@@ -129,7 +130,8 @@ varpool_node (tree decl)
{
struct varpool_node key, *node, **slot;
- gcc_assert (DECL_P (decl) && TREE_CODE (decl) != FUNCTION_DECL);
+ gcc_assert (TREE_CODE (decl) == VAR_DECL
+ && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)));
if (!varpool_hash)
varpool_hash = htab_create_ggc (10, hash_varpool_node,
@@ -365,6 +367,8 @@ varpool_finalize_decl (tree decl)
{
struct varpool_node *node = varpool_node (decl);
+ gcc_assert (TREE_STATIC (decl));
+
/* The first declaration of a variable that comes through this function
decides whether it is global (in C, has external linkage)
or local (in C, has internal linkage). So do nothing more