Allow __module_private__ on fields

llvm-svn: 139499
This commit is contained in:
Douglas Gregor 2011-09-12 16:11:24 +00:00
parent 72c0ddfbc4
commit 3baa6702ab
2 changed files with 16 additions and 0 deletions

View File

@ -8079,6 +8079,9 @@ FieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record,
if (NewFD->isInvalidDecl())
Record->setInvalidDecl();
if (D.getDeclSpec().isModulePrivateSpecified())
NewFD->setModulePrivate();
if (NewFD->isInvalidDecl() && PrevDecl) {
// Don't introduce NewFD into scope; there's already something
// with the same name in the same scope.
@ -8556,6 +8559,9 @@ Decl *Sema::ActOnIvar(Scope *S,
if (getLangOptions().ObjCAutoRefCount && inferObjCARCLifetime(NewID))
NewID->setInvalidDecl();
if (D.getDeclSpec().isModulePrivateSpecified())
NewID->setModulePrivate();
if (II) {
// FIXME: When interfaces are DeclContexts, we'll need to add
// these to the interface.

View File

@ -40,6 +40,12 @@ __module_private__ int hidden_var;
inline void test_f0_in_right() {
double &dr = f0(hidden_var);
}
struct VisibleStruct {
__module_private__ int field;
__module_private__ void setField(int f);
};
#else
__import_module__ left;
__import_module__ right;
@ -60,6 +66,10 @@ int test_broken() {
// expected-error{{expected '(' for function-style cast or type construction}} \
// expected-error{{use of undeclared identifier 'vec'}}
VisibleStruct vs;
vs.field = 0; // expected-error{{no member named 'field' in 'VisibleStruct'}}
vs.setField(1); // expected-error{{no member named 'setField' in 'VisibleStruct'}}
return hidden_var; // expected-error{{use of undeclared identifier 'hidden_var'}}
}