annotate clang/test/Sema/sign-compare-enum.c @ 222:81f6424ef0e3 llvm-original

LLVM original branch
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 18 Jul 2021 22:10:01 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -Wsign-compare %s
anatofuz
parents:
diff changeset
2 // RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -verify -Wsign-compare %s
anatofuz
parents:
diff changeset
3 // RUN: %clang_cc1 -x c++ -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -Wsign-compare %s
anatofuz
parents:
diff changeset
4 // RUN: %clang_cc1 -x c++ -triple=x86_64-pc-win32 -fsyntax-only -verify -Wsign-compare %s
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 // Check that -Wsign-compare is off by default.
anatofuz
parents:
diff changeset
7 // RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -verify -DSILENCE %s
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 #ifdef SILENCE
anatofuz
parents:
diff changeset
10 // expected-no-diagnostics
anatofuz
parents:
diff changeset
11 #endif
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 enum PosEnum {
anatofuz
parents:
diff changeset
14 A_a = 0,
anatofuz
parents:
diff changeset
15 A_b = 1,
anatofuz
parents:
diff changeset
16 A_c = 10
anatofuz
parents:
diff changeset
17 };
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 static const int message[] = {0, 1};
anatofuz
parents:
diff changeset
20
anatofuz
parents:
diff changeset
21 int test_pos(enum PosEnum a) {
anatofuz
parents:
diff changeset
22 if (a < 2)
anatofuz
parents:
diff changeset
23 return 0;
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 // No warning, except in Windows C mode, where PosEnum is 'int' and it can
anatofuz
parents:
diff changeset
26 // take on any value according to the C standard.
anatofuz
parents:
diff changeset
27 #if !defined(SILENCE) && defined(_WIN32) && !defined(__cplusplus)
anatofuz
parents:
diff changeset
28 // expected-warning@+2 {{comparison of integers of different signs}}
anatofuz
parents:
diff changeset
29 #endif
anatofuz
parents:
diff changeset
30 if (a < 2U)
anatofuz
parents:
diff changeset
31 return 0;
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 unsigned uv = 2;
anatofuz
parents:
diff changeset
34 #if !defined(SILENCE) && defined(_WIN32) && !defined(__cplusplus)
anatofuz
parents:
diff changeset
35 // expected-warning@+2 {{comparison of integers of different signs}}
anatofuz
parents:
diff changeset
36 #endif
anatofuz
parents:
diff changeset
37 if (a < uv)
anatofuz
parents:
diff changeset
38 return 1;
anatofuz
parents:
diff changeset
39
anatofuz
parents:
diff changeset
40 #if !defined(SILENCE) && defined(_WIN32) && !defined(__cplusplus)
anatofuz
parents:
diff changeset
41 // expected-warning@+2 {{comparison of integers of different signs}}
anatofuz
parents:
diff changeset
42 #endif
anatofuz
parents:
diff changeset
43 if (a < sizeof(message)/sizeof(message[0]))
anatofuz
parents:
diff changeset
44 return 0;
anatofuz
parents:
diff changeset
45 return 4;
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 enum NegEnum {
anatofuz
parents:
diff changeset
49 NE_a = -1,
anatofuz
parents:
diff changeset
50 NE_b = 0,
anatofuz
parents:
diff changeset
51 NE_c = 10
anatofuz
parents:
diff changeset
52 };
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 int test_neg(enum NegEnum a) {
anatofuz
parents:
diff changeset
55 if (a < 2)
anatofuz
parents:
diff changeset
56 return 0;
anatofuz
parents:
diff changeset
57
anatofuz
parents:
diff changeset
58 #ifndef SILENCE
anatofuz
parents:
diff changeset
59 // expected-warning@+2 {{comparison of integers of different signs}}
anatofuz
parents:
diff changeset
60 #endif
anatofuz
parents:
diff changeset
61 if (a < 2U)
anatofuz
parents:
diff changeset
62 return 0;
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 unsigned uv = 2;
anatofuz
parents:
diff changeset
65 #ifndef SILENCE
anatofuz
parents:
diff changeset
66 // expected-warning@+2 {{comparison of integers of different signs}}
anatofuz
parents:
diff changeset
67 #endif
anatofuz
parents:
diff changeset
68 if (a < uv)
anatofuz
parents:
diff changeset
69 return 1;
anatofuz
parents:
diff changeset
70
anatofuz
parents:
diff changeset
71 #ifndef SILENCE
anatofuz
parents:
diff changeset
72 // expected-warning@+2 {{comparison of integers of different signs}}
anatofuz
parents:
diff changeset
73 #endif
anatofuz
parents:
diff changeset
74 if (a < sizeof(message)/sizeof(message[0]))
anatofuz
parents:
diff changeset
75 return 0;
anatofuz
parents:
diff changeset
76 return 4;
anatofuz
parents:
diff changeset
77 }