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
This commit is contained in:
Jan Hubicka 2010-09-03 11:58:21 +02:00 committed by Jan Hubicka
parent 2f757e4a8b
commit a482b1f5f4
3 changed files with 15 additions and 3 deletions

View File

@ -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> 2010-09-03 Jakub Jelinek <jakub@redhat.com>
PR debug/45500 PR debug/45500

View File

@ -219,7 +219,8 @@ rest_of_decl_compilation (tree decl,
/* Let cgraph know about the existence of variables. */ /* Let cgraph know about the existence of variables. */
if (in_lto_p && !at_end) 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); varpool_node (decl);
} }

View File

@ -111,7 +111,8 @@ varpool_get_node (tree decl)
{ {
struct varpool_node key, **slot; 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) if (!varpool_hash)
return NULL; return NULL;
@ -129,7 +130,8 @@ varpool_node (tree decl)
{ {
struct varpool_node key, *node, **slot; 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) if (!varpool_hash)
varpool_hash = htab_create_ggc (10, hash_varpool_node, 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); struct varpool_node *node = varpool_node (decl);
gcc_assert (TREE_STATIC (decl));
/* The first declaration of a variable that comes through this function /* The first declaration of a variable that comes through this function
decides whether it is global (in C, has external linkage) decides whether it is global (in C, has external linkage)
or local (in C, has internal linkage). So do nothing more or local (in C, has internal linkage). So do nothing more