aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-10-20 16:39:13 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-10-20 16:39:13 +0000
commit209a8c2fa23636f6d065d618e7078e164903f5cd (patch)
treec93c10b0edaa55f9dd0e72a83ebdaf417caba961
parentb4ece6377d95e35a8df01cd010d910c34d690f67 (diff)
Issue warning if method body starts with a semicolon.
Fixes <rdar://problem/7308503> clang should disallow the trailing semicolon in method definitions git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84645 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticParseKinds.td3
-rw-r--r--lib/Parse/ParseObjc.cpp5
-rw-r--r--test/SemaObjC/objc-string-constant.m2
-rw-r--r--test/SemaObjC/try-catch.m2
4 files changed, 9 insertions, 3 deletions
diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td
index 6971df50cb..afd413fcab 100644
--- a/include/clang/Basic/DiagnosticParseKinds.td
+++ b/include/clang/Basic/DiagnosticParseKinds.td
@@ -201,6 +201,9 @@ def warn_expected_implementation : Warning<
"@end must appear in an @implementation context">;
def error_property_ivar_decl : Error<
"property synthesize requires specification of an ivar">;
+def warn_semicolon_before_method_nody : Warning<
+ "semicolon at start of method definition is ignored">,
+ InGroup<DiagGroup<"semicolon-at-method-body">>;
def err_expected_field_designator : Error<
"expected a field designator, such as '.field = 4'">;
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index 158cf1b49b..2e0cd6d0d9 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -1371,8 +1371,11 @@ Parser::DeclPtrTy Parser::ParseObjCMethodDefinition() {
"parsing Objective-C method");
// parse optional ';'
- if (Tok.is(tok::semi))
+ if (Tok.is(tok::semi)) {
+ if (ObjCImpDecl)
+ Diag(Tok, diag::warn_semicolon_before_method_nody);
ConsumeToken();
+ }
// We should have an opening brace now.
if (Tok.isNot(tok::l_brace)) {
diff --git a/test/SemaObjC/objc-string-constant.m b/test/SemaObjC/objc-string-constant.m
index 98239229a2..a4d83854c1 100644
--- a/test/SemaObjC/objc-string-constant.m
+++ b/test/SemaObjC/objc-string-constant.m
@@ -29,7 +29,7 @@
@end
@implementation Subclass
-- (NSString *)token;
+- (NSString *)token; // expected-warning {{semicolon at start of method definition is ignored}}
{
NSMutableString *result = nil;
diff --git a/test/SemaObjC/try-catch.m b/test/SemaObjC/try-catch.m
index 076eff5429..453d80fd59 100644
--- a/test/SemaObjC/try-catch.m
+++ b/test/SemaObjC/try-catch.m
@@ -30,7 +30,7 @@ typedef struct _NSZone NSZone;
@end
@implementation XCRefactoringTransformation
-- (NSDictionary *)setUpInfoForTransformKey:(NSString *)transformKey outError:(NSError **)outError; {
+- (NSDictionary *)setUpInfoForTransformKey:(NSString *)transformKey outError:(NSError **)outError {
@try {}
// the exception name is optional (weird)
@catch (NSException *) {}