Add more support for Apple's "private extern" extension...

llvm-svn: 46371
This commit is contained in:
Steve Naroff 2008-01-25 22:14:40 +00:00
parent 109e362fbd
commit fda820970a
5 changed files with 11 additions and 9 deletions

View File

@ -572,6 +572,7 @@ void CodeGenModule::EmitGlobalVar(const FileVarDecl *D) {
assert(0 && "Can't have auto or register globals"); assert(0 && "Can't have auto or register globals");
case VarDecl::None: case VarDecl::None:
case VarDecl::Extern: case VarDecl::Extern:
case VarDecl::PrivateExtern:
// todo: common // todo: common
break; break;
case VarDecl::Static: case VarDecl::Static:

View File

@ -447,8 +447,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) {
isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_extern, Loc, PrevSpec); isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_extern, Loc, PrevSpec);
break; break;
case tok::kw___private_extern__: case tok::kw___private_extern__:
// FIXME: Implement private extern. isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_private_extern, Loc, PrevSpec);
isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_extern, Loc, PrevSpec);
break; break;
case tok::kw_static: case tok::kw_static:
if (DS.isThreadSpecified()) if (DS.isThreadSpecified())

View File

@ -710,6 +710,7 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
case DeclSpec::SCS_static: SC = VarDecl::Static; break; case DeclSpec::SCS_static: SC = VarDecl::Static; break;
case DeclSpec::SCS_auto: SC = VarDecl::Auto; break; case DeclSpec::SCS_auto: SC = VarDecl::Auto; break;
case DeclSpec::SCS_register: SC = VarDecl::Register; break; case DeclSpec::SCS_register: SC = VarDecl::Register; break;
case DeclSpec::SCS_private_extern: SC = VarDecl::PrivateExtern; break;
} }
if (S->getParent() == 0) { if (S->getParent() == 0) {
// C99 6.9p2: The storage-class specifiers auto and register shall not // C99 6.9p2: The storage-class specifiers auto and register shall not

View File

@ -281,7 +281,7 @@ protected:
class VarDecl : public ValueDecl { class VarDecl : public ValueDecl {
public: public:
enum StorageClass { enum StorageClass {
None, Extern, Static, Auto, Register None, Extern, Static, Auto, Register, PrivateExtern
}; };
StorageClass getStorageClass() const { return (StorageClass)SClass; } StorageClass getStorageClass() const { return (StorageClass)SClass; }

View File

@ -38,7 +38,8 @@ public:
SCS_extern, SCS_extern,
SCS_static, SCS_static,
SCS_auto, SCS_auto,
SCS_register SCS_register,
SCS_private_extern
}; };
// type-specifier // type-specifier