Reusing an existing attribute diagnostic

In a previous patch, a new generic error diagnostic for inconsistent attributes was added.
In this commit I reuse this diagnostic for ns_returns_retained attribute check.

Differential Revision: https://reviews.llvm.org/D32697

llvm-svn: 302024
This commit is contained in:
Oren Ben Simhon 2017-05-03 14:05:00 +00:00
parent d0baa524d0
commit bada0d4628
3 changed files with 3 additions and 5 deletions

View File

@ -2820,9 +2820,6 @@ def warn_cconv_structors : Warning<
def err_regparm_mismatch : Error<"function declared with regparm(%0) " def err_regparm_mismatch : Error<"function declared with regparm(%0) "
"attribute was previously declared " "attribute was previously declared "
"%plural{0:without the regparm|:with the regparm(%1)}1 attribute">; "%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< def err_function_attribute_mismatch : Error<
"function declared with %0 attribute " "function declared with %0 attribute "
"was previously declared without the %0 attribute">; "was previously declared without the %0 attribute">;

View File

@ -2951,7 +2951,8 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD,
// Merge ns_returns_retained attribute. // Merge ns_returns_retained attribute.
if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) { if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) {
if (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); Diag(OldLocation, diag::note_previous_declaration);
return true; return true;
} }

View File

@ -199,4 +199,4 @@ class rdar10142572 {
}; };
id rdar10142572::f() { return 0; } // okay: merged down 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}}