1+ #include <stdint.h>
2+
3+ int main () {
4+ /* Compliant declarations and assignments */
5+ int integer1 = 1 ; // COMPLIANT: declaring integer as integer
6+ int integer2 = integer1 ; // COMPLIANT: declaring integer as integer
7+ integer1 =
8+ integer2 ; // COMPLIANT: assigning integer rvalue to integer variable
9+ int * int_pointer1 =
10+ & integer1 ; // COMPLIANT: declaring pointer variable as an address
11+ int * int_pointer2 = int_pointer1 ; // COMPLIANT: declaring pointer variable as
12+ // an address rvalue
13+ int_pointer1 =
14+ int_pointer2 ; // COMPLIANT: assigning pointer rvalue to a pointer variable
15+
16+ /* Integer to pointer */
17+ int * int_pointer3 = 0x01abcdef ; // NON_COMPLIANT: declaring pointer variable
18+ // with raw hex integer
19+ int_pointer3 =
20+ 0x01abcdef ; // NON_COMPLIANT: assigning raw hex to pointer variable
21+ int * int_pointer4 =
22+ integer1 ; // NON_COMPLIANT: declaring pointer variable with integer value
23+ * int_pointer4 =
24+ integer1 +
25+ 1 ; // NON_COMPLIANT: assigning integer rvalue to pointer variable
26+ int * integer_address5 =
27+ (int * )0x01abcdef ; // NON_COMPLIANT: casting raw hex to pointer type
28+ int * integer_address6 =
29+ (int * )integer1 ; // NON_COMPLIANT: casting integer value to pointer type
30+
31+ /* Pointer to integer */
32+ int * integer_address7 =
33+ & integer1 ; // COMPLIANT: declaring pointer variable as an address
34+ int integer_address8 = & integer1 ; // NON_COMPLIANT: declaring integer
35+ // variable with pointer type value
36+ integer_address8 = & integer1 ; // NON_COMPLIANT: assigning pointer type rvalue
37+ // to integer variable
38+ int integer_address =
39+ (int )& integer1 ; // NON_COMPLIANT: casting pointer value to integer type
40+
41+ /* Exceptions that are COMPLIANT */
42+ int * null_pointer1 =
43+ 0 ; // COMPLIANT: integer 0 converted to pointer becomes null pointer
44+ int * null_pointer2 = (int * )0 ; // COMPLIANT: integer 0 is converted to pointer
45+ // becomes null pointer
46+ null_pointer2 =
47+ 0 ; // COMPLIANT: integer 0 converted to pointer becomes null pointer
48+
49+ void * void_pointer = & integer1 ;
50+ intptr_t void_pointer_integer1 =
51+ void_pointer ; // COMPLIANT: void pointer can be converted to intptr_t
52+ uintptr_t void_pointer_integer2 =
53+ void_pointer ; // COMPLIANT: void pointer can be converted to uintptr_t
54+ void * void_pointer1 = (void * )
55+ void_pointer_integer1 ; // COMPLIANT: intptr_t can be converted to void*
56+ void * void_pointer2 = (void * )
57+ void_pointer_integer2 ; // COMPLIANT: uintptr_t can be converted to void*
58+
59+ return 0 ;
60+ }
0 commit comments