tree.c (decl_storage_duration): New.

* tree.c (decl_storage_duration): New.
	* cp-tree.h: Declare it.
	(duration_kind): Return values.

From-SVN: r164944
This commit is contained in:
Jason Merrill 2010-10-04 12:18:03 -04:00 committed by Jason Merrill
parent 828fde809c
commit b95ca5135e
3 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2010-10-04 Jason Merrill <jason@redhat.com>
* tree.c (decl_storage_duration): New.
* cp-tree.h: Declare it.
(duration_kind): Return values.
2010-10-03 Jason Merrill <jason@redhat.com>
* typeck.c (require_complete_type_sfinae): Add complain parm to...

View File

@ -3934,6 +3934,13 @@ typedef enum linkage_kind {
lk_external /* External linkage. */
} linkage_kind;
typedef enum duration_kind {
dk_static,
dk_thread,
dk_auto,
dk_dynamic
} duration_kind;
/* Bitmask flags to control type substitution. */
enum tsubst_flags {
tf_none = 0, /* nothing special */
@ -5402,6 +5409,7 @@ extern int count_trees (tree);
extern int char_type_p (tree);
extern void verify_stmt_tree (tree);
extern linkage_kind decl_linkage (tree);
extern duration_kind decl_storage_duration (tree);
extern tree cp_walk_subtrees (tree*, int*, walk_tree_fn,
void*, struct pointer_set_t*);
#define cp_walk_tree(a,b,c,d) \

View File

@ -2985,6 +2985,25 @@ decl_linkage (tree decl)
/* Everything else has internal linkage. */
return lk_internal;
}
/* Returns the storage duration of the object or reference associated with
the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
duration_kind
decl_storage_duration (tree decl)
{
if (TREE_CODE (decl) == PARM_DECL)
return dk_auto;
if (TREE_CODE (decl) == FUNCTION_DECL)
return dk_static;
gcc_assert (TREE_CODE (decl) == VAR_DECL);
if (!TREE_STATIC (decl)
&& !DECL_EXTERNAL (decl))
return dk_auto;
if (DECL_THREAD_LOCAL_P (decl))
return dk_thread;
return dk_static;
}
/* EXP is an expression that we want to pre-evaluate. Returns (in
*INITP) an expression that will perform the pre-evaluation. The