blob: 90470f1035e1dab8623794b04d6dad09248f7527 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
/* Tests usage of const qualifier.
*/
#include <testfwk.h>
char k; /* char */
const char const_char = 123; /* constant char */
const char * const_char_ptr; /* pointer to constant char */
char * const char_ptr_const = &k; /* constant pointer to char */
const char * const const_char_ptr_const = &const_char;
/* constant pointer to constant char */
char char_array[3]; /* array of char */
const char const_char_array[] = {1,2,3}; /* array of constant char */
const char ** const_char_ptr_ptr; /* pointer to pointer to constant char */
char
ident(char x)
{
return x;
}
void
testConst(void)
{
/* Since const_char_ptr is in itself not constant, we can change it */
const_char_ptr = const_char_array;
const_char_ptr++;
ASSERT(*const_char_ptr == 2);
/* Check for bug #621531 */
const_char_ptr = const_char_array;
ASSERT(const_char_ptr[0] == 1);
const_char_ptr++;
/* Since char_ptr_const is constant, we cannot change it. However, */
/* we can change the object that it points to. */
*char_ptr_const = 5;
ASSERT(ident(*char_ptr_const)==5);
(*char_ptr_const)++;
ASSERT(ident(*char_ptr_const)==6);
/* We can't modify const_char_ptr_const or the object that it points */
/* to. Unfortunately, we can't test that compiler enforces these */
/* restriction, so just verify its initialization. */
ASSERT(*const_char_ptr_const == const_char);
/* We can change const_char_ptr_ptr or the object that it points to. */
const_char_ptr = const_char_array;
const_char_ptr_ptr = &const_char_ptr;
ASSERT(ident(**const_char_ptr_ptr)==1);
(*const_char_ptr_ptr)++;
ASSERT(ident(**const_char_ptr_ptr)==2);
}
|