summaryrefslogtreecommitdiffstats
path: root/test/Sema/warn-outof-range-assign-enum.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/Sema/warn-outof-range-assign-enum.c')
-rw-r--r--test/Sema/warn-outof-range-assign-enum.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/Sema/warn-outof-range-assign-enum.c b/test/Sema/warn-outof-range-assign-enum.c
new file mode 100644
index 0000000..2e79e66
--- /dev/null
+++ b/test/Sema/warn-outof-range-assign-enum.c
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wassign-enum %s
+// rdar://11824807
+
+typedef enum CCTestEnum
+{
+ One,
+ Two=4,
+ Three
+} CCTestEnum;
+
+CCTestEnum test = 50; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+CCTestEnum test1 = -50; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+
+CCTestEnum foo(CCTestEnum r) {
+ return 20; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+}
+
+enum Test2 { K_zero, K_one };
+enum Test2 test2(enum Test2 *t) {
+ *t = 20; // expected-warning {{integer constant not in range of enumerated type 'enum Test2'}}
+ return 10; // expected-warning {{integer constant not in range of enumerated type 'enum Test2'}}
+}
+
+int main() {
+ CCTestEnum test = 1; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+ test = 600; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+ foo(2); // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+ foo(-1); // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
+ foo(4);
+ foo(Two+1);
+}
+
OpenPOWER on IntegriCloud