Skip to content

Commit 0b242cb

Browse files
committed
Add test.c for INT36-C
1 parent 9ddb2c6 commit 0b242cb

File tree

1 file changed

+60
-0
lines changed
  • c/cert/test/rules/INT36-C

1 file changed

+60
-0
lines changed

c/cert/test/rules/INT36-C/test.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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

Comments
 (0)