r324425 - [Sema][ObjC] Use SmallSetVector to fix a failing test on the reverse
Akira Hatanaka via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 6 15:44:40 PST 2018
Author: ahatanak
Date: Tue Feb 6 15:44:40 2018
New Revision: 324425
URL: http://llvm.org/viewvc/llvm-project?rev=324425&view=rev
Log:
[Sema][ObjC] Use SmallSetVector to fix a failing test on the reverse
iteration bot.
This commit reverts r315639, which was causing clang to print
diagnostics that weren't printed before. Instead, it declares
OverrideSearch::Overridden as a SmallSetVector to fix the
non-deterministic behavior r315639 was trying to fix.
rdar://problem/36445528
Modified:
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/lib/Sema/SemaDeclObjC.cpp
cfe/trunk/test/SemaObjC/arc-decls.m
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=324425&r1=324424&r2=324425&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Feb 6 15:44:40 2018
@@ -3623,6 +3623,8 @@ void Sema::mergeObjCMethodDecls(ObjCMeth
ni = newMethod->param_begin(), ne = newMethod->param_end();
ni != ne && oi != oe; ++ni, ++oi)
mergeParamDeclAttributes(*ni, *oi, *this);
+
+ CheckObjCMethodOverride(newMethod, oldMethod);
}
static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl* Old) {
Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=324425&r1=324424&r2=324425&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Tue Feb 6 15:44:40 2018
@@ -4133,7 +4133,7 @@ class OverrideSearch {
public:
Sema &S;
ObjCMethodDecl *Method;
- llvm::SmallPtrSet<ObjCMethodDecl*, 4> Overridden;
+ llvm::SmallSetVector<ObjCMethodDecl*, 4> Overridden;
bool Recursive;
public:
@@ -4170,7 +4170,7 @@ public:
}
}
- typedef llvm::SmallPtrSetImpl<ObjCMethodDecl*>::iterator iterator;
+ typedef decltype(Overridden)::iterator iterator;
iterator begin() const { return Overridden.begin(); }
iterator end() const { return Overridden.end(); }
@@ -4338,10 +4338,6 @@ void Sema::CheckObjCMethodOverrides(ObjC
// Then merge the declarations.
mergeObjCMethodDecls(ObjCMethod, overridden);
- }
-
- for (ObjCMethodDecl *overridden : overrides) {
- CheckObjCMethodOverride(ObjCMethod, overridden);
if (ObjCMethod->isImplicit() && overridden->isImplicit())
continue; // Conflicting properties are detected elsewhere.
Modified: cfe/trunk/test/SemaObjC/arc-decls.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-decls.m?rev=324425&r1=324424&r2=324425&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/arc-decls.m (original)
+++ cfe/trunk/test/SemaObjC/arc-decls.m Tue Feb 6 15:44:40 2018
@@ -154,3 +154,25 @@ struct __attribute__((objc_ownership(non
@property (readwrite, weak) ControllerClass *weak_controller;
@end
+
+ at interface I3
+ at end
+
+ at interface D3 : I3
+ at end
+
+ at interface D3 (Cat1)
+- (id)method;
+ at end
+
+ at interface I3 (Cat2)
+// FIXME: clang should diagnose mismatch between methods in D3(Cat1) and
+// I3(Cat2).
+- (id)method __attribute__((ns_returns_retained));
+ at end
+
+ at implementation D3
+- (id)method {
+ return (id)0;
+}
+ at end
More information about the cfe-commits
mailing list