forked from OSchip/llvm-project
Add ThreadSpecified bit to Decl.
- Patch from Kevin Tew. llvm-svn: 55940
This commit is contained in:
parent
3871441861
commit
1e6ff5f37f
|
@ -228,12 +228,14 @@ private:
|
|||
Stmt *Init;
|
||||
// FIXME: This can be packed into the bitfields in Decl.
|
||||
unsigned SClass : 3;
|
||||
bool ThreadSpecified : 1;
|
||||
|
||||
friend class StmtIteratorBase;
|
||||
protected:
|
||||
VarDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
|
||||
QualType T, StorageClass SC, ScopedDecl *PrevDecl)
|
||||
: ValueDecl(DK, DC, L, Id, T, PrevDecl), Init(0) { SClass = SC; }
|
||||
: ValueDecl(DK, DC, L, Id, T, PrevDecl), Init(0),
|
||||
ThreadSpecified(false) { SClass = SC; }
|
||||
public:
|
||||
static VarDecl *Create(ASTContext &C, DeclContext *DC,
|
||||
SourceLocation L, IdentifierInfo *Id,
|
||||
|
@ -245,6 +247,11 @@ public:
|
|||
Expr *getInit() { return (Expr*) Init; }
|
||||
void setInit(Expr *I) { Init = (Stmt*) I; }
|
||||
|
||||
void setThreadSpecified(bool T) { ThreadSpecified = T; }
|
||||
bool isThreadSpecified() const {
|
||||
return ThreadSpecified;
|
||||
}
|
||||
|
||||
/// hasLocalStorage - Returns true if a variable with function scope
|
||||
/// is a non-static local variable.
|
||||
bool hasLocalStorage() const {
|
||||
|
|
|
@ -743,6 +743,7 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
|
|||
D.getIdentifierLoc(), II,
|
||||
R, LastDeclarator);
|
||||
} else {
|
||||
bool ThreadSpecified = D.getDeclSpec().isThreadSpecified();
|
||||
if (S->getFnParent() == 0) {
|
||||
// C99 6.9p2: The storage-class specifiers auto and register shall not
|
||||
// appear in the declaration specifiers in an external declaration.
|
||||
|
@ -751,12 +752,10 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
|
|||
R.getAsString());
|
||||
InvalidDecl = true;
|
||||
}
|
||||
NewVD = VarDecl::Create(Context, CurContext, D.getIdentifierLoc(),
|
||||
II, R, SC, LastDeclarator);
|
||||
} else {
|
||||
NewVD = VarDecl::Create(Context, CurContext, D.getIdentifierLoc(),
|
||||
II, R, SC, LastDeclarator);
|
||||
}
|
||||
NewVD = VarDecl::Create(Context, CurContext, D.getIdentifierLoc(),
|
||||
II, R, SC, LastDeclarator);
|
||||
NewVD->setThreadSpecified(ThreadSpecified);
|
||||
}
|
||||
// Handle attributes prior to checking for duplicates in MergeVarDecl
|
||||
ProcessDeclAttributes(NewVD, D);
|
||||
|
|
Loading…
Reference in New Issue