Index: include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- include/clang/Basic/DiagnosticSemaKinds.td +++ include/clang/Basic/DiagnosticSemaKinds.td @@ -2820,9 +2820,6 @@ def err_regparm_mismatch : Error<"function declared with regparm(%0) " "attribute was previously declared " "%plural{0:without the regparm|:with the regparm(%1)}1 attribute">; -def err_returns_retained_mismatch : Error< - "function declared with the ns_returns_retained attribute " - "was previously declared without the ns_returns_retained attribute">; def err_function_attribute_mismatch : Error< "function declared with %0 attribute " "was previously declared without the %0 attribute">; Index: lib/Sema/SemaDecl.cpp =================================================================== --- lib/Sema/SemaDecl.cpp +++ lib/Sema/SemaDecl.cpp @@ -2951,7 +2951,8 @@ // Merge ns_returns_retained attribute. if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) { if (NewTypeInfo.getProducesResult()) { - Diag(New->getLocation(), diag::err_returns_retained_mismatch); + Diag(New->getLocation(), diag::err_function_attribute_mismatch) + << "ns_returns_retained"; Diag(OldLocation, diag::note_previous_declaration); return true; } Index: test/SemaObjCXX/arc-overloading.mm =================================================================== --- test/SemaObjCXX/arc-overloading.mm +++ test/SemaObjCXX/arc-overloading.mm @@ -199,4 +199,4 @@ }; id rdar10142572::f() { return 0; } // okay: merged down -id __attribute__((ns_returns_retained)) rdar10142572::g() { return 0; } // expected-error{{function declared with the ns_returns_retained attribute was previously declared without the ns_returns_retained attribute}} +id __attribute__((ns_returns_retained)) rdar10142572::g() { return 0; } // expected-error{{function declared with ns_returns_retained attribute was previously declared without the ns_returns_retained attribute}}