aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Beaumont-Gay <matthewbg@google.com>2011-05-19 23:44:42 +0000
committerMatt Beaumont-Gay <matthewbg@google.com>2011-05-19 23:44:42 +0000
commit1e55e91a257c4ddd4364656b048a3c345c366804 (patch)
tree05ccb3c72d7bf002d0f789a95184028a2912c0ce
parentc46d6410947b18ac4c52cff4d0f8021b10a57c1e (diff)
Undo enough of r131143 to make private copy ctor diags say "copy constructor" again
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131706 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticSemaKinds.td5
-rw-r--r--lib/Sema/SemaAccess.cpp8
-rw-r--r--test/CXX/class.access/p4.cpp4
3 files changed, 11 insertions, 6 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index 7e3cf03d53..84106856ca 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -603,9 +603,10 @@ def ext_rvalue_to_reference_access_ctor : ExtWarn<
AccessControl, InGroup<BindToTemporaryCopy>;
def err_access_base_ctor : Error<
"%select{base class|inherited virtual base class}0 %1 has %select{private|"
- "protected}2 constructor">, AccessControl;
+ "protected}3 %select{|copy }2constructor">, AccessControl;
def err_access_field_ctor : Error<
- "field of type %0 has %select{private|protected}1 constructor">, AccessControl;
+ "field of type %0 has %select{private|protected}2 "
+ "%select{|copy }1constructor">, AccessControl;
def err_access_ctor_field :
Error<"field of type %1 has %select{private|protected}2 constructor">,
diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp
index 80995eb66f..e92d19d13d 100644
--- a/lib/Sema/SemaAccess.cpp
+++ b/lib/Sema/SemaAccess.cpp
@@ -1425,13 +1425,17 @@ Sema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc,
case InitializedEntity::EK_Base:
AccessEntity.setDiag(PDiag(diag::err_access_base_ctor)
<< Entity.isInheritedVirtualBase()
- << Entity.getBaseSpecifier()->getType());
+ << Entity.getBaseSpecifier()->getType()
+ << (getSpecialMember(Constructor) ==
+ Sema::CXXCopyConstructor));
break;
case InitializedEntity::EK_Member: {
const FieldDecl *Field = cast<FieldDecl>(Entity.getDecl());
AccessEntity.setDiag(PDiag(diag::err_access_field_ctor)
- << Field->getType());
+ << Field->getType()
+ << (getSpecialMember(Constructor) ==
+ Sema::CXXCopyConstructor));
break;
}
diff --git a/test/CXX/class.access/p4.cpp b/test/CXX/class.access/p4.cpp
index 3157b87f7e..f28a3714e7 100644
--- a/test/CXX/class.access/p4.cpp
+++ b/test/CXX/class.access/p4.cpp
@@ -224,12 +224,12 @@ namespace test6 {
private: A(const A &); // expected-note 2 {{declared private here}}
};
- class Test1 { A a; }; // expected-error {{field of type 'test6::A' has private constructor}}
+ class Test1 { A a; }; // expected-error {{field of type 'test6::A' has private copy constructor}}
void test1(const Test1 &t) {
Test1 a = t; // expected-note{{implicit default copy}}
}
- class Test2 : A {}; // expected-error {{base class 'test6::A' has private constructor}}
+ class Test2 : A {}; // expected-error {{base class 'test6::A' has private copy constructor}}
void test2(const Test2 &t) {
Test2 a = t; // expected-note{{implicit default copy}}
}