Commit b95ca513 by Jason Merrill Committed by Jason Merrill

tree.c (decl_storage_duration): New.

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

From-SVN: r164944
parent 828fde80
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> 2010-10-03 Jason Merrill <jason@redhat.com>
* typeck.c (require_complete_type_sfinae): Add complain parm to... * typeck.c (require_complete_type_sfinae): Add complain parm to...
......
...@@ -3934,6 +3934,13 @@ typedef enum linkage_kind { ...@@ -3934,6 +3934,13 @@ typedef enum linkage_kind {
lk_external /* External linkage. */ lk_external /* External linkage. */
} linkage_kind; } linkage_kind;
typedef enum duration_kind {
dk_static,
dk_thread,
dk_auto,
dk_dynamic
} duration_kind;
/* Bitmask flags to control type substitution. */ /* Bitmask flags to control type substitution. */
enum tsubst_flags { enum tsubst_flags {
tf_none = 0, /* nothing special */ tf_none = 0, /* nothing special */
...@@ -5402,6 +5409,7 @@ extern int count_trees (tree); ...@@ -5402,6 +5409,7 @@ extern int count_trees (tree);
extern int char_type_p (tree); extern int char_type_p (tree);
extern void verify_stmt_tree (tree); extern void verify_stmt_tree (tree);
extern linkage_kind decl_linkage (tree); extern linkage_kind decl_linkage (tree);
extern duration_kind decl_storage_duration (tree);
extern tree cp_walk_subtrees (tree*, int*, walk_tree_fn, extern tree cp_walk_subtrees (tree*, int*, walk_tree_fn,
void*, struct pointer_set_t*); void*, struct pointer_set_t*);
#define cp_walk_tree(a,b,c,d) \ #define cp_walk_tree(a,b,c,d) \
......
...@@ -2985,6 +2985,25 @@ decl_linkage (tree decl) ...@@ -2985,6 +2985,25 @@ decl_linkage (tree decl)
/* Everything else has internal linkage. */ /* Everything else has internal linkage. */
return lk_internal; 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 /* EXP is an expression that we want to pre-evaluate. Returns (in
*INITP) an expression that will perform the pre-evaluation. The *INITP) an expression that will perform the pre-evaluation. The
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment