annotate clang/test/Sema/warn-outof-range-assign-enum.c @ 169:1f21f60db75c

Added tag llvm10 for changeset 980e56f2e095
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 09:26:57 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wassign-enum %s
anatofuz
parents:
diff changeset
2 // rdar://11824807
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 typedef enum CCTestEnum
anatofuz
parents:
diff changeset
5 {
anatofuz
parents:
diff changeset
6 One,
anatofuz
parents:
diff changeset
7 Two=4,
anatofuz
parents:
diff changeset
8 Three
anatofuz
parents:
diff changeset
9 } CCTestEnum;
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 CCTestEnum test = 50; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
12 CCTestEnum test1 = -50; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 // Explicit cast should silence the warning.
anatofuz
parents:
diff changeset
15 static const CCTestEnum SilenceWithCast1 = 51; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
16 static const CCTestEnum SilenceWithCast2 = (CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
17 static const CCTestEnum SilenceWithCast3 = (const CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
18 static const CCTestEnum SilenceWithCast4 = (const volatile CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 void SilenceWithCastLocalVar() {
anatofuz
parents:
diff changeset
21 CCTestEnum SilenceWithCast1 = 51; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
22 CCTestEnum SilenceWithCast2 = (CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
23 CCTestEnum SilenceWithCast3 = (const CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
24 CCTestEnum SilenceWithCast4 = (const volatile CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
25
anatofuz
parents:
diff changeset
26 const CCTestEnum SilenceWithCast1c = 51; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
27 const CCTestEnum SilenceWithCast2c = (CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
28 const CCTestEnum SilenceWithCast3c = (const CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
29 const CCTestEnum SilenceWithCast4c = (const volatile CCTestEnum) 51; // no-warning
anatofuz
parents:
diff changeset
30 }
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32 CCTestEnum foo(CCTestEnum r) {
anatofuz
parents:
diff changeset
33 return 20; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 enum Test2 { K_zero, K_one };
anatofuz
parents:
diff changeset
37 enum Test2 test2(enum Test2 *t) {
anatofuz
parents:
diff changeset
38 *t = 20; // expected-warning {{integer constant not in range of enumerated type 'enum Test2'}}
anatofuz
parents:
diff changeset
39 return 10; // expected-warning {{integer constant not in range of enumerated type 'enum Test2'}}
anatofuz
parents:
diff changeset
40 }
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 // PR15069
anatofuz
parents:
diff changeset
43 typedef enum
anatofuz
parents:
diff changeset
44 {
anatofuz
parents:
diff changeset
45 a = 0
anatofuz
parents:
diff changeset
46 } T;
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 void f()
anatofuz
parents:
diff changeset
49 {
anatofuz
parents:
diff changeset
50 T x = a;
anatofuz
parents:
diff changeset
51 x += 1; // expected-warning {{integer constant not in range of enumerated type}}
anatofuz
parents:
diff changeset
52 }
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 int main() {
anatofuz
parents:
diff changeset
55 CCTestEnum test = 1; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
56 test = 600; // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
57 foo(2); // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
58 foo(-1); // expected-warning {{integer constant not in range of enumerated type 'CCTestEnum'}}
anatofuz
parents:
diff changeset
59 foo(4);
anatofuz
parents:
diff changeset
60 foo(Two+1);
anatofuz
parents:
diff changeset
61 }
anatofuz
parents:
diff changeset
62