Author: jtbandes Date: Sat Dec 30 21:13:03 2017 New Revision: 321593 URL: http://llvm.org/viewvc/llvm-project?rev=321593&view=rev Log: Reverted 321592: [Sema] Improve diagnostics for const- and ref-qualified member functions
A few tests need to be fixed Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/Sema/SemaOverload.cpp cfe/trunk/test/CXX/over/over.match/over.match.funcs/p4-0x.cpp cfe/trunk/test/SemaCXX/copy-initialization.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=321593&r1=321592&r2=321593&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sat Dec 30 21:13:03 2017 @@ -1589,19 +1589,11 @@ def err_non_virtual_pure : Error< def ext_pure_function_definition : ExtWarn< "function definition with pure-specifier is a Microsoft extension">, InGroup<MicrosoftPureDefinition>; -def err_qualified_member_of_unrelated : Error< - "%q0 is not a member of class %1">; - -def err_member_function_call_bad_cvr : Error< - "'this' argument to member function %0 has type %1, but function is not marked " - "%select{const|restrict|const or restrict|volatile|const or volatile|" - "volatile or restrict|const, volatile, or restrict}2">; -def err_member_function_call_bad_ref : Error< - "'this' argument to member function %0 is an %select{lvalue|rvalue}1, " - "but function has %select{non-const lvalue|rvalue}2 ref-qualifier">; -def err_member_function_call_bad_type : Error< +def err_implicit_object_parameter_init : Error< "cannot initialize object parameter of type %0 with an expression " "of type %1">; +def err_qualified_member_of_unrelated : Error< + "%q0 is not a member of class %1">; def warn_call_to_pure_virtual_member_function_from_ctor_dtor : Warning< "call to pure virtual member function %0 has undefined behavior; " @@ -1823,6 +1815,10 @@ def warn_temporary_array_to_pointer_deca def err_init_list_bad_dest_type : Error< "%select{|non-aggregate }0type %1 cannot be initialized with an initializer " "list">; +def err_member_function_call_bad_cvr : Error<"member function %0 not viable: " + "'this' argument has type %1, but function is not marked " + "%select{const|restrict|const or restrict|volatile|const or volatile|" + "volatile or restrict|const, volatile, or restrict}2">; def err_reference_bind_to_bitfield : Error< "%select{non-const|volatile}0 reference cannot bind to " Modified: cfe/trunk/lib/Sema/SemaOverload.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOverload.cpp?rev=321593&r1=321592&r2=321593&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaOverload.cpp (original) +++ cfe/trunk/lib/Sema/SemaOverload.cpp Sat Dec 30 21:13:03 2017 @@ -5145,8 +5145,7 @@ Sema::PerformObjectArgumentInitializatio *this, From->getLocStart(), From->getType(), FromClassification, Method, Method->getParent()); if (ICS.isBad()) { - switch (ICS.Bad.Kind) { - case BadConversionSequence::bad_qualifiers: { + if (ICS.Bad.Kind == BadConversionSequence::bad_qualifiers) { Qualifiers FromQs = FromRecordType.getQualifiers(); Qualifiers ToQs = DestType.getQualifiers(); unsigned CVR = FromQs.getCVRQualifiers() & ~ToQs.getCVRQualifiers(); @@ -5159,28 +5158,10 @@ Sema::PerformObjectArgumentInitializatio << Method->getDeclName(); return ExprError(); } - break; - } - - case BadConversionSequence::lvalue_ref_to_rvalue: - case BadConversionSequence::rvalue_ref_to_lvalue: { - bool IsRValueQualified = - Method->getRefQualifier() == RefQualifierKind::RQ_RValue; - Diag(From->getLocStart(), diag::err_member_function_call_bad_ref) - << Method->getDeclName() << FromClassification.isRValue() - << IsRValueQualified; - Diag(Method->getLocation(), diag::note_previous_decl) - << Method->getDeclName(); - return ExprError(); - } - - case BadConversionSequence::no_conversion: - case BadConversionSequence::unrelated_class: - break; } return Diag(From->getLocStart(), - diag::err_member_function_call_bad_type) + diag::err_implicit_object_parameter_init) << ImplicitParamRecordType << FromRecordType << From->getSourceRange(); } Modified: cfe/trunk/test/CXX/over/over.match/over.match.funcs/p4-0x.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/over/over.match/over.match.funcs/p4-0x.cpp?rev=321593&r1=321592&r2=321593&view=diff ============================================================================== --- cfe/trunk/test/CXX/over/over.match/over.match.funcs/p4-0x.cpp (original) +++ cfe/trunk/test/CXX/over/over.match/over.match.funcs/p4-0x.cpp Sat Dec 30 21:13:03 2017 @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s +// expected-no-diagnostics template<typename T> T &lvalue(); template<typename T> T &&xvalue(); @@ -19,18 +20,6 @@ struct X0 { void g(); - void c() const; // expected-note {{'c' declared here}} - void v() volatile; // expected-note {{'v' declared here}} - void r() __restrict__; // expected-note {{'r' declared here}} - void cr() const __restrict__; // expected-note {{'cr' declared here}} - void cv() const volatile; - void vr() volatile __restrict__; // expected-note {{'vr' declared here}} - void cvr() const volatile __restrict__; - - void lvalue() &; // expected-note 2 {{'lvalue' declared here}} - void const_lvalue() const&; - void rvalue() &&; // expected-note {{'rvalue' declared here}} - int &operator+(const X0&) &; float &operator+(const X0&) &&; @@ -43,7 +32,7 @@ struct X0 { float &h2() const&&; }; -void X0::g() { // expected-note {{'g' declared here}} +void X0::g() { int &ir1 = f(); int &ir2 = X0::f(); } @@ -80,26 +69,3 @@ void test_ref_qualifier_overloading() { float &fr3 = xvalue<X0>().h2(); float &fr4 = prvalue<X0>().h2(); } - -void test_diagnostics(const volatile X0 &__restrict__ cvr) { - cvr.g(); // expected-error {{'this' argument to member function 'g' has type 'const volatile X0', but function is not marked const or volatile}} - cvr.c(); // expected-error {{not marked volatile}} - cvr.v(); // expected-error {{not marked const}} - cvr.r(); // expected-error {{not marked const or volatile}} - cvr.cr(); // expected-error {{not marked volatile}} - cvr.cv(); - cvr.vr(); // expected-error {{not marked const}} - cvr.cvr(); - - lvalue<X0>().lvalue(); - lvalue<X0>().const_lvalue(); - lvalue<X0>().rvalue(); // expected-error {{'this' argument to member function 'rvalue' is an lvalue, but function has rvalue ref-qualifier}} - - xvalue<X0>().lvalue(); // expected-error {{'this' argument to member function 'lvalue' is an rvalue, but function has non-const lvalue ref-qualifier}} - xvalue<X0>().const_lvalue(); - xvalue<X0>().rvalue(); - - prvalue<X0>().lvalue(); // expected-error {{'this' argument to member function 'lvalue' is an rvalue, but function has non-const lvalue ref-qualifier}} - prvalue<X0>().const_lvalue(); - prvalue<X0>().rvalue(); -} Modified: cfe/trunk/test/SemaCXX/copy-initialization.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/copy-initialization.cpp?rev=321593&r1=321592&r2=321593&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/copy-initialization.cpp (original) +++ cfe/trunk/test/SemaCXX/copy-initialization.cpp Sat Dec 30 21:13:03 2017 @@ -26,7 +26,7 @@ struct foo { }; // PR3600 -void test(const foo *P) { P->bar(); } // expected-error{{'this' argument to member function 'bar' has type 'const foo', but function is not marked const}} +void test(const foo *P) { P->bar(); } // expected-error{{'bar' not viable: 'this' argument has type 'const foo', but function is not marked const}} namespace PR6757 { struct Foo { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits