]> granicus.if.org Git - clang/commitdiff
Allow __module_private__ on fields
authorDouglas Gregor <dgregor@apple.com>
Mon, 12 Sep 2011 16:11:24 +0000 (16:11 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 12 Sep 2011 16:11:24 +0000 (16:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139499 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/Modules/module-private.cpp

index d6137e5dba388520c2818bb644c0928be5ff3cf5..432354cc7de6d2eb3a469c6c5dfbcaf5a258002f 100644 (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.
index 44215386226b833a4ebcea6a0b51f8d9fa566980..949d795865273535aac9c8c817c6377e9c376711 100644 (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'}}
 }