Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/strlenopt-37.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 /* PR tree-optimization/78450 - strlen(s) return value can be assumed | |
2 to be less than the size of s | |
3 { dg-do compile } | |
4 { dg-options "-O2 -fdump-tree-optimized" } */ | |
5 | |
6 #include "strlenopt.h" | |
7 | |
8 extern char ax[]; | |
9 | |
10 struct MemArray7 { char a7[7]; }; | |
11 struct MemArray6 { char a6[6]; }; | |
12 struct MemArray5 { char a5[5]; }; | |
13 struct MemArray4 { char a4[4]; }; | |
14 struct MemArray3 { char a3[3]; }; | |
15 struct MemArray2 { char a2[2]; }; | |
16 struct MemArray1 { char a1[1]; }; | |
17 struct MemArray0 { int n; char a0[0]; }; | |
18 struct MemArrayX { int n; char ax[]; }; | |
19 | |
20 struct MemArrays | |
21 { | |
22 struct MemArray7 *ma7; | |
23 struct MemArray6 *ma6; | |
24 struct MemArray5 *ma5; | |
25 struct MemArray4 *ma4; | |
26 struct MemArray3 *ma3; | |
27 struct MemArray2 *ma2; | |
28 struct MemArray1 *ma1; | |
29 struct MemArray0 *ma0; | |
30 struct MemArrayX *max; | |
31 }; | |
32 | |
33 extern void if_stmt_on_line (int); | |
34 extern void else_stmt_on_line (int); | |
35 | |
36 #define T(expr) \ | |
37 (!!(expr) ? if_stmt_on_line (__LINE__) : else_stmt_on_line (__LINE__)) | |
38 | |
39 void test_memarray_lt (struct MemArrays *p) | |
40 { | |
41 T (strlen (p->ma7->a7) < sizeof p->ma7->a7); | |
42 T (strlen (p->ma6->a6) < sizeof p->ma6->a6); | |
43 T (strlen (p->ma5->a5) < sizeof p->ma5->a5); | |
44 T (strlen (p->ma4->a4) < sizeof p->ma4->a4); | |
45 T (strlen (p->ma3->a3) < sizeof p->ma3->a3); | |
46 T (strlen (p->ma2->a2) < sizeof p->ma2->a2); | |
47 T (strlen (p->ma1->a1) < sizeof p->ma1->a1); | |
48 | |
49 T (strlen (p->ma0->a0) < 1); | |
50 T (strlen (p->max->ax) < 1); | |
51 } | |
52 | |
53 void test_memarray_eq (struct MemArrays *p) | |
54 { | |
55 T (strlen (p->ma7->a7) == sizeof p->ma7->a7); | |
56 T (strlen (p->ma6->a6) == sizeof p->ma6->a6); | |
57 T (strlen (p->ma5->a5) == sizeof p->ma5->a5); | |
58 T (strlen (p->ma4->a4) == sizeof p->ma4->a4); | |
59 T (strlen (p->ma3->a3) == sizeof p->ma3->a3); | |
60 T (strlen (p->ma2->a2) == sizeof p->ma2->a2); | |
61 T (strlen (p->ma1->a1) == sizeof p->ma1->a1); | |
62 | |
63 T (strlen (p->ma0->a0) == 1); | |
64 T (strlen (p->max->ax) == 1); | |
65 } | |
66 | |
67 void test_memarray_gt (struct MemArrays *p) | |
68 { | |
69 T (strlen (p->ma7->a7) > sizeof p->ma7->a7); | |
70 T (strlen (p->ma6->a6) > sizeof p->ma6->a6); | |
71 T (strlen (p->ma5->a5) > sizeof p->ma5->a5); | |
72 T (strlen (p->ma4->a4) > sizeof p->ma4->a4); | |
73 T (strlen (p->ma3->a3) > sizeof p->ma3->a3); | |
74 T (strlen (p->ma2->a2) > sizeof p->ma2->a2); | |
75 T (strlen (p->ma1->a1) > sizeof p->ma1->a1); | |
76 | |
77 T (strlen (p->ma0->a0) > 1); | |
78 T (strlen (p->max->ax) > 1); | |
79 } | |
80 | |
81 /* Verify that no if or else statements have been eliminated. | |
82 { dg-final { scan-tree-dump-times "if_stmt_on_line" 27 "optimized" } } | |
83 { dg-final { scan-tree-dump-times "else_stmt_on_line" 27 "optimized" } } */ |