[RISC-V] Avoid unnecessary extensions when value is already extended
[official-gcc.git] / gcc / testsuite / c-c++-common / analyzer / casts-1.c
blob7e4af3849718583d595a212fd6cdee9a7461bb7d
1 #include "analyzer-decls.h"
3 struct s1
5 char a;
6 char b;
7 char c;
8 char d;
9 };
11 struct s2
13 char arr[4];
16 struct s3
18 struct inner {
19 char a;
20 char b;
21 } arr[2];
24 void test_1 ()
26 struct s1 x = {'A', 'B', 'C', 'D'};
27 __analyzer_eval (x.a == 'A'); /* { dg-warning "TRUE" } */
28 __analyzer_eval (x.b == 'B'); /* { dg-warning "TRUE" } */
29 __analyzer_eval (x.c == 'C'); /* { dg-warning "TRUE" } */
30 __analyzer_eval (x.d == 'D'); /* { dg-warning "TRUE" } */
31 __analyzer_eval (((struct s2 *)&x)->arr[0] == 'A'); /* { dg-warning "TRUE" } */
32 __analyzer_eval (((struct s2 *)&x)->arr[1] == 'B'); /* { dg-warning "TRUE" } */
33 __analyzer_eval (((struct s2 *)&x)->arr[2] == 'C'); /* { dg-warning "TRUE" } */
34 __analyzer_eval (((struct s2 *)&x)->arr[3] == 'D'); /* { dg-warning "TRUE" } */
35 struct s3 *p3 = (struct s3 *)&x;
36 __analyzer_eval (p3->arr[0].a == 'A'); /* { dg-warning "TRUE" } */
37 __analyzer_eval (p3->arr[0].b == 'B'); /* { dg-warning "TRUE" } */
38 __analyzer_eval (p3->arr[1].a == 'C'); /* { dg-warning "TRUE" } */
39 __analyzer_eval (p3->arr[1].b == 'D'); /* { dg-warning "TRUE" } */
41 ((struct s2 *)&x)->arr[1] = '#';
42 __analyzer_eval (((struct s2 *)&x)->arr[1] == '#'); /* { dg-warning "TRUE" } */
43 __analyzer_eval (x.b == '#'); /* { dg-warning "TRUE" } */
44 __analyzer_eval (p3->arr[0].b == '#'); /* { dg-warning "TRUE" } */
47 void test_2 ()
49 struct s2 x = {{'A', 'B', 'C', 'D'}};
50 __analyzer_eval (x.arr[0] == 'A'); /* { dg-warning "TRUE" } */
51 __analyzer_eval (x.arr[1] == 'B'); /* { dg-warning "TRUE" } */
52 __analyzer_eval (x.arr[2] == 'C'); /* { dg-warning "TRUE" } */
53 __analyzer_eval (x.arr[3] == 'D'); /* { dg-warning "TRUE" } */
54 struct s1 *p = (struct s1 *)&x;
55 __analyzer_eval (p->a == 'A'); /* { dg-warning "TRUE" } */
56 __analyzer_eval (p->b == 'B'); /* { dg-warning "TRUE" } */
57 __analyzer_eval (p->c == 'C'); /* { dg-warning "TRUE" } */
58 __analyzer_eval (p->d == 'D'); /* { dg-warning "TRUE" } */
61 void test_3 ()
63 struct s3 x = {'A', 'B', 'C', 'D'};
64 __analyzer_eval (x.arr[0].a == 'A'); /* { dg-warning "TRUE" } */
65 __analyzer_eval (x.arr[0].b == 'B'); /* { dg-warning "TRUE" } */
66 __analyzer_eval (x.arr[1].a == 'C'); /* { dg-warning "TRUE" } */
67 __analyzer_eval (x.arr[1].b == 'D'); /* { dg-warning "TRUE" } */
68 struct s1 *p1 = (struct s1 *)&x;
69 __analyzer_eval (p1->a == 'A'); /* { dg-warning "TRUE" } */
70 __analyzer_eval (p1->b == 'B'); /* { dg-warning "TRUE" } */
71 __analyzer_eval (p1->c == 'C'); /* { dg-warning "TRUE" } */
72 __analyzer_eval (p1->d == 'D'); /* { dg-warning "TRUE" } */
73 struct s2 *p2 = (struct s2 *)&x;
74 __analyzer_eval (p2->arr[0] == 'A'); /* { dg-warning "TRUE" } */
75 __analyzer_eval (p2->arr[1] == 'B'); /* { dg-warning "TRUE" } */
76 __analyzer_eval (p2->arr[2] == 'C'); /* { dg-warning "TRUE" } */
77 __analyzer_eval (p2->arr[3] == 'D'); /* { dg-warning "TRUE" } */