1
1
// RUN: %clang_analyze_cc1 \
2
2
// RUN: -analyzer-checker=core,alpha.cplusplus.EnumCastOutOfRange \
3
+ // RUN: -analyzer-output text \
3
4
// RUN: -verify %s
4
5
5
- // expected-note@+1 6 {{enum declared here}}
6
+ // expected-note@+1 + {{enum declared here}}
6
7
enum En_t {
7
8
En_0 = -4 ,
8
9
En_1 ,
@@ -13,16 +14,22 @@ enum En_t {
13
14
14
15
void unscopedUnspecifiedCStyle (void ) {
15
16
enum En_t Below = (enum En_t )(-5 ); // expected-warning {{not in the valid range of values for 'En_t'}}
17
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
16
18
enum En_t NegVal1 = (enum En_t )(-4 ); // OK.
17
19
enum En_t NegVal2 = (enum En_t )(-3 ); // OK.
18
20
enum En_t InRange1 = (enum En_t )(-2 ); // expected-warning {{not in the valid range of values for 'En_t'}}
21
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
19
22
enum En_t InRange2 = (enum En_t )(-1 ); // expected-warning {{not in the valid range of values for 'En_t'}}
23
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
20
24
enum En_t InRange3 = (enum En_t )(0 ); // expected-warning {{not in the valid range of values for 'En_t'}}
25
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
21
26
enum En_t PosVal1 = (enum En_t )(1 ); // OK.
22
27
enum En_t PosVal2 = (enum En_t )(2 ); // OK.
23
28
enum En_t InRange4 = (enum En_t )(3 ); // expected-warning {{not in the valid range of values for 'En_t'}}
29
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
24
30
enum En_t PosVal3 = (enum En_t )(4 ); // OK.
25
31
enum En_t Above = (enum En_t )(5 ); // expected-warning {{not in the valid range of values for 'En_t'}}
32
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
26
33
}
27
34
28
35
enum En_t unused ;
@@ -33,3 +40,17 @@ void unusedExpr(void) {
33
40
// generate a warning having nothing to do with this checker.
34
41
unused ; // expected-warning {{expression result unused}}
35
42
}
43
+
44
+ // Test expression tracking
45
+ void set (int * p , int v ) {
46
+ * p = v ; // expected-note {{The value -1 is assigned to 'i'}}
47
+ }
48
+
49
+
50
+ void testTrackExpression (int i ) {
51
+ set (& i , -1 ); // expected-note {{Passing the value -1 via 2nd parameter 'v'}}
52
+ // expected-note@-1 {{Calling 'set'}}
53
+ // expected-note@-2 {{Returning from 'set'}}
54
+ (void )(enum En_t )(i ); // expected-warning {{not in the valid range of values for 'En_t'}}
55
+ // expected-note@-1 {{not in the valid range of values for 'En_t'}}
56
+ }
0 commit comments