diff options
author | Matt Beaumont-Gay <matthewbg@google.com> | 2011-05-19 23:44:42 +0000 |
---|---|---|
committer | Matt Beaumont-Gay <matthewbg@google.com> | 2011-05-19 23:44:42 +0000 |
commit | 1e55e91a257c4ddd4364656b048a3c345c366804 (patch) | |
tree | 05ccb3c72d7bf002d0f789a95184028a2912c0ce | |
parent | c46d6410947b18ac4c52cff4d0f8021b10a57c1e (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.td | 5 | ||||
-rw-r--r-- | lib/Sema/SemaAccess.cpp | 8 | ||||
-rw-r--r-- | test/CXX/class.access/p4.cpp | 4 |
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}} } |