]> granicus.if.org Git - clang/commitdiff
Diagnose access to fields with private constructors.
authorAnders Carlsson <andersca@mac.com>
Wed, 21 Apr 2010 20:28:29 +0000 (20:28 +0000)
committerAnders Carlsson <andersca@mac.com>
Wed, 21 Apr 2010 20:28:29 +0000 (20:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102025 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaAccess.cpp

index a5be82df86093209061e6503b21bc51e870c1f42..eb53d6ca3847ba02d3a392a63ba39ffb4587ef55 100644 (file)
@@ -462,6 +462,9 @@ def err_access_ctor :
 def err_access_ctor_base :
     Error<"base class %0 has %select{private|protected}1 constructor">,
     NoSFINAE;
+def err_access_ctor_field :
+    Error<"field of type %1 has %select{private|protected}2 constructor">,
+    NoSFINAE;
 def err_access_ctor_vbase :
     Error<"inherited virtual base class %0 has "
     "%select{private|protected}1 constructor">,
index 1a96c26be19cfdd0fe512652a0a61ba07a9c18dd..f71d36ad7f3328d656aacf364a04c33bacaf2c9a 100644 (file)
@@ -1150,6 +1150,13 @@ Sema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc,
                           << Entity.getBaseSpecifier()->getType());
     break;
   }
+  
+  case InitializedEntity::EK_Member: {
+    const FieldDecl *Field = cast<FieldDecl>(Entity.getDecl());
+    AccessEntity.setDiag(PDiag(diag::err_access_ctor_field)
+                          << Field->getDeclName() << Field->getType());
+    break;
+  }
 
   }