libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / warn-sprintf-no-nul-3.c
blob1cfbe62547a3ee7a0e8d0d9da73b550b89d80b8b
1 /* PR tree-optimization/87756 - missing unterminated argument warning
2 using address of a constant character
3 { dg-do compile }
4 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
6 typedef __WCHAR_TYPE__ wchar_t;
8 int sprintf (char*, const char*, ...);
10 extern char* dest (void);
11 extern void sink (int, ...);
13 #define D dest ()
14 #define T(expr) sink (0, (expr))
16 const wchar_t wnul = L'\0';
17 const wchar_t wnonul = L'a';
18 const wchar_t wcs3[] = L"123";
20 const struct
22 wchar_t a, b, s[3];
23 } w1 = { L'\0', L'b', L"123" },
24 w2[2] = {
25 { L'\0', L'c', L"12" },
26 { L'd', L'\0', L"123" }
29 void test_sprintf_ls (void)
31 T (sprintf (D, "%ls", &wnul));
32 T (sprintf (D, "%ls", &wnonul)); /* { dg-warning "nul-terminated" } */
33 T (sprintf (D, "%.1ls", &wnonul));
34 T (sprintf (D, "%.2ls", &wnonul)); /* { dg-warning "nul-terminated" } */
36 T (sprintf (D, "%ls", &w1.a));
37 T (sprintf (D, "%ls", &w1.b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
38 T (sprintf (D, "%.1ls", &w1.b));
39 T (sprintf (D, "%.2ls", &w1.b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
40 T (sprintf (D, "%ls", w1.s)); /* { dg-warning "nul-terminated" } */
41 T (sprintf (D, "%.3ls", w1.s));
42 T (sprintf (D, "%.4ls", w1.s)); /* { dg-warning "nul-terminated" } */
44 T (sprintf (D, "%.2ls", w1.s + 1));
45 T (sprintf (D, "%.3ls", w1.s + 1)); /* { dg-warning "nul-terminated" } */
47 T (sprintf (D, "%ls", &w2[0].a));
48 T (sprintf (D, "%ls", &w2[0].b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
49 T (sprintf (D, "%.1ls", &w2[0].b));
50 T (sprintf (D, "%.2ls", &w2[0].b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
51 T (sprintf (D, "%ls", w2[0].s));
52 T (sprintf (D, "%.3ls", w2[0].s));
53 T (sprintf (D, "%.4ls", w2[0].s));
55 T (sprintf (D, "%.2ls", w2[0].s + 1));
56 T (sprintf (D, "%.3ls", w2[0].s + 1));
58 T (sprintf (D, "%ls", &w2[1].a)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
59 T (sprintf (D, "%.1ls", &w2[1].a));
60 T (sprintf (D, "%.2ls", &w2[1].a)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
61 T (sprintf (D, "%ls", &w2[1].b));
62 T (sprintf (D, "%ls", w2[1].s)); /* { dg-warning "nul-terminated" } */
63 T (sprintf (D, "%.3ls", w2[1].s));
64 T (sprintf (D, "%.4ls", w2[1].s)); /* { dg-warning "nul-terminated" } */
66 T (sprintf (D, "%.2ls", w2[1].s + 1));
67 T (sprintf (D, "%.3ls", w2[1].s + 1));/* { dg-warning "nul-terminated" } */
69 T (sprintf (D, "%ls", &wcs3[3]));
70 T (sprintf (D, "%ls", &wcs3[4])); /* { dg-warning "\\\[-Warray-bounds" } */