]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/strcmpopt_7.c
1 /* PR tree-optimization/92501 - strncmp with constant unterminated arrays
4 { dg-options "-O1 -Wall -fdump-tree-forwprop1" } */
6 /* Unterminated arrays of the size encoded in name. */
7 const char a1
[] = { '1' };
8 const char a12
[] = { '1', '2' };
9 const char a112
[] = { '1', '1', '2' };
10 const char a123
[] = { '1', '2', '3' };
12 /* Nul-terminated strings of the length encoded in name. */
14 const char s1
[] = "1";
15 const char s12
[] = "12";
16 const char s112
[] = "112";
17 const char s123
[] = "123";
19 extern void failure_on_line (int);
21 /* Verify that the test in 'if (EQL strncmp (S, T, N))' is folded. */
22 #define T(eql, s, t, n) do { \
23 if (!(eql __builtin_strncmp (s, t, n))) \
24 failure_on_line (__LINE__); \
30 /* Mixed array and string. */
36 /* The following two are safe to fold because while strncmp compares
37 at most N bytes it doesn't compare any bytes past the first nul. */
45 T (0 ==, a1
, "12", 1);
48 /* As above, the following three are also safe to fold. */
49 T (0 !=, a1
, s12
+ 1, 1);
50 T (0 !=, a1
, s12
+ 1, 2);
51 T (0 !=, a1
, s12
+ 1, 9);
56 T (0 ==, a12
, "1", 0);
58 T (0 ==, a12
, "1", 1);
60 T (0 !=, a12
, "1", 2);
61 T (0 ==, a12
, s12
, 0);
62 T (0 ==, a12
, "12", 0);
63 T (0 ==, a12
, s12
, 1);
64 T (0 ==, a12
, "12", 1);
65 T (0 ==, a12
, s12
, 2);
66 T (0 ==, a12
, "12", 2);
67 T (0 ==, a12
, s123
, 2);
68 T (0 ==, a12
, "123", 2);
70 T (0 ==, a12
+ 0, s123
+ 1, 0);
71 T (0 !=, a12
+ 0, s123
+ 1, 1);
72 T (0 !=, a12
+ 0, s123
+ 1, 2);
73 T (0 ==, a12
+ 1, s123
+ 0, 0);
74 T (0 !=, a12
+ 1, s123
+ 0, 1);
75 T (0 !=, a12
+ 1, s123
+ 0, 2);
76 T (0 ==, a12
+ 1, s123
+ 1, 1);
77 T (0 !=, a12
+ 1, s123
+ 2, 1);
78 T (0 !=, a12
+ 1, s123
+ 3, 1);
80 T (0 ==, a12
+ 1, "123" + 1, 1);
81 T (0 !=, a12
+ 1, "123" + 2, 1);
82 T (0 !=, a12
+ 1, "123" + 3, 1);
83 T (0 !=, a12
+ 1, "123" + 3, 9);
85 /* Both arguments arrays. */
86 T (0 ==, a112
+ 0, a1
, 1);
87 T (0 ==, a112
+ 1, a1
, 1);
88 T (0 !=, a112
+ 2, a1
, 1);
90 T (0 ==, a1
, a112
+ 0, 1);
91 T (0 ==, a1
, a112
+ 1, 1);
92 T (0 !=, a1
, a112
+ 2, 1);
94 T (0 ==, a112
+ 0, a12
, 0);
95 T (0 ==, a112
+ 0, a12
, 1);
96 T (0 !=, a112
+ 0, a12
, 2);
98 T (0 ==, a112
+ 1, a12
, 2);
99 T (0 !=, a112
+ 1, a12
+ 1, 1);
100 T (0 ==, a112
+ 2, a12
+ 1, 1);
102 /* Mixed array and string. */
103 T (0 ==, s112
+ 0, a12
, 0);
104 T (0 ==, s112
+ 0, a12
, 1);
105 T (0 !=, s112
+ 0, a12
, 2);
107 T (0 ==, s112
+ 1, a12
, 0);
108 T (0 ==, s112
+ 1, a12
, 1);
109 T (0 ==, s112
+ 1, a12
, 2);
110 T (0 !=, s112
+ 2, a12
, 2);
112 T (0 ==, a112
+ 0, s1
, 1);
113 T (0 ==, a112
+ 1, s1
, 1);
114 T (0 !=, a112
+ 2, s1
, 1);
117 /* { dg-final { scan-tree-dump-not "strcmp" "forwprop1" } }
118 { dg-final { scan-tree-dump-not "strncmp" "forwprop1" } }
119 { dg-final { scan-tree-dump-not "failure_on_line_" "forwprop1" } } */