diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2007-10-12 23:43:31 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2007-10-12 23:43:31 +0000 |
commit | 1109b42c036029c6ac49500af06efc15a627f5e8 (patch) | |
tree | 7ef9247819572fb3a37e9b68572ce2fd218e1cfc | |
parent | 833b2eb738a2a7a77b5c758555694a0d6bc10e1b (diff) |
Patch to check for duplicate method decls in protocols.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42938 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Sema/SemaDecl.cpp | 9 | ||||
-rw-r--r-- | test/Sema/check-dup-decl-methods-1.m | 4 |
2 files changed, 7 insertions, 6 deletions
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index b66c9f4860..e7b717c59c 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1768,15 +1768,16 @@ void Sema::ActOnAddMethodsToObjcDecl(Scope* S, DeclTy *classDecl, llvm::DenseMap<Selector, const ObjcMethodDecl*> InsMap; llvm::DenseMap<Selector, const ObjcMethodDecl*> ClsMap; - bool isClassDeclaration = - (isa<ObjcInterfaceDecl>(ClassDecl) || isa<ObjcCategoryDecl>(ClassDecl)); + bool checkDuplicateMethods = + (isa<ObjcInterfaceDecl>(ClassDecl) || isa<ObjcCategoryDecl>(ClassDecl) + || isa<ObjcProtocolDecl>(ClassDecl)); for (unsigned i = 0; i < allNum; i++ ) { ObjcMethodDecl *Method = cast_or_null<ObjcMethodDecl>(static_cast<Decl*>(allMethods[i])); if (!Method) continue; // Already issued a diagnostic. if (Method->isInstance()) { - if (isClassDeclaration) { + if (checkDuplicateMethods) { /// Check for instance method of the same name with incompatible types const ObjcMethodDecl *&PrevMethod = InsMap[Method->getSelector()]; if (PrevMethod && !MatchTwoMethodDeclarations(Method, PrevMethod)) { @@ -1793,7 +1794,7 @@ void Sema::ActOnAddMethodsToObjcDecl(Scope* S, DeclTy *classDecl, insMethods.push_back(Method); } else { - if (isClassDeclaration) { + if (checkDuplicateMethods) { /// Check for class method of the same name with incompatible types const ObjcMethodDecl *&PrevMethod = ClsMap[Method->getSelector()]; if (PrevMethod && !MatchTwoMethodDeclarations(Method, PrevMethod)) { diff --git a/test/Sema/check-dup-decl-methods-1.m b/test/Sema/check-dup-decl-methods-1.m index d69c4a7100..36a98a24a4 100644 --- a/test/Sema/check-dup-decl-methods-1.m +++ b/test/Sema/check-dup-decl-methods-1.m @@ -32,7 +32,7 @@ @end @protocol P -- (int) meth; -- (int*) meth; +- (int) meth; // expected-error {{previous declaration is here}} +- (int*) meth; // expected-error {{duplicate declaration of method 'meth'}} @end |