diff mbox

Support the __thread storage class

Message ID 1240793096-23090-1-git-send-email-albertito@blitiri.com.ar (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Alberto Bertogli April 27, 2009, 12:44 a.m. UTC
GCC supports a __thread storage class, used to indicate thread-local
storage. It may be used alone, or with extern or static.

This patch makes sparse aware of it, but ignores it completely.

Signed-off-by: Alberto Bertogli <albertito@blitiri.com.ar>
---
 parse.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

Comments

Christopher Li April 27, 2009, 7:20 a.m. UTC | #1
On Sun, Apr 26, 2009 at 5:44 PM, Alberto Bertogli
<albertito@blitiri.com.ar> wrote:
> GCC supports a __thread storage class, used to indicate thread-local
> storage. It may be used alone, or with extern or static.

Can you add the validations for the three usage case?

>
> This patch makes sparse aware of it, but ignores it completely.

Tempting to rename it as ignore_declartor or some thing like that.
Because we currently don't do any thing about it. Maybe there
will be similar specifier can share the simple ignore later.

Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/parse.c b/parse.c
index 14ae25d..e49cb39 100644
--- a/parse.c
+++ b/parse.c
@@ -41,7 +41,7 @@  static declarator_t
 	attribute_specifier, typeof_specifier, parse_asm_declarator,
 	typedef_specifier, inline_specifier, auto_specifier,
 	register_specifier, static_specifier, extern_specifier,
-	const_qualifier, volatile_qualifier;
+	thread_specifier, const_qualifier, volatile_qualifier;
 
 static struct token *parse_if_statement(struct token *token, struct statement *stmt);
 static struct token *parse_return_statement(struct token *token, struct statement *stmt);
@@ -125,6 +125,11 @@  static struct symbol_op extern_op = {
 	.declarator = extern_specifier,
 };
 
+static struct symbol_op thread_op = {
+	.type = KW_MODIFIER,
+	.declarator = thread_specifier,
+};
+
 static struct symbol_op const_op = {
 	.type = KW_QUALIFIER,
 	.declarator = const_qualifier,
@@ -407,6 +412,7 @@  static struct init_keyword {
 	{ "register",	NS_TYPEDEF, .op = &register_op },
 	{ "static",	NS_TYPEDEF, .op = &static_op },
 	{ "extern",	NS_TYPEDEF, .op = &extern_op },
+	{ "__thread",	NS_TYPEDEF, .op = &thread_op },
 
 	/* Statement */
 	{ "if",		NS_KEYWORD, .op = &if_op },
@@ -1210,6 +1216,12 @@  static struct token *extern_specifier(struct token *next, struct decl_state *ctx
 	return next;
 }
 
+static struct token *thread_specifier(struct token *next, struct decl_state *ctx)
+{
+	/* Ignore __thread */
+	return next;
+}
+
 static struct token *attribute_force(struct token *token, struct symbol *attr, struct decl_state *ctx)
 {
 	set_storage_class(&token->pos, ctx, SForced);