From 03fbe3ef81e75bcbc8a54a301bd617faee93b40b Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Fri, 4 Jan 2013 18:30:08 +0000 Subject: [arcmt] Adds brackets in case statements that "contain" initialization of retaining variable, thus emitting the "switch case is in protected scope" error. rdar://12952016 llvm-svn: 171484 --- clang/test/ARCMT/checking.m | 9 ++++---- clang/test/ARCMT/protected-scope.m | 36 +++++++++++++++++++++++++++++ clang/test/ARCMT/protected-scope.m.result | 38 +++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 clang/test/ARCMT/protected-scope.m create mode 100644 clang/test/ARCMT/protected-scope.m.result (limited to 'clang/test') diff --git a/clang/test/ARCMT/checking.m b/clang/test/ARCMT/checking.m index 3ad911e10a8..b0d3243254c 100644 --- a/clang/test/ARCMT/checking.m +++ b/clang/test/ARCMT/checking.m @@ -178,13 +178,12 @@ void test12(id collection) { } void test6(unsigned cond) { - // FIXME: Fix this automatically ? switch (cond) { case 0: ; - id x; // expected-note {{jump bypasses initialization of retaining variable}} + id x; - case 1: // expected-error {{switch case is in protected scope}} + case 1: break; } } @@ -293,10 +292,10 @@ id test9(Test9 *v) { void rdar9491791(int p) { switch (p) { case 3:; - NSObject *o = [[NSObject alloc] init]; // expected-note {{jump bypasses initialization of retaining variable}} + NSObject *o = [[NSObject alloc] init]; [o release]; break; - default: // expected-error {{switch case is in protected scope}} + default: break; } } diff --git a/clang/test/ARCMT/protected-scope.m b/clang/test/ARCMT/protected-scope.m new file mode 100644 index 00000000000..b33382ed50f --- /dev/null +++ b/clang/test/ARCMT/protected-scope.m @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result +// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t +// RUN: diff %t %s.result +// DISABLE: mingw32 + +#include "Common.h" + +void test(id p, int x) { + int v; + switch(x) { + case 0: + v++; + id w1 = p; + id w2 = p; + break; + case 1: + v++; + id w3 = p; + break; + case 2: + break; + default: + break; + } +} + +void test2(int p) { + switch (p) { + case 3:; + NSObject *o = [[NSObject alloc] init]; + [o release]; + break; + default: + break; + } +} diff --git a/clang/test/ARCMT/protected-scope.m.result b/clang/test/ARCMT/protected-scope.m.result new file mode 100644 index 00000000000..42d58b82216 --- /dev/null +++ b/clang/test/ARCMT/protected-scope.m.result @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result +// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t +// RUN: diff %t %s.result +// DISABLE: mingw32 + +#include "Common.h" + +void test(id p, int x) { + int v; + switch(x) { + case 0: { + v++; + id w1 = p; + id w2 = p; + break; + } + case 1: { + v++; + id w3 = p; + break; + } + case 2: + break; + default: + break; + } +} + +void test2(int p) { + switch (p) { + case 3: {; + NSObject *o = [[NSObject alloc] init]; + break; + } + default: + break; + } +} -- cgit v1.2.3