[clang] 37be748 - Revert "[clang][ObjC] Add fix it for missing methods in impl"
Rumeet Dhindsa via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 4 16:44:09 PST 2022
Author: Rumeet Dhindsa
Date: 2022-01-04T16:43:54-08:00
New Revision: 37be74885946f18dbeb70343ad659924c61d2549
URL: https://github.com/llvm/llvm-project/commit/37be74885946f18dbeb70343ad659924c61d2549
DIFF: https://github.com/llvm/llvm-project/commit/37be74885946f18dbeb70343ad659924c61d2549.diff
LOG: Revert "[clang][ObjC] Add fix it for missing methods in impl"
This reverts commit dd72ae3dcc6895f95e1203b40aabcb069c76a0ab.
Notified the author of the internal failure and author suggested to revert it for
now.
Added:
Modified:
clang/lib/Sema/SemaDeclObjC.cpp
Removed:
clang/test/FixIt/fixit-objc-missing-method-impl.m
################################################################################
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp
index d4fefc3d18d8a..d6e659e17069c 100644
--- a/clang/lib/Sema/SemaDeclObjC.cpp
+++ b/clang/lib/Sema/SemaDeclObjC.cpp
@@ -2212,8 +2212,9 @@ void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl,
Diag(IVI->getLocation(), diag::err_inconsistent_ivar_count);
}
-static void WarnUndefinedMethod(Sema &S, ObjCImplDecl *Impl,
- ObjCMethodDecl *method, bool &IncompleteImpl,
+static void WarnUndefinedMethod(Sema &S, SourceLocation ImpLoc,
+ ObjCMethodDecl *method,
+ bool &IncompleteImpl,
unsigned DiagID,
NamedDecl *NeededFor = nullptr) {
// No point warning no definition of method which is 'unavailable'.
@@ -2226,19 +2227,10 @@ static void WarnUndefinedMethod(Sema &S, ObjCImplDecl *Impl,
// separate warnings. We will give that approach a try, as that
// matches what we do with protocols.
{
- const Sema::SemaDiagnosticBuilder &B = S.Diag(Impl->getLocation(), DiagID);
+ const Sema::SemaDiagnosticBuilder &B = S.Diag(ImpLoc, DiagID);
B << method;
if (NeededFor)
B << NeededFor;
-
- // Add an empty definition at the end of the @implementation.
- std::string FixItStr;
- llvm::raw_string_ostream Out(FixItStr);
- method->print(Out, Impl->getASTContext().getPrintingPolicy());
- Out << " {\n}\n\n";
-
- SourceLocation Loc = Impl->getAtEndRange().getBegin();
- B << FixItHint::CreateInsertion(Loc, FixItStr);
}
// Issue a note to the original declaration.
@@ -2687,10 +2679,14 @@ static void findProtocolsWithExplicitImpls(const ObjCInterfaceDecl *Super,
/// CheckProtocolMethodDefs - This routine checks unimplemented methods
/// Declared in protocol, and those referenced by it.
-static void CheckProtocolMethodDefs(
- Sema &S, ObjCImplDecl *Impl, ObjCProtocolDecl *PDecl, bool &IncompleteImpl,
- const Sema::SelectorSet &InsMap, const Sema::SelectorSet &ClsMap,
- ObjCContainerDecl *CDecl, LazyProtocolNameSet &ProtocolsExplictImpl) {
+static void CheckProtocolMethodDefs(Sema &S,
+ SourceLocation ImpLoc,
+ ObjCProtocolDecl *PDecl,
+ bool& IncompleteImpl,
+ const Sema::SelectorSet &InsMap,
+ const Sema::SelectorSet &ClsMap,
+ ObjCContainerDecl *CDecl,
+ LazyProtocolNameSet &ProtocolsExplictImpl) {
ObjCCategoryDecl *C = dyn_cast<ObjCCategoryDecl>(CDecl);
ObjCInterfaceDecl *IDecl = C ? C->getClassInterface()
: dyn_cast<ObjCInterfaceDecl>(CDecl);
@@ -2777,8 +2773,9 @@ static void CheckProtocolMethodDefs(
if (C || MethodInClass->isPropertyAccessor())
continue;
unsigned DIAG = diag::warn_unimplemented_protocol_method;
- if (!S.Diags.isIgnored(DIAG, Impl->getLocation())) {
- WarnUndefinedMethod(S, Impl, method, IncompleteImpl, DIAG, PDecl);
+ if (!S.Diags.isIgnored(DIAG, ImpLoc)) {
+ WarnUndefinedMethod(S, ImpLoc, method, IncompleteImpl, DIAG,
+ PDecl);
}
}
}
@@ -2799,15 +2796,15 @@ static void CheckProtocolMethodDefs(
continue;
unsigned DIAG = diag::warn_unimplemented_protocol_method;
- if (!S.Diags.isIgnored(DIAG, Impl->getLocation())) {
- WarnUndefinedMethod(S, Impl, method, IncompleteImpl, DIAG, PDecl);
+ if (!S.Diags.isIgnored(DIAG, ImpLoc)) {
+ WarnUndefinedMethod(S, ImpLoc, method, IncompleteImpl, DIAG, PDecl);
}
}
}
// Check on this protocols's referenced protocols, recursively.
for (auto *PI : PDecl->protocols())
- CheckProtocolMethodDefs(S, Impl, PI, IncompleteImpl, InsMap, ClsMap, CDecl,
- ProtocolsExplictImpl);
+ CheckProtocolMethodDefs(S, ImpLoc, PI, IncompleteImpl, InsMap, ClsMap,
+ CDecl, ProtocolsExplictImpl);
}
/// MatchAllMethodDeclarations - Check methods declared in interface
@@ -2830,7 +2827,7 @@ void Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap,
if (!I->isPropertyAccessor() &&
!InsMap.count(I->getSelector())) {
if (ImmediateClass)
- WarnUndefinedMethod(*this, IMPDecl, I, IncompleteImpl,
+ WarnUndefinedMethod(*this, IMPDecl->getLocation(), I, IncompleteImpl,
diag::warn_undef_method_impl);
continue;
} else {
@@ -2860,7 +2857,7 @@ void Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap,
if (!I->isPropertyAccessor() &&
!ClsMap.count(I->getSelector())) {
if (ImmediateClass)
- WarnUndefinedMethod(*this, IMPDecl, I, IncompleteImpl,
+ WarnUndefinedMethod(*this, IMPDecl->getLocation(), I, IncompleteImpl,
diag::warn_undef_method_impl);
} else {
ObjCMethodDecl *ImpMethodDecl =
@@ -3027,15 +3024,16 @@ void Sema::ImplMethodsVsClassMethods(Scope *S, ObjCImplDecl* IMPDecl,
if (ObjCInterfaceDecl *I = dyn_cast<ObjCInterfaceDecl> (CDecl)) {
for (auto *PI : I->all_referenced_protocols())
- CheckProtocolMethodDefs(*this, IMPDecl, PI, IncompleteImpl, InsMap,
- ClsMap, I, ExplicitImplProtocols);
+ CheckProtocolMethodDefs(*this, IMPDecl->getLocation(), PI, IncompleteImpl,
+ InsMap, ClsMap, I, ExplicitImplProtocols);
} else if (ObjCCategoryDecl *C = dyn_cast<ObjCCategoryDecl>(CDecl)) {
// For extended class, unimplemented methods in its protocols will
// be reported in the primary class.
if (!C->IsClassExtension()) {
for (auto *P : C->protocols())
- CheckProtocolMethodDefs(*this, IMPDecl, P, IncompleteImpl, InsMap,
- ClsMap, CDecl, ExplicitImplProtocols);
+ CheckProtocolMethodDefs(*this, IMPDecl->getLocation(), P,
+ IncompleteImpl, InsMap, ClsMap, CDecl,
+ ExplicitImplProtocols);
DiagnoseUnimplementedProperties(S, IMPDecl, CDecl,
/*SynthesizeProperties=*/false);
}
diff --git a/clang/test/FixIt/fixit-objc-missing-method-impl.m b/clang/test/FixIt/fixit-objc-missing-method-impl.m
deleted file mode 100644
index acc089614a6ed..0000000000000
--- a/clang/test/FixIt/fixit-objc-missing-method-impl.m
+++ /dev/null
@@ -1,15 +0,0 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
-// RUN: cp %s %t
-// RUN: not %clang_cc1 -pedantic -Werror -fixit -x objective-c %t
-// RUN: %clang_cc1 -pedantic -Werror -x objective-c %t
-
-__attribute__((objc_root_class))
- at interface NSObject
- at end
-
- at interface Foo : NSObject
-- (void)fooey; // expected-note{{method 'fooey' declared here}}
- at end
-
- at implementation Foo // expected-warning{{method definition for 'fooey' not found}}
- at end
More information about the cfe-commits
mailing list