c-decl.c (duplicate_decls): Error out for incompatible TLS declarations.
* c-decl.c (duplicate_decls): Error out for incompatible TLS declarations. * testsuite/gcc.dg/tls/diag-3.c: New. From-SVN: r56084
This commit is contained in:
parent
f1a044c7da
commit
1ae0ccb63f
@ -1,3 +1,10 @@
|
||||
2002-08-06 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* c-decl.c (duplicate_decls): Error out for incompatible TLS
|
||||
declarations.
|
||||
|
||||
* testsuite/gcc.dg/tls/diag-3.c: New.
|
||||
|
||||
2002-08-06 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* c-common.c (c_expand_expr) [STMT_EXPR]: If the last expression is
|
||||
|
14
gcc/c-decl.c
14
gcc/c-decl.c
@ -1400,6 +1400,20 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
|
||||
}
|
||||
error_with_decl (olddecl, "previous declaration of `%s'");
|
||||
}
|
||||
/* TLS cannot follow non-TLS declaration. */
|
||||
else if (TREE_CODE (olddecl) == VAR_DECL && TREE_CODE (newdecl) == VAR_DECL
|
||||
&& !DECL_THREAD_LOCAL (olddecl) && DECL_THREAD_LOCAL (newdecl))
|
||||
{
|
||||
error_with_decl (newdecl, "thread-local declaration of `%s' follows non thread-local declaration");
|
||||
error_with_decl (olddecl, "previous declaration of `%s'");
|
||||
}
|
||||
/* non-TLS declaration cannot follow TLS declaration. */
|
||||
else if (TREE_CODE (olddecl) == VAR_DECL && TREE_CODE (newdecl) == VAR_DECL
|
||||
&& DECL_THREAD_LOCAL (olddecl) && !DECL_THREAD_LOCAL (newdecl))
|
||||
{
|
||||
error_with_decl (newdecl, "non thread-local declaration of `%s' follows thread-local declaration");
|
||||
error_with_decl (olddecl, "previous declaration of `%s'");
|
||||
}
|
||||
else
|
||||
{
|
||||
errmsg = redeclaration_error_message (newdecl, olddecl);
|
||||
|
@ -1,3 +1,7 @@
|
||||
2002-08-06 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* testsuite/gcc.dg/tls/diag-3.c: New.
|
||||
|
||||
2002-08-07 Gabriel Dos Reis <gdr@nerim.net>
|
||||
|
||||
* g++.dg/README (Subdirectories): Document new subdir expr.
|
||||
|
10
gcc/testsuite/gcc.dg/tls/diag-3.c
Normal file
10
gcc/testsuite/gcc.dg/tls/diag-3.c
Normal file
@ -0,0 +1,10 @@
|
||||
/* Report invalid extern and __thread combinations. */
|
||||
|
||||
extern int j; /* { dg-error "previous declaration" } */
|
||||
__thread int j; /* { dg-error "thread-local declaration for" } */
|
||||
|
||||
extern __thread int i; /* { dg-error "previous declaration" } */
|
||||
int i; /* { dg-error "non thread-local" } */
|
||||
|
||||
extern __thread int k; /* This is fine. */
|
||||
__thread int k;
|
Loading…
x
Reference in New Issue
Block a user