]> granicus.if.org Git - clang/commitdiff
Objective-C [qoi]. Patch to not do Fix-It for fixing
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 12 Aug 2014 22:16:41 +0000 (22:16 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 12 Aug 2014 22:16:41 +0000 (22:16 +0000)
a messaging expression except in the simple case
of a unary selector. We cannot reliably provide such a fixit due
to numerous reasons where a matching selector could not be found.
rdar://15756038

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215480 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprObjC.cpp
test/FixIt/multiarg-selector-fixit.m [new file with mode: 0644]

index 8ec2c177f721c18f5e56ca82d77b13d5fe78ee62..3e7b620466187b4be1bfddebb3e1aa68fe2b19cd 100644 (file)
@@ -1366,9 +1366,12 @@ bool Sema::CheckMessageArgumentTypes(QualType ReceiverType,
                                   : diag::warn_instance_method_not_found_with_typo;
         Selector MatchedSel = OMD->getSelector();
         SourceRange SelectorRange(SelectorLocs.front(), SelectorLocs.back());
-        Diag(SelLoc, DiagID)
-          << Sel<< isClassMessage << MatchedSel
-          << FixItHint::CreateReplacement(SelectorRange, MatchedSel.getAsString());
+        if (MatchedSel.isUnarySelector())
+          Diag(SelLoc, DiagID)
+            << Sel<< isClassMessage << MatchedSel
+            << FixItHint::CreateReplacement(SelectorRange, MatchedSel.getAsString());
+        else
+          Diag(SelLoc, DiagID) << Sel<< isClassMessage << MatchedSel;
       }
       else
         Diag(SelLoc, DiagID)
diff --git a/test/FixIt/multiarg-selector-fixit.m b/test/FixIt/multiarg-selector-fixit.m
new file mode 100644 (file)
index 0000000..d60d312
--- /dev/null
@@ -0,0 +1,15 @@
+// RUN: cp %s %t
+// RUN: %clang_cc1 -x objective-c -fixit %t
+// RUN: diff %t %s
+// rdar://15756038
+
+#define nil (void *)0
+
+@interface NSObject
+- (void)testDataSource:(id)object withMultipleArguments:(id)arguments;
+@end
+
+int main() {
+  id obj;
+  [obj TestDataSource:nil withMultipleArguments:nil];
+}