diff options
author | ed <ed@FreeBSD.org> | 2009-06-02 17:58:47 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-06-02 17:58:47 +0000 |
commit | f27e5a09a0d815b8a4814152954ff87dadfdefc0 (patch) | |
tree | ce7d964cbb5e39695b71481698f10cb099c23d4a /test/Sema/switch.c | |
download | FreeBSD-src-f27e5a09a0d815b8a4814152954ff87dadfdefc0.zip FreeBSD-src-f27e5a09a0d815b8a4814152954ff87dadfdefc0.tar.gz |
Import Clang, at r72732.
Diffstat (limited to 'test/Sema/switch.c')
-rw-r--r-- | test/Sema/switch.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/test/Sema/switch.c b/test/Sema/switch.c new file mode 100644 index 0000000..5999f34 --- /dev/null +++ b/test/Sema/switch.c @@ -0,0 +1,70 @@ +// RUN: clang-cc -fsyntax-only -verify %s + +void f (int z) { + while (z) { + default: z--; // expected-error {{statement not in switch}} + } +} + +void foo(int X) { + switch (X) { + case 42: ; // expected-note {{previous case}} + case 5000000000LL: // expected-warning {{overflow}} + case 42: // expected-error {{duplicate case value}} + ; + + case 100 ... 99: ; // expected-warning {{empty case range}} + + case 43: ; // expected-note {{previous case}} + case 43 ... 45: ; // expected-error {{duplicate case value}} + + case 100 ... 20000:; // expected-note {{previous case}} + case 15000 ... 40000000:; // expected-error {{duplicate case value}} + } +} + +void test3(void) { + // empty switch; + switch (0); +} + +extern int g(); + +void test4() +{ + switch (1) { + case 0 && g(): + case 1 || g(): + break; + } + + switch(1) { + case g(): // expected-error {{expression is not an integer constant expression}} + case 0 ... g(): // expected-error {{expression is not an integer constant expression}} + break; + } + + switch (1) { + case 0 && g() ... 1 || g(): + break; + } + + switch (1) { + case g() && 0: // expected-error {{expression is not an integer constant expression}} // expected-note {{subexpression not valid in an integer constant expression}} + break; + } + + switch (1) { + case 0 ... g() || 1: // expected-error {{expression is not an integer constant expression}} // expected-note {{subexpression not valid in an integer constant expression}} + break; + } +} + +void test5(int z) { + switch(z) { + default: // expected-note {{previous case defined here}} + default: // expected-error {{multiple default labels in one switch}} + break; + } +} + |