libstdc++: Fix -Wsign-compare warning in std::string::resize_for_overwrite
[official-gcc.git] / gcc / testsuite / gcc.dg / strlenopt-77.c
blob76cd11d6ac1ada089091c69878efb853e35a0ad3
1 /* PR tree-optimization/91315 - missing strlen lower bound of a string
2 known to be at least N characters
3 { dg-do compile }
4 { dg-options "-O2 -Wall -fdump-tree-optimized" } */
6 #include "strlenopt.h"
8 #define CAT(x, y) x ## y
9 #define CONCAT(x, y) CAT (x, y)
10 #define FAILNAME(name) CONCAT (call_ ## name ##_on_line_, __LINE__)
12 #define FAIL(name) do { \
13 extern void FAILNAME (name) (void); \
14 FAILNAME (name)(); \
15 } while (0)
17 /* Macro to emit a call to function named
18 call_in_true_branch_not_eliminated_on_line_NNN()
19 for each call that's expected to be eliminated. The dg-final
20 scan-tree-dump-time directive at the bottom of the test verifies
21 that no such call appears in output. */
22 #define ASSERT_ELIM(expr) \
23 if (!!(expr)) FAIL (in_true_branch_not_eliminated); else (void)0
25 char a[32];
27 void lower_bound_assign_1 (void)
29 a[0] = '1';
30 ASSERT_ELIM (strlen (a) < 1);
33 void lower_bound_assign_2 (void)
35 a[0] = '1';
36 a[1] = '2';
37 ASSERT_ELIM (strlen (a) < 2);
40 void lower_bound_assign_3 (void)
42 a[0] = '1';
43 a[1] = '2';
44 a[2] = '3';
45 ASSERT_ELIM (strlen (a) < 3);
48 void lower_bound_memcpy (void)
50 memcpy (a, "123", 3);
51 ASSERT_ELIM (strlen (a) < 3);
54 void lower_bound_memcpy_memcpy_2 (void)
56 memcpy (a, "123", 3);
57 memcpy (a + 2, "345", 3);
58 ASSERT_ELIM (strlen (a) < 5);
61 void lower_bound_memcpy_memcpy_3 (void)
63 memcpy (a, "123", 3);
64 memcpy (a + 3, "456", 3);
65 ASSERT_ELIM (strlen (a) < 6);
68 /* FIXME: Not optimized yet.
69 void lower_bound_stpcpy_stpcpy_assign (void)
71 *stpcpy (strcpy (a, "123"), "4567") = '8';
72 ASSERT_ELIM (strlen (a) < 8);
76 void lower_bound_strcpy_strcat_assign (void)
78 strcpy (a, "123");
79 strcat (a, "45");
80 a[5] = '6';
81 ASSERT_ELIM (strlen (a) < 6);
84 /* { dg-final { scan-tree-dump-times "call_in_true_branch_not_eliminated_" 0 "optimized" } } */